From 47051a264ee962ec1ac29d7a3e2032121f73db00 Mon Sep 17 00:00:00 2001 From: Siavash Date: Wed, 28 Feb 2024 11:14:12 +0330 Subject: [PATCH 001/162] update github dependencies --- .github/workflows/makeCanaryRelease.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/makeCanaryRelease.yml b/.github/workflows/makeCanaryRelease.yml index f16104b96..50d2d0144 100644 --- a/.github/workflows/makeCanaryRelease.yml +++ b/.github/workflows/makeCanaryRelease.yml @@ -19,7 +19,7 @@ jobs: run: git clone --branch canary --single-branch --recurse-submodules https://github.com/siavash79/PixelXpert.git . - name: JDK 17 Setup - uses: actions/setup-java@v3 + uses: actions/setup-java@v4.1.0 with: java-version: '17' distribution: 'temurin' @@ -54,7 +54,7 @@ jobs: run: .github/make_zip.sh - name: Upload Xposed Artifact to Actions - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4.3.1 with: name: PixelXpert.zip path: output @@ -66,7 +66,7 @@ jobs: # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Canary Binary Release - uses: ncipollo/release-action@v1.13.0 + uses: ncipollo/release-action@v1.14.0 with: tag: 'canary_builds' name: 'Latest Canary' From 1f4bbf83af3b11a209985ec0d0bc7d115de2bb36 Mon Sep 17 00:00:00 2001 From: siavash79 Date: Fri, 1 Mar 2024 18:12:16 +0330 Subject: [PATCH 002/162] CHANGELOG: Fixed power saving mode not reflecting immediately on battery icon --- .github/edit2MakeNewCanary | 2 +- .../pixelxpert/modpacks/systemui/BatteryDataProvider.java | 4 ++-- .../siava/pixelxpert/modpacks/systemui/ScreenshotManager.java | 2 +- .../pixelxpert/modpacks/utils/toolkit/ReflectionTools.java | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/edit2MakeNewCanary b/.github/edit2MakeNewCanary index 65aeddb0b..04ad0604c 100644 --- a/.github/edit2MakeNewCanary +++ b/.github/edit2MakeNewCanary @@ -1 +1 @@ -Editing this file will trigger the build script for a new canary. \ No newline at end of file +Editing this file will trigger the build script for a new canary.. \ No newline at end of file diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BatteryDataProvider.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BatteryDataProvider.java index 822b14e16..8c3cd2b50 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BatteryDataProvider.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BatteryDataProvider.java @@ -68,8 +68,8 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { } }; - hookAllMethods(BatteryControllerImplClass, "fireBatteryLevelChanged", batteryDataRefreshHook); - hookAllMethods(BatteryControllerImplClass, "firePowerSaveChanged", batteryDataRefreshHook); + hookAllMethods(BatteryControllerImplClass, "onReceive", batteryDataRefreshHook); +// hookAllMethods(BatteryControllerImplClass, "firePowerSaveChanged", batteryDataRefreshHook); hookAllConstructors(BatteryStatusClass, new XC_MethodHook() { diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ScreenshotManager.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ScreenshotManager.java index a21771ad8..b1941c441 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ScreenshotManager.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ScreenshotManager.java @@ -102,7 +102,7 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { //A14 QPR3 Class ScreenshotSoundProviderImplClass = findClassIfExists("com.android.systemui.screenshot.ScreenshotSoundProviderImpl", lpparam.classLoader); if(ScreenshotSoundProviderImplClass != null) { - ReflectionTools.hookAllMethods(ScreenshotSoundProviderImplClass, "getScreenshotSound", new XC_MethodHook() { + hookAllMethods(ScreenshotSoundProviderImplClass, "getScreenshotSound", new XC_MethodHook() { @SuppressLint("NewApi") @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/toolkit/ReflectionTools.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/toolkit/ReflectionTools.java index e654a8666..852009e4f 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/toolkit/ReflectionTools.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/toolkit/ReflectionTools.java @@ -42,7 +42,7 @@ public static Set hookAllMethods(Class clazz, String me XC_MethodHook hook = new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - if(false) { + if(true) { log(param.method.getName() + " called"); } callMethod(callback, "beforeHookedMethod", param); From fd6a5b784cc8d11384ee19754d91fccf54a73fef Mon Sep 17 00:00:00 2001 From: GitHub Date: Fri, 1 Mar 2024 15:28:04 +0000 Subject: [PATCH 003/162] Version update: Release --- CanaryChangelog.md | 3 +++ MagiskModBase/module.prop | 4 ++-- MagiskModuleUpdate_Full.json | 4 ++-- MagiskModuleUpdate_Xposed.json | 4 ++-- app/build.gradle | 4 ++-- latestCanary.json | 4 ++-- 6 files changed, 13 insertions(+), 10 deletions(-) diff --git a/CanaryChangelog.md b/CanaryChangelog.md index fecc9eb04..96b35c0f4 100644 --- a/CanaryChangelog.md +++ b/CanaryChangelog.md @@ -1,3 +1,6 @@ +**canary-337** +- Fixed power saving mode not reflecting immediately on battery icon + **canary-336** - Fixed app FC when toggling NTP diff --git a/MagiskModBase/module.prop b/MagiskModBase/module.prop index 1c3f541b1..0139cbd51 100644 --- a/MagiskModBase/module.prop +++ b/MagiskModBase/module.prop @@ -1,7 +1,7 @@ id=PixelXpert name=Pixel Xpert -version=canary-336 -versionCode=336 +version=canary-337 +versionCode=337 author=Pixel Xpert Team description=Xposed based module for customizations on Pixel roms. Android 13+ updateJson=https://raw.githubusercontent.com/siavash79/PixelXpert/canary/MagiskModuleUpdate_Xposed.json diff --git a/MagiskModuleUpdate_Full.json b/MagiskModuleUpdate_Full.json index fef19e92b..580c7f4a3 100644 --- a/MagiskModuleUpdate_Full.json +++ b/MagiskModuleUpdate_Full.json @@ -1,6 +1,6 @@ { - "version": "canary-336", - "versionCode": 336, + "version": "canary-337", + "versionCode": 337, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/MagiskModuleUpdate_Xposed.json b/MagiskModuleUpdate_Xposed.json index fef19e92b..580c7f4a3 100644 --- a/MagiskModuleUpdate_Xposed.json +++ b/MagiskModuleUpdate_Xposed.json @@ -1,6 +1,6 @@ { - "version": "canary-336", - "versionCode": 336, + "version": "canary-337", + "versionCode": 337, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index ab3203051..7aa950df8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "sh.siava.pixelxpert" minSdk 33 targetSdk 34 - versionCode 336 - versionName "canary-336" + versionCode 337 + versionName "canary-337" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/latestCanary.json b/latestCanary.json index f8be78503..84b1d8ff3 100644 --- a/latestCanary.json +++ b/latestCanary.json @@ -1,6 +1,6 @@ { - "version": "canary-336", - "versionCode": 336, + "version": "canary-337", + "versionCode": 337, "zipUrl_Xposed": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "zipUrl_Full": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" From 4cf908c136c2b24811426f5e9f4fbf970dd2420d Mon Sep 17 00:00:00 2001 From: Siavash Date: Sat, 2 Mar 2024 16:31:03 +0330 Subject: [PATCH 004/162] code cleanup --- .../modpacks/systemui/BatteryDataProvider.java | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BatteryDataProvider.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BatteryDataProvider.java index 8c3cd2b50..106c5d680 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BatteryDataProvider.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BatteryDataProvider.java @@ -55,7 +55,9 @@ public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Th Class BatteryStatusClass = findClass("com.android.settingslib.fuelgauge.BatteryStatus", lpparam.classLoader); Class BatteryControllerImplClass = findClass("com.android.systemui.statusbar.policy.BatteryControllerImpl", lpparam.classLoader); - XC_MethodHook batteryDataRefreshHook = new XC_MethodHook() { + //once an intent is received, it's either battery level change, powersave change, or demo mode. we don't expect demo + // intents normally. So it's safe to assume we'll need to update battery anyway + hookAllMethods(BatteryControllerImplClass, "onReceive", new XC_MethodHook() { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { mCurrentLevel = getIntField(param.thisObject, "mLevel"); @@ -64,12 +66,9 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { || getBooleanField(param.thisObject, "mWirelessCharging"); mPowerSave = getBooleanField(param.thisObject, "mPowerSave"); - onBatteryInfoChanged(); + fireBatteryInfoChanged(); } - }; - - hookAllMethods(BatteryControllerImplClass, "onReceive", batteryDataRefreshHook); -// hookAllMethods(BatteryControllerImplClass, "firePowerSaveChanged", batteryDataRefreshHook); + }); hookAllConstructors(BatteryStatusClass, new XC_MethodHook() { @@ -141,11 +140,7 @@ public static boolean isFastCharging() return instance.mCharging && instance.mIsFastCharging; } - public static void refreshAllInfoCallbacks() - { - instance.onBatteryInfoChanged(); - } - private void onBatteryInfoChanged() { + private void fireBatteryInfoChanged() { for(BatteryInfoCallback callback : mInfoCallbacks) { try From 73d028630655fb009082fbdea97e1d20f08b8f7f Mon Sep 17 00:00:00 2001 From: Crowdin Bot Date: Sun, 3 Mar 2024 00:44:20 +0000 Subject: [PATCH 005/162] New Crowdin translations by GitHub Action --- app/src/main/res/values-af-rZA/strings.xml | 9 +++++++++ app/src/main/res/values-ar-rSA/strings.xml | 9 +++++++++ app/src/main/res/values-cs-rCZ/strings.xml | 9 +++++++++ app/src/main/res/values-da-rDK/strings.xml | 9 +++++++++ app/src/main/res/values-de-rDE/strings.xml | 9 +++++++++ app/src/main/res/values-el-rGR/strings.xml | 9 +++++++++ app/src/main/res/values-es-rES/strings.xml | 9 +++++++++ app/src/main/res/values-fa-rIR/strings.xml | 9 +++++++++ app/src/main/res/values-fi-rFI/strings.xml | 9 +++++++++ app/src/main/res/values-fr-rFR/strings.xml | 9 +++++++++ app/src/main/res/values-hi-rIN/strings.xml | 9 +++++++++ app/src/main/res/values-hu-rHU/strings.xml | 9 +++++++++ app/src/main/res/values-it-rIT/strings.xml | 9 +++++++++ app/src/main/res/values-iw-rIL/strings.xml | 9 +++++++++ app/src/main/res/values-ja-rJP/strings.xml | 9 +++++++++ app/src/main/res/values-ko-rKR/strings.xml | 9 +++++++++ app/src/main/res/values-nl-rNL/strings.xml | 9 +++++++++ app/src/main/res/values-no-rNO/strings.xml | 9 +++++++++ app/src/main/res/values-pl-rPL/strings.xml | 9 +++++++++ app/src/main/res/values-pt-rPT/strings.xml | 9 +++++++++ app/src/main/res/values-ro-rRO/strings.xml | 9 +++++++++ app/src/main/res/values-ru-rRU/strings.xml | 9 +++++++++ app/src/main/res/values-sr-rSP/strings.xml | 9 +++++++++ app/src/main/res/values-sv-rSE/strings.xml | 9 +++++++++ app/src/main/res/values-tr-rTR/strings.xml | 9 +++++++++ app/src/main/res/values-uk-rUA/strings.xml | 9 +++++++++ app/src/main/res/values-vi-rVN/strings.xml | 9 +++++++++ app/src/main/res/values-zh-rCN/strings.xml | 11 ++++++++++- app/src/main/res/values-zh-rTW/strings.xml | 9 +++++++++ 29 files changed, 262 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml index c888343d9..0ce9b373d 100644 --- a/app/src/main/res/values-af-rZA/strings.xml +++ b/app/src/main/res/values-af-rZA/strings.xml @@ -293,6 +293,15 @@ Deaktiveer elastiese oorrol-effek Belangrik: jy MOET die programme waarvoor jy oorblaai wil deaktiveer binne LSPosed aktiveer Millisekondes + Hours + System time + Use NTP to sync time + Time synchronization interval + NTP servers + Use semicolon to separate multiple servers + Sync now + Time synced successfully + NTP server connection error! Volume panel Volume dialog timeout diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index bd6db286b..c4b1ce09c 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -293,6 +293,15 @@ تعطيل تأثير التمرير المرن هام: يمكنك تمكين التطبيقات التي تريد تعطيل التمرير الزائد داخل LSPosed المللي ثانية + Hours + System time + Use NTP to sync time + Time synchronization interval + NTP servers + Use semicolon to separate multiple servers + Sync now + Time synced successfully + NTP server connection error! Volume panel Volume dialog timeout diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index b4f4c0852..38966da4e 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -293,6 +293,15 @@ Zakázat efekt elastického přetažení Důležité: MUSÍTE povolit aplikace, u kterých chcete zakázat přetáčení v rámci LSPosed milisekundy + Hours + System time + Use NTP to sync time + Time synchronization interval + NTP servers + Use semicolon to separate multiple servers + Sync now + Time synced successfully + NTP server connection error! Volume panel Volume dialog timeout diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml index b489fd0cb..b112366af 100644 --- a/app/src/main/res/values-da-rDK/strings.xml +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -293,6 +293,15 @@ Deaktiver elastisk overscroll-effekt Vigtigt: du SKAL aktivere de apps, du vil deaktivere overscroll for i LSPosed Millisekunder + Hours + System time + Use NTP to sync time + Time synchronization interval + NTP servers + Use semicolon to separate multiple servers + Sync now + Time synced successfully + NTP server connection error! Volume panel Volume dialog timeout diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index 2f816a967..afa1f52dc 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -293,6 +293,15 @@ Deaktiviere elastischen Überscrolling Effekt Wichtig: Sie MÜSSEN die Apps, für die Sie Overscroll deaktivieren möchten, in LSPosed aktivieren Millisekunden + Hours + System time + Use NTP to sync time + Time synchronization interval + NTP servers + Use semicolon to separate multiple servers + Sync now + Time synced successfully + NTP server connection error! Volume panel Volume dialog timeout diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index e67cd6dfe..773dbb258 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -293,6 +293,15 @@ Απενεργοποιήστε το ελαστικό εφέ υπερκύλισης Σημαντικό: ΠΡΕΠΕΙ να ενεργοποιήσετε τις εφαρμογές για τις οποίες θέλετε να απενεργοποιήσετε την υπερκύλιση εντός LSPosed χιλιοστά του δευτερολέπτου + Hours + System time + Use NTP to sync time + Time synchronization interval + NTP servers + Use semicolon to separate multiple servers + Sync now + Time synced successfully + NTP server connection error! Volume panel Volume dialog timeout diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 5bf1c8e60..9861cfd7a 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -293,6 +293,15 @@ Deshabilitar el efecto de desplazamiento elástico Importante: DEBE habilitar las aplicaciones para las que desea deshabilitar el desplazamiento excesivo dentro de LSPosed Milisegundos + Horas + Hora del sistema + Usar NTP para sincronizar la hora + Intervalo de sincronización de hora + Servidores NTP + Usar punto y coma para separar múltiples servidores + Sincronizar ahora + Tiempo sincronizado correctamente + ¡Error de conexión al servidor NTP! Panel de Volumen Tiempo de espera del panel de volumen diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml index 8a37312c2..01ac09a8c 100644 --- a/app/src/main/res/values-fa-rIR/strings.xml +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -293,6 +293,15 @@ غیر فعال کردن حالت الاستیک اسکرول صفحه مهم: هر برنامه که این امکان مورد نیاز است باید در LSposed اضافه شود هزارم ثانیه + Hours + System time + Use NTP to sync time + Time synchronization interval + NTP servers + Use semicolon to separate multiple servers + Sync now + Time synced successfully + NTP server connection error! پنل صدا مدت زمان نمایش پنجره صدا diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index 5ebdf250b..5dc40952a 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -293,6 +293,15 @@ Poista elastinen ylivieritystehoste käytöstä Tärkeää: sinun TÄYTYY ottaa käyttöön sovellukset, joiden ylivierityksen haluat poistaa käytöstä LSPosedissa Millisekuntia + Hours + System time + Use NTP to sync time + Time synchronization interval + NTP servers + Use semicolon to separate multiple servers + Sync now + Time synced successfully + NTP server connection error! Volume panel Volume dialog timeout diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index 7af76f638..745c83274 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -293,6 +293,15 @@ Désactiver l’effet elastique de fin de défilement Important : les applications dans lesquelles l’effet sera actif sont celles activées dans LSPosed Millisecondes + Heures + Heure du système + Utiliser NTP pour synchroniser l\'heure + Intervalle de synchronisation de l\'heure + Serveurs NTP + Utiliser un point-virgule pour séparer plusieurs serveurs + Synchroniser maintenant + Heure synchronisée avec succès + Erreur de connexion au serveur NTP ! Panneau de volume Délai de fermeture du panneau de volume diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index 8046957cd..0394bfeb9 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -293,6 +293,15 @@ इलास्टिक ओवरस्क्रॉलिंग प्रभाव अक्षम करें महत्वपूर्ण: आप उन ऐप्स को अवश्य सक्षम करें जिनके लिए आप LSPosed में ओवरस्क्रॉल अक्षम करना चाहते हैं मिलीसेकंड + Hours + System time + Use NTP to sync time + Time synchronization interval + NTP servers + Use semicolon to separate multiple servers + Sync now + Time synced successfully + NTP server connection error! Volume panel Volume dialog timeout diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index ae6994ed2..58d9f7107 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -293,6 +293,15 @@ A rugalmas túlgörgetési hatás letiltása Fontos: engedélyeznie KELL azokat az alkalmazásokat, amelyeknél letiltani szeretné a túlgörgetést az LSPoseden belül Ezredmásodperc + Hours + System time + Use NTP to sync time + Time synchronization interval + NTP servers + Use semicolon to separate multiple servers + Sync now + Time synced successfully + NTP server connection error! Volume panel Volume dialog timeout diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index 704c55255..ba584f5c5 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -293,6 +293,15 @@ Disattiva l\'effetto di overscroll elastico Importante: DEVI abilitare le app per le quali desideri disabilitare l\'overscroll all\'interno di LSPosed Milliseconds + Ore + Ora di sistema + Usa NTP per sincronizzare l\'orario + Intervallo sincronizzazione dati + Server NTP + Usa il punto e virgola per separare i server multipli + Sincronizza ora + Orario sincronizzato con successo + Errore di connessione al server NTP! Pannello del volume Durata del pannello volume diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index 6b1939f80..14ccee272 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -293,6 +293,15 @@ ביטול אפקט גלילה גמישה חשוב: עליך להפעיל את האפליקציות שברצונך להשבית עבורן גלישת יתר בתוך LSPosed אלפיות השנייה + Hours + System time + Use NTP to sync time + Time synchronization interval + NTP servers + Use semicolon to separate multiple servers + Sync now + Time synced successfully + NTP server connection error! Volume panel Volume dialog timeout diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index c980eb650..ddf7d2b82 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -293,6 +293,15 @@ オーバースクロール効果を無効化 重要事項: LSPosedでオーバースクロールを無効化するアプリをスコープに追加をする必要があります ミリ秒 + Hours + System time + Use NTP to sync time + Time synchronization interval + NTP servers + Use semicolon to separate multiple servers + Sync now + Time synced successfully + NTP server connection error! Volume panel Volume dialog timeout diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index b72c778f2..cf2cbac8b 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -293,6 +293,15 @@ 늘어나는 오버스크롤 효과 비활성화 중요: LSPosed 설정 내에서 오버스크롤 효과를 비활성화시킬 앱을 추가해야 합니다 밀리초 + Hours + System time + Use NTP to sync time + Time synchronization interval + NTP servers + Use semicolon to separate multiple servers + Sync now + Time synced successfully + NTP server connection error! Volume panel Volume dialog timeout diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index 559083884..9d9c8697b 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -293,6 +293,15 @@ Elastisch overscroll-effect uitschakelen Belangrijk: je MOET de apps inschakelen waarvoor je overscroll wilt uitschakelen, in LSPosed Milliseconden + Hours + System time + Use NTP to sync time + Time synchronization interval + NTP servers + Use semicolon to separate multiple servers + Sync now + Time synced successfully + NTP server connection error! Volume panel Volume dialog timeout diff --git a/app/src/main/res/values-no-rNO/strings.xml b/app/src/main/res/values-no-rNO/strings.xml index 248effc23..cda93513c 100644 --- a/app/src/main/res/values-no-rNO/strings.xml +++ b/app/src/main/res/values-no-rNO/strings.xml @@ -293,6 +293,15 @@ Deaktiver elastisk overrullingseffekt Viktig: du MÅ aktivere appene du vil deaktivere overscroll for i LSPosed Millisekunder + Hours + System time + Use NTP to sync time + Time synchronization interval + NTP servers + Use semicolon to separate multiple servers + Sync now + Time synced successfully + NTP server connection error! Volume panel Volume dialog timeout diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index 5b9050a8e..9b593271a 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -293,6 +293,15 @@ Wyłącz efekt elastycznego przewijania Ważne: MUSISZ włączyć aplikacje, dla których chcesz wyłączyć overscroll w ramach LSPosed milisekundy + Hours + System time + Use NTP to sync time + Time synchronization interval + NTP servers + Use semicolon to separate multiple servers + Sync now + Time synced successfully + NTP server connection error! Volume panel Volume dialog timeout diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index af83a9806..b58e988f5 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -293,6 +293,15 @@ Desativar o efeito elástico no final da navegação Nota: Requer ativar as apps, para as quais pretende desativar o efeito elástico, no gestor da LSposed Milissegundos + Hours + System time + Use NTP to sync time + Time synchronization interval + NTP servers + Use semicolon to separate multiple servers + Sync now + Time synced successfully + NTP server connection error! Painel de volume Duração do painel de volume diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 0aea65f8c..5b62dee13 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -293,6 +293,15 @@ Dezactivare efect de derulare elastică Important: TREBUIE să activezi aplicațiile pentru care dorești să dezactivezi derularea elastică în LSPosed Milisecunde + Ore + Ora sistemului + Utilizează NTP pentru a sincroniza ora + Interval de sincronizare timp + Servere NTP + Folosește punct și virgulă pentru a separa mai multe servere + Sincronizează acum + Timp sincronizat cu succes + Eroare de conexiune la serverul NTP! Panou de volum Expirare panou de volum diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index aaad42bd2..45517f844 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -293,6 +293,15 @@ Отключить эффект упругости в конце прокрутки Важно: Вы ДОЛЖНЫ включить приложения, для которых Вы хотите отключить прокрутку, в LSPosed Миллисекунды + Hours + System time + Use NTP to sync time + Time synchronization interval + NTP servers + Use semicolon to separate multiple servers + Sync now + Time synced successfully + NTP server connection error! Панель регулировки громкости Тайм-аут панели громкости diff --git a/app/src/main/res/values-sr-rSP/strings.xml b/app/src/main/res/values-sr-rSP/strings.xml index e13085cbd..ee5fd6e0a 100644 --- a/app/src/main/res/values-sr-rSP/strings.xml +++ b/app/src/main/res/values-sr-rSP/strings.xml @@ -293,6 +293,15 @@ Онемогућите ефекат еластичног премотавања Важно: МОРАТЕ да омогућите апликације за које желите да онемогућите прекомерно померање у оквиру ЛПосед Милисекунде + Hours + System time + Use NTP to sync time + Time synchronization interval + NTP servers + Use semicolon to separate multiple servers + Sync now + Time synced successfully + NTP server connection error! Volume panel Volume dialog timeout diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index 201598ad2..cecdce17c 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -293,6 +293,15 @@ Inaktivera elastisk överrullningseffekt Viktigt: du MÅSTE aktivera de appar du vill inaktivera överrullning för inom LSPosed Millisekunder + Hours + System time + Use NTP to sync time + Time synchronization interval + NTP servers + Use semicolon to separate multiple servers + Sync now + Time synced successfully + NTP server connection error! Volume panel Volume dialog timeout diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index 863188d0a..606a02122 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -293,6 +293,15 @@ Elastik kaydırma efektini devre dışı bırak Önemli: LSPosed içinde kaydırmayı devre dışı bırakmak istediğiniz uygulamaları etkinleştirmeniz GEREKİR Milisaniye + Saat + Sistem zamanı + Zamanı senkronize etmek için NTP kullan + Zaman senkronizasyon aralığı + NTP sunucuları + Birden fazla sunucuyu ayırmak için noktalı virgül kullan + Şimdi senkronize et + Zaman başarıyla senkronize edildi + NTP sunucusu bağlantı hatası! Ses paneli Ses seviyesi iletişim kutusu zaman aşımı diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index 4e84aa040..7b9cd9794 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -293,6 +293,15 @@ Вимкнути еластичний ефект прокрутки Важливо: ОБОВ\'ЯЗКОВО увімкніть програми, для яких ви хочете вимкнути прокрутку в LSPosed мілісекунди + Hours + System time + Use NTP to sync time + Time synchronization interval + NTP servers + Use semicolon to separate multiple servers + Sync now + Time synced successfully + NTP server connection error! Панель гучності Затримка звукової панелі diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index 107a59bb3..2deb4185f 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -293,6 +293,15 @@ Tắt hiệu ứng cuộn Quan trọng: bạn PHẢI bật các ứng dụng bạn muốn tắt hiệu ứng cuộn trong LSPosed Mili giây + Giờ + Thời gian hệ thống + Dùng NTP để đồng bộ thời gian + Khoảng thời gian đồng bộ thời gian + Máy chủ NTP + Sử dụng dấu chấm phẩy để phân tách nhiều máy chủ + Đồng bộ ngay + Thời gian đồng bộ thành công + Kết nối tới máy chủ NTP lỗi! Bảng điều chỉnh âm lượng Thời gian chờ hộp thoại âm lượng diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index c015c7955..69b14004c 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -15,7 +15,7 @@ 重启系统以生效 显示区域更大 显示区域更小 - Current version: %s + 当前版本:%s 更新 此频道会展示最新更新的通知。 有可用更新 @@ -293,6 +293,15 @@ 禁用过度滚动效果 重要:你必须在 LSPosed 作用域中勾选你要禁用的app 毫秒 + 小时 + 系统时间 + 用 NTP 同步时间 + 同步时间间隔 + NTP 服务器 + 使用分号分隔多个服务器 + 立即同步 + 时间同步成功 + NTP 服务器连接失败! 音量面板 音量控制超时 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 65ab89a9d..e54f34f8a 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -293,6 +293,15 @@ 禁用過度滾動效果 重要:你必須在 LSPosed 作用域中勾選你要禁用的應用程式 毫秒 + Hours + System time + Use NTP to sync time + Time synchronization interval + NTP servers + Use semicolon to separate multiple servers + Sync now + Time synced successfully + NTP server connection error! 音量面板 音量面板自動關閉時間 From 362734a92850cef57957f88371ecded7c8b0a826 Mon Sep 17 00:00:00 2001 From: Siavash Date: Sun, 3 Mar 2024 14:17:41 +0330 Subject: [PATCH 006/162] CHANGELOG: improved root service operations --- .../siava/pixelxpert/modpacks/XPLauncher.java | 48 ++++++++++++------- .../modpacks/utils/SystemUtils.java | 6 +++ .../pixelxpert/service/RootProviderProxy.java | 17 +++++-- 3 files changed, 48 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/XPLauncher.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/XPLauncher.java index 6703a2712..12a222f6a 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/XPLauncher.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/XPLauncher.java @@ -10,6 +10,7 @@ import static sh.siava.pixelxpert.modpacks.Constants.SYSTEM_UI_PACKAGE; import static sh.siava.pixelxpert.modpacks.XPrefs.Xprefs; import static sh.siava.pixelxpert.modpacks.utils.BootLoopProtector.isBootLooped; +import static sh.siava.pixelxpert.modpacks.utils.SystemUtils.sleep; import android.annotation.SuppressLint; import android.app.Instrumentation; @@ -136,7 +137,7 @@ private void onXPrefsReady(XC_LoadPackage.LoadPackageParam lpparam) { private void loadModpacks(XC_LoadPackage.LoadPackageParam lpparam) { if (Arrays.asList(ResourceManager.modRes.getStringArray(R.array.root_requirement)).contains(lpparam.packageName)) { - connectRootService(); + forceConnectRootService(); } for (Class mod : ModPacks.getMods(lpparam.packageName)) { @@ -156,25 +157,37 @@ private void loadModpacks(XC_LoadPackage.LoadPackageParam lpparam) { } } - private void connectRootService() + private void forceConnectRootService() { new Thread(() -> { - // Start RootService connection - Intent intent = new Intent(); - intent.setComponent(new ComponentName(APPLICATION_ID, APPLICATION_ID + ".service.RootProviderProxy")); + while(SystemUtils.UserManager() == null + || !SystemUtils.UserManager().isUserUnlocked()) //device is still CE encrypted + { + sleep(2000); + } + sleep(5000); //wait for the unlocked account to settle down a bit - if(!mContext.bindService(intent, instance, Context.BIND_AUTO_CREATE)) + while(rootProxyIPC == null) { - try { - Thread.sleep(2000); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } connectRootService(); + sleep(5000); } }).start(); } + private void connectRootService() + { + try { + Intent intent = new Intent(); + intent.setComponent(new ComponentName(APPLICATION_ID, APPLICATION_ID + ".service.RootProviderProxy")); + mContext.bindService(intent, instance, Context.BIND_AUTO_CREATE | Context.BIND_ADJUST_WITH_ACTIVITY); + } + catch (Throwable t) + { + log(t); + } + } + @Override public void onServiceConnected(ComponentName name, IBinder service) { rootProxyIPC = IRootProviderProxy.Stub.asInterface(service); @@ -201,10 +214,7 @@ private void waitForXprefsLoad(XC_LoadPackage.LoadPackageParam lpparam) { } catch (Throwable ignored) { - try { - //noinspection BusyWait - Thread.sleep(1000); - } catch (Throwable ignored1) {} + sleep(1000); } } @@ -221,7 +231,7 @@ private void waitForXprefsLoad(XC_LoadPackage.LoadPackageParam lpparam) { public void onServiceDisconnected(ComponentName name) { rootProxyIPC = null; - connectRootService(); + forceConnectRootService(); } public static void enqueueProxyCommand(ProxyRunnable runnable) @@ -234,8 +244,10 @@ public static void enqueueProxyCommand(ProxyRunnable runnable) } else { - proxyQueue.add(runnable); - instance.connectRootService(); + synchronized (proxyQueue) { + proxyQueue.add(runnable); + } + instance.forceConnectRootService(); } } diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/SystemUtils.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/SystemUtils.java index 864c0c09a..06091e574 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/SystemUtils.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/SystemUtils.java @@ -243,6 +243,12 @@ public SystemUtils(Context context) { registerVolumeChangeReceiver(); } + public static void sleep(int millis) + { + try { + Thread.sleep(millis); + } catch (Throwable ignored) {} + } private void registerVolumeChangeReceiver() { BroadcastReceiver volChangeReceiver = new BroadcastReceiver() { diff --git a/app/src/main/java/sh/siava/pixelxpert/service/RootProviderProxy.java b/app/src/main/java/sh/siava/pixelxpert/service/RootProviderProxy.java index 561326043..5fa3de038 100644 --- a/app/src/main/java/sh/siava/pixelxpert/service/RootProviderProxy.java +++ b/app/src/main/java/sh/siava/pixelxpert/service/RootProviderProxy.java @@ -63,15 +63,22 @@ private void startRootService() { // Start RootService connection Intent intent = new Intent(mContext, RootProvider.class); - RootService.bind(intent, mRootServiceConnection); + getMainExecutor().execute(() -> RootService.bind(intent, mRootServiceConnection)); } + /** @noinspection RedundantThrows*/ @Override public String[] runCommand(String command) throws RemoteException { - ensureEnvironment(); + try { + ensureEnvironment(); - List result = Shell.cmd(command).exec().getOut(); - return result.toArray(new String[0]); + List result = Shell.cmd(command).exec().getOut(); + return result.toArray(new String[0]); + } + catch (Throwable t) + { + return new String[0]; + } } @Override @@ -89,7 +96,7 @@ private void ensureEnvironment() throws RemoteException { startRootService(); long startTime = System.currentTimeMillis(); - while(mRootServiceIPC == null && System.currentTimeMillis() > startTime + 5000) + while(mRootServiceIPC == null && System.currentTimeMillis() < startTime + 5000) { try { //noinspection BusyWait From b68b1bde9bbcf8ad69aafaa81a6f772904d17812 Mon Sep 17 00:00:00 2001 From: Siavash Date: Sun, 3 Mar 2024 14:34:29 +0330 Subject: [PATCH 007/162] code cleanup --- .../modpacks/launcher/CustomNavGestures.java | 3 ++- .../modpacks/launcher/TaskbarActivator.java | 5 ++--- .../modpacks/systemui/BrightnessSlider.java | 6 +++--- .../pixelxpert/modpacks/systemui/ScreenGestures.java | 12 +++++------- .../modpacks/systemui/ThemeManager_13.java | 3 ++- .../modpacks/systemui/ThemeManager_14.java | 3 ++- .../sh/siava/pixelxpert/modpacks/utils/Overlays.java | 5 +---- .../siava/pixelxpert/modpacks/utils/SystemUtils.java | 4 ++-- .../siava/pixelxpert/service/RootProviderProxy.java | 9 +++------ 9 files changed, 22 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/CustomNavGestures.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/CustomNavGestures.java index 42e0e81c2..5d95c3105 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/CustomNavGestures.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/CustomNavGestures.java @@ -8,6 +8,7 @@ import static de.robv.android.xposed.XposedHelpers.getObjectField; import static de.robv.android.xposed.XposedHelpers.setObjectField; import static sh.siava.pixelxpert.modpacks.XPrefs.Xprefs; +import static sh.siava.pixelxpert.modpacks.utils.SystemUtils.sleep; import android.content.ComponentName; import android.content.Context; @@ -283,7 +284,7 @@ private void switchAppProfile() { new Thread(() -> { try { - Thread.sleep(200); //waiting for recents window to vanish + sleep(200); //waiting for recents window to vanish mContext.sendBroadcast(new Intent() .setAction(Constants.ACTION_SWITCH_APP_PROFILE)); diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/TaskbarActivator.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/TaskbarActivator.java index 437cc9d75..a987cf221 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/TaskbarActivator.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/TaskbarActivator.java @@ -14,6 +14,7 @@ import static de.robv.android.xposed.XposedHelpers.setAdditionalInstanceField; import static de.robv.android.xposed.XposedHelpers.setObjectField; import static sh.siava.pixelxpert.modpacks.XPrefs.Xprefs; +import static sh.siava.pixelxpert.modpacks.utils.SystemUtils.sleep; import android.annotation.SuppressLint; import android.app.TaskInfo; @@ -262,9 +263,7 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { return; new Thread(() -> { refreshing = true; - try { - Thread.sleep(100); - } catch (Throwable ignored) {} + sleep(100); TaskBarView.post(() -> { try { diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BrightnessSlider.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BrightnessSlider.java index 788347a54..bbd5b4ef9 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BrightnessSlider.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BrightnessSlider.java @@ -10,6 +10,7 @@ import static de.robv.android.xposed.XposedHelpers.getObjectField; import static de.robv.android.xposed.XposedHelpers.setObjectField; import static sh.siava.pixelxpert.modpacks.XPrefs.Xprefs; +import static sh.siava.pixelxpert.modpacks.utils.SystemUtils.sleep; import static sh.siava.pixelxpert.modpacks.utils.toolkit.ReflectionTools.findMethod; import android.annotation.SuppressLint; @@ -73,7 +74,7 @@ private void dataCollected(int id, Class BrightnessMirrorHandlerClass) { if (collectedFields.size() == 3) { new Thread(() -> { try { - Thread.sleep(5000); + sleep(5000); createQQSBrightness(BrightnessMirrorHandlerClass); } catch (Throwable ignored) { } @@ -150,8 +151,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { new Thread(() -> { try { while (mBrightnessMirrorController == null) { - //noinspection BusyWait - Thread.sleep(500); + sleep(500); mBrightnessMirrorController = getObjectField(param.thisObject, "mBrightnessMirrorController"); } dataCollected(2, BrightnessMirrorHandlerClass); diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ScreenGestures.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ScreenGestures.java index 867d42172..178aaaef4 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ScreenGestures.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ScreenGestures.java @@ -15,6 +15,7 @@ import static de.robv.android.xposed.XposedHelpers.getBooleanField; import static de.robv.android.xposed.XposedHelpers.getObjectField; import static sh.siava.pixelxpert.modpacks.XPrefs.Xprefs; +import static sh.siava.pixelxpert.modpacks.utils.SystemUtils.sleep; import android.annotation.SuppressLint; import android.content.Context; @@ -93,7 +94,7 @@ public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Th mLockscreenDoubleTapToSleep = new GestureDetector(mContext, new GestureDetector.SimpleOnGestureListener() { @Override public boolean onDoubleTap(MotionEvent e) { - SystemUtils.sleep(); + sleep(); return true; } }); @@ -148,10 +149,7 @@ public void run() { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { new Thread(() -> { - try { - Thread.sleep(5000); //for some reason lsposed doesn't find methods in the class. so we'll hook to constructor and wait a bit! - } catch (Exception ignored) { - } + sleep(5000); //for some reason lsposed doesn't find methods in the class. so we'll hook to constructor and wait a bit! setHooks(param); }).start(); } @@ -298,7 +296,7 @@ protected void beforeHookedMethod(MethodHookParam param1) throws Throwable { if (doubleTap && action == ACTION_UP) { if (doubleTapToSleepLockscreenEnabled && !isDozing) - SystemUtils.sleep(); + sleep(); doubleTap = false; } @@ -315,7 +313,7 @@ protected void beforeHookedMethod(MethodHookParam param1) throws Throwable { while (turnedByTTT) { try { //noinspection BusyWait - Thread.sleep(200); + sleep(200); if (keyguardNotShowing(mStatusBarKeyguardViewManager)) { turnOffTTT(); } diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ThemeManager_13.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ThemeManager_13.java index ab3a75ac3..20aac8c7a 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ThemeManager_13.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ThemeManager_13.java @@ -11,6 +11,7 @@ import static de.robv.android.xposed.XposedHelpers.getObjectField; import static de.robv.android.xposed.XposedHelpers.setObjectField; import static sh.siava.pixelxpert.modpacks.XPrefs.Xprefs; +import static sh.siava.pixelxpert.modpacks.utils.SystemUtils.sleep; import static sh.siava.pixelxpert.modpacks.utils.toolkit.OverlayTools.setOverlay; import android.annotation.SuppressLint; @@ -437,7 +438,7 @@ private void applyOverlays(boolean force) { setOverlay("QSLightThemeOverlay", false, true, false); setOverlay("QSLightThemeBSTOverlay", false, false, false); - Thread.sleep(50); + sleep(50); if (lightQSHeaderEnabled && !isCurrentlyDark) { diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ThemeManager_14.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ThemeManager_14.java index c1c4bb365..544e53829 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ThemeManager_14.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ThemeManager_14.java @@ -14,6 +14,7 @@ import static de.robv.android.xposed.XposedHelpers.getObjectField; import static de.robv.android.xposed.XposedHelpers.setObjectField; import static sh.siava.pixelxpert.modpacks.XPrefs.Xprefs; +import static sh.siava.pixelxpert.modpacks.utils.SystemUtils.sleep; import static sh.siava.pixelxpert.modpacks.utils.toolkit.ReflectionTools.hookAllMethodsMatchPattern; import android.annotation.SuppressLint; @@ -504,7 +505,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { protected void afterHookedMethod(MethodHookParam param) throws Throwable { new Thread(() -> { try { - Thread.sleep(5000); + sleep(5000); rebuildSysUI(true); } catch (Throwable ignored) {} }).start(); diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/Overlays.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/Overlays.java index b86d45959..a5856867d 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/Overlays.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/Overlays.java @@ -127,10 +127,7 @@ class overlayStartupThread extends Thread { public void run() { for (int i = 0; i < 2; i++) { setAllInternal(false); - try { - Thread.sleep(20000);//wait some seconds in case any other mod plays with us at system startup, and apply again in background - } catch (Exception ignored) { - } + SystemUtils.sleep(20000);//wait some seconds in case any other mod plays with us at system startup, and apply again in background } } } diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/SystemUtils.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/SystemUtils.java index 06091e574..f5a349088 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/SystemUtils.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/SystemUtils.java @@ -419,10 +419,10 @@ public static void doubleToggleDarkMode() { darkSwitching = true; proxy.runCommand("cmd uimode night " + (isDark ? "no" : "yes")); - Thread.sleep(1000); + sleep(1000); proxy.runCommand("cmd uimode night " + (isDark ? "yes" : "no")); - Thread.sleep(500); + sleep(500); darkSwitching = false; } catch (Exception ignored) { } diff --git a/app/src/main/java/sh/siava/pixelxpert/service/RootProviderProxy.java b/app/src/main/java/sh/siava/pixelxpert/service/RootProviderProxy.java index 5fa3de038..b6abd3ace 100644 --- a/app/src/main/java/sh/siava/pixelxpert/service/RootProviderProxy.java +++ b/app/src/main/java/sh/siava/pixelxpert/service/RootProviderProxy.java @@ -1,5 +1,7 @@ package sh.siava.pixelxpert.service; +import static sh.siava.pixelxpert.modpacks.utils.SystemUtils.sleep; + import android.app.Service; import android.content.ComponentName; import android.content.Context; @@ -98,12 +100,7 @@ private void ensureEnvironment() throws RemoteException { long startTime = System.currentTimeMillis(); while(mRootServiceIPC == null && System.currentTimeMillis() < startTime + 5000) { - try { - //noinspection BusyWait - Thread.sleep(50); - } catch (InterruptedException ignored) { - throw new RemoteException("Root service connection interrupted"); - } + sleep(50); } if(mRootServiceIPC == null) From c34b73a15e4b476e15c286b9cb09cc02422e8e72 Mon Sep 17 00:00:00 2001 From: Siavash Date: Mon, 4 Mar 2024 09:39:52 +0330 Subject: [PATCH 008/162] code cleanup --- .../sh/siava/pixelxpert/modpacks/ModPacks.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/ModPacks.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/ModPacks.java index 1f82da538..59b984e58 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/ModPacks.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/ModPacks.java @@ -62,9 +62,7 @@ public static ArrayList> getMods(String packageNa { ArrayList> modPacks = new ArrayList<>(); - //Should be loaded before others - modPacks.add(ThermalProvider.class); - modPacks.add(SettingsLibUtilsProvider.class); + //all packages modPacks.add(HookTester.class); switch (packageName) @@ -80,6 +78,7 @@ public static ArrayList> getMods(String packageNa modPacks.add(RingerVolSeperator.class); modPacks.add(SystemScreenRecord.class); break; + case Constants.SYSTEM_UI_PACKAGE: if(XPLauncher.isChildProcess && XPLauncher.processName.contains("screenshot")) { @@ -87,6 +86,10 @@ public static ArrayList> getMods(String packageNa } else { + //load before others + modPacks.add(ThermalProvider.class); + modPacks.add(SettingsLibUtilsProvider.class); + if(Build.VERSION.SDK_INT == Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { setOverlay("QSLightThemeOverlay", false, true, true); @@ -96,6 +99,7 @@ public static ArrayList> getMods(String packageNa { modPacks.add(ThemeManager_13.class); } + modPacks.add(BatteryDataProvider.class); modPacks.add(BrightnessRange.class); modPacks.add(NotificationExpander.class); @@ -124,6 +128,7 @@ public static ArrayList> getMods(String packageNa modPacks.add(VolumeDialog.class); } break; + case Constants.LAUNCHER_PACKAGE: modPacks.add(TaskbarActivator.class); modPacks.add(CustomNavGestures.class); @@ -131,15 +136,18 @@ public static ArrayList> getMods(String packageNa modPacks.add(PixelXpertIconUpdater.class); modPacks.add(FeatureFlags.class); break; + case Constants.TELECOM_SERVER_PACKAGE: modPacks.add(CallVibrator.class); break; + case Constants.SETTINGS_PACKAGE: modPacks.add(PXSettingsLauncher.class); if(Build.VERSION.SDK_INT > Build.VERSION_CODES.TIRAMISU) modPacks.add(AppCloneEnabler.class); break; + case Constants.DIALER_PACKAGE: modPacks.add(RecordingMessage.class); break; From cce218635a6c4cc4b16b74e082941e68af0a420d Mon Sep 17 00:00:00 2001 From: Siavash Date: Tue, 5 Mar 2024 09:39:51 +0330 Subject: [PATCH 009/162] CHANGELOG: Added March 2024's abnormal build number to support list --- .github/edit2MakeNewCanary | 2 +- .../ui/activities/SettingsActivity.java | 25 ++++++------------- .../sh/siava/pixelxpert/utils/AppUtils.java | 23 ++++++++++++++++- 3 files changed, 31 insertions(+), 19 deletions(-) diff --git a/.github/edit2MakeNewCanary b/.github/edit2MakeNewCanary index 04ad0604c..65aeddb0b 100644 --- a/.github/edit2MakeNewCanary +++ b/.github/edit2MakeNewCanary @@ -1 +1 @@ -Editing this file will trigger the build script for a new canary.. \ No newline at end of file +Editing this file will trigger the build script for a new canary. \ No newline at end of file diff --git a/app/src/main/java/sh/siava/pixelxpert/ui/activities/SettingsActivity.java b/app/src/main/java/sh/siava/pixelxpert/ui/activities/SettingsActivity.java index bfbf2b723..f9718387a 100644 --- a/app/src/main/java/sh/siava/pixelxpert/ui/activities/SettingsActivity.java +++ b/app/src/main/java/sh/siava/pixelxpert/ui/activities/SettingsActivity.java @@ -2,6 +2,7 @@ import static androidx.preference.PreferenceManager.getDefaultSharedPreferences; import static sh.siava.pixelxpert.ui.fragments.UpdateFragment.UPDATES_CHANNEL_ID; +import static sh.siava.pixelxpert.utils.AppUtils.isLikelyPixelBuild; import android.animation.Animator; import android.annotation.SuppressLint; @@ -164,24 +165,14 @@ protected void onCreate(Bundle savedInstanceState) { setupBottomNavigationView(); - try { - Process process = Runtime.getRuntime().exec("getprop ro.build.id"); - process.waitFor(); - byte[] buffer = new byte[process.getInputStream().available()]; - //noinspection ResultOfMethodCallIgnored - process.getInputStream().read(buffer); - String result = new String(buffer, StandardCharsets.US_ASCII).replace("\n", ""); - if (!Pattern.matches("^[T|U][A-Z]([A-Z0-9]){2}\\.[0-9]{6}\\.[0-9]{3}(\\.[A-Z0-9]{2})?$", result)) //Pixel standard build number of A13 - { - new MaterialAlertDialogBuilder(this, R.style.MaterialComponents_MaterialAlertDialog) - .setTitle(R.string.incompatible_alert_title) - .setMessage(R.string.incompatible_alert_body) - .setPositiveButton(R.string.incompatible_alert_ok_btn, (dialog, which) -> dialog.dismiss()) - .show(); - } - } catch (Throwable ignored) { + if (!isLikelyPixelBuild() && !BuildConfig.DEBUG) + { + new MaterialAlertDialogBuilder(this, R.style.MaterialComponents_MaterialAlertDialog) + .setTitle(R.string.incompatible_alert_title) + .setMessage(R.string.incompatible_alert_body) + .setPositiveButton(R.string.incompatible_alert_ok_btn, (dialog, which) -> dialog.dismiss()) + .show(); } - } @SuppressLint("NonConstantResourceId") diff --git a/app/src/main/java/sh/siava/pixelxpert/utils/AppUtils.java b/app/src/main/java/sh/siava/pixelxpert/utils/AppUtils.java index 392ab864f..60e0fac5e 100644 --- a/app/src/main/java/sh/siava/pixelxpert/utils/AppUtils.java +++ b/app/src/main/java/sh/siava/pixelxpert/utils/AppUtils.java @@ -1,11 +1,14 @@ package sh.siava.pixelxpert.utils; import android.os.FileUtils; +import android.util.Log; import com.topjohnwu.superuser.Shell; import java.io.File; import java.io.FileOutputStream; +import java.nio.charset.StandardCharsets; +import java.util.regex.Pattern; import java.util.zip.ZipFile; public class AppUtils { @@ -28,6 +31,24 @@ public static void Restart(String what) { } } + public static boolean isLikelyPixelBuild() + { + try + { + Process process = Runtime.getRuntime().exec("getprop ro.build.id"); + process.waitFor(); + byte[] buffer = new byte[process.getInputStream().available()]; + //noinspection ResultOfMethodCallIgnored + process.getInputStream().read(buffer); + String result = new String(buffer, StandardCharsets.US_ASCII).replace("\n", ""); + return Pattern.matches("^[TUA][A-Z]([A-Z0-9]){2}\\.[0-9]{6}\\.[0-9]{3}(\\.[A-Z0-9]{2})?$", result); //Pixel standard build number of A13/14 + new weird build number of 'A' prefix + } + catch (Throwable ignored) + { + return false; + } + } + public static boolean installDoubleZip(String DoubleZipped) //installs the zip magisk module. even if it's zipped inside another zip { try { @@ -58,7 +79,7 @@ public static boolean installDoubleZip(String DoubleZipped) //installs the zip m unzippedFile.delete(); return true; } catch (Exception e) { - e.printStackTrace(); + Log.e("PixelXpert Installer", "PixelXpert zip install error: ", e); return false; } } From 574dc6c0c5fc578ffeff4b0bfc9161c734b273ff Mon Sep 17 00:00:00 2001 From: GitHub Date: Tue, 5 Mar 2024 06:12:46 +0000 Subject: [PATCH 010/162] Version update: Release --- CanaryChangelog.md | 4 ++++ MagiskModBase/module.prop | 4 ++-- MagiskModuleUpdate_Full.json | 4 ++-- MagiskModuleUpdate_Xposed.json | 4 ++-- app/build.gradle | 4 ++-- latestCanary.json | 4 ++-- 6 files changed, 14 insertions(+), 10 deletions(-) diff --git a/CanaryChangelog.md b/CanaryChangelog.md index 96b35c0f4..3eab8ae4b 100644 --- a/CanaryChangelog.md +++ b/CanaryChangelog.md @@ -1,3 +1,7 @@ +**canary-338** +- Added March 2024's abnormal build number to support list +- improved root service operations + **canary-337** - Fixed power saving mode not reflecting immediately on battery icon diff --git a/MagiskModBase/module.prop b/MagiskModBase/module.prop index 0139cbd51..0760649b2 100644 --- a/MagiskModBase/module.prop +++ b/MagiskModBase/module.prop @@ -1,7 +1,7 @@ id=PixelXpert name=Pixel Xpert -version=canary-337 -versionCode=337 +version=canary-338 +versionCode=338 author=Pixel Xpert Team description=Xposed based module for customizations on Pixel roms. Android 13+ updateJson=https://raw.githubusercontent.com/siavash79/PixelXpert/canary/MagiskModuleUpdate_Xposed.json diff --git a/MagiskModuleUpdate_Full.json b/MagiskModuleUpdate_Full.json index 580c7f4a3..dba311b76 100644 --- a/MagiskModuleUpdate_Full.json +++ b/MagiskModuleUpdate_Full.json @@ -1,6 +1,6 @@ { - "version": "canary-337", - "versionCode": 337, + "version": "canary-338", + "versionCode": 338, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/MagiskModuleUpdate_Xposed.json b/MagiskModuleUpdate_Xposed.json index 580c7f4a3..dba311b76 100644 --- a/MagiskModuleUpdate_Xposed.json +++ b/MagiskModuleUpdate_Xposed.json @@ -1,6 +1,6 @@ { - "version": "canary-337", - "versionCode": 337, + "version": "canary-338", + "versionCode": 338, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 7aa950df8..4ef3975d8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "sh.siava.pixelxpert" minSdk 33 targetSdk 34 - versionCode 337 - versionName "canary-337" + versionCode 338 + versionName "canary-338" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/latestCanary.json b/latestCanary.json index 84b1d8ff3..9bb00a43b 100644 --- a/latestCanary.json +++ b/latestCanary.json @@ -1,6 +1,6 @@ { - "version": "canary-337", - "versionCode": 337, + "version": "canary-338", + "versionCode": 338, "zipUrl_Xposed": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "zipUrl_Full": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" From de93248aea5419b95cb3870b2f9812053f3d7a76 Mon Sep 17 00:00:00 2001 From: Siavash Date: Sat, 9 Mar 2024 17:52:52 +0330 Subject: [PATCH 011/162] CHANGELOG: A14ap21b2: Fixed NotificationExpander --- .../pixelxpert/modpacks/systemui/NotificationExpander.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/NotificationExpander.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/NotificationExpander.java index 8cc1c553f..8af54431e 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/NotificationExpander.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/NotificationExpander.java @@ -162,14 +162,14 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { private void updateFooterBtn() { if(FooterView == null) return; //Footer not inflated yet - View mDismissButton = (View) getObjectField(FooterView, "mManageButton"); //A13 + View mClearAllButton = (View) getObjectField(FooterView, "mClearAllButton"); //A13 - int fh = mDismissButton.getLayoutParams().height; + int fh = mClearAllButton.getLayoutParams().height; if (fh > 0) { //sometimes it's zero. we don't need that NotificationExpander.fh = fh; } - int tc = (int) callMethod(mDismissButton, "getCurrentTextColor"); + int tc = (int) callMethod(mClearAllButton, "getCurrentTextColor"); Drawable expandArrows = ResourcesCompat.getDrawable(ResourceManager.modRes, R.drawable.ic_expand, mContext.getTheme()); expandArrows.setTint(tc); From 8c7f8169576351e0fcea7c9622fa261e0ebffb75 Mon Sep 17 00:00:00 2001 From: Siavash Date: Sat, 9 Mar 2024 18:56:36 +0330 Subject: [PATCH 012/162] CHANGELOG: A14ap21b2: Fixed QS Tile label sizes --- .github/edit2MakeNewCanary | 2 +- .../modpacks/systemui/QSTileGrid.java | 38 +++++++++++++------ 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/.github/edit2MakeNewCanary b/.github/edit2MakeNewCanary index 65aeddb0b..04ad0604c 100644 --- a/.github/edit2MakeNewCanary +++ b/.github/edit2MakeNewCanary @@ -1 +1 @@ -Editing this file will trigger the build script for a new canary. \ No newline at end of file +Editing this file will trigger the build script for a new canary.. \ No newline at end of file diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/QSTileGrid.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/QSTileGrid.java index 6f633f46b..8660246f3 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/QSTileGrid.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/QSTileGrid.java @@ -264,15 +264,13 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { } if (labelSize == null) { //we need initial font sizes - callStaticMethod(FontSizeUtilsClass, - "updateFontSize", - mContext.getResources().getIdentifier("qs_tile_text_size", "dimen", mContext.getPackageName()), - getObjectField(param.thisObject, "label")); + updateFontSize(FontSizeUtilsClass, + getObjectField(param.thisObject, "label"), + mContext.getResources().getIdentifier("qs_tile_text_size", "dimen", mContext.getPackageName())); - callStaticMethod(FontSizeUtilsClass, - "updateFontSize", - mContext.getResources().getIdentifier("qs_tile_text_size", "dimen", mContext.getPackageName()), - getObjectField(param.thisObject, "secondaryLabel")); + updateFontSize(FontSizeUtilsClass, + getObjectField(param.thisObject, "secondaryLabel"), + mContext.getResources().getIdentifier("qs_tile_text_size", "dimen", mContext.getPackageName())); TextView label = (TextView) getObjectField(param.thisObject, "label"); TextView secondaryLabel = (TextView) getObjectField(param.thisObject, "secondaryLabel"); @@ -283,8 +281,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { secondaryLabelSizeUnit = secondaryLabel.getTextSizeUnit(); secondaryLabelSize = secondaryLabel.getTextSize(); } - } catch (Throwable ignored) { - } + } catch (Throwable ignored) {} } }); @@ -305,6 +302,24 @@ else if (isLandscape && QSColQtyL != QS_COL_NOT_SET) }); } + private void updateFontSize(Class FontSizeUtilsClass, Object textView, int resId) + { + try + { + callStaticMethod(FontSizeUtilsClass, + "updateFontSize", + textView, + resId); + } + catch (Throwable ignored) + { + callStaticMethod(FontSizeUtilsClass, + "updateFontSize", + resId, + textView); + } + } + @SuppressLint("DiscouragedApi") private boolean updateTileLayoutResources(Object thisObject) { final Resources res = mContext.getResources(); @@ -379,8 +394,7 @@ private void setLabelSizes(XC_MethodHook.MethodHookParam param) { if (QSSecondaryLabelScaleFactor != 1) { ((TextView) getObjectField(param.thisObject, "secondaryLabel")).setTextSize(secondaryLabelSizeUnit, secondaryLabelSize * QSSecondaryLabelScaleFactor); } - } catch (Throwable ignored) { - } + } catch (Throwable ignored) {} } @Override From 0b115cb855847fd6c9638b884b89e1313c146291 Mon Sep 17 00:00:00 2001 From: GitHub Date: Sat, 9 Mar 2024 15:29:18 +0000 Subject: [PATCH 013/162] Version update: Release --- CanaryChangelog.md | 4 ++++ MagiskModBase/module.prop | 4 ++-- MagiskModuleUpdate_Full.json | 4 ++-- MagiskModuleUpdate_Xposed.json | 4 ++-- app/build.gradle | 4 ++-- latestCanary.json | 4 ++-- 6 files changed, 14 insertions(+), 10 deletions(-) diff --git a/CanaryChangelog.md b/CanaryChangelog.md index 3eab8ae4b..3e458c734 100644 --- a/CanaryChangelog.md +++ b/CanaryChangelog.md @@ -1,3 +1,7 @@ +**canary-339** +- A14ap21b2: Fixed QS Tile label sizes +- A14ap21b2: Fixed NotificationExpander + **canary-338** - Added March 2024's abnormal build number to support list - improved root service operations diff --git a/MagiskModBase/module.prop b/MagiskModBase/module.prop index 0760649b2..b889cba7b 100644 --- a/MagiskModBase/module.prop +++ b/MagiskModBase/module.prop @@ -1,7 +1,7 @@ id=PixelXpert name=Pixel Xpert -version=canary-338 -versionCode=338 +version=canary-339 +versionCode=339 author=Pixel Xpert Team description=Xposed based module for customizations on Pixel roms. Android 13+ updateJson=https://raw.githubusercontent.com/siavash79/PixelXpert/canary/MagiskModuleUpdate_Xposed.json diff --git a/MagiskModuleUpdate_Full.json b/MagiskModuleUpdate_Full.json index dba311b76..8bc414ee7 100644 --- a/MagiskModuleUpdate_Full.json +++ b/MagiskModuleUpdate_Full.json @@ -1,6 +1,6 @@ { - "version": "canary-338", - "versionCode": 338, + "version": "canary-339", + "versionCode": 339, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/MagiskModuleUpdate_Xposed.json b/MagiskModuleUpdate_Xposed.json index dba311b76..8bc414ee7 100644 --- a/MagiskModuleUpdate_Xposed.json +++ b/MagiskModuleUpdate_Xposed.json @@ -1,6 +1,6 @@ { - "version": "canary-338", - "versionCode": 338, + "version": "canary-339", + "versionCode": 339, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 4ef3975d8..55081b85e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "sh.siava.pixelxpert" minSdk 33 targetSdk 34 - versionCode 338 - versionName "canary-338" + versionCode 339 + versionName "canary-339" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/latestCanary.json b/latestCanary.json index 9bb00a43b..bd9e4bad1 100644 --- a/latestCanary.json +++ b/latestCanary.json @@ -1,6 +1,6 @@ { - "version": "canary-338", - "versionCode": 338, + "version": "canary-339", + "versionCode": 339, "zipUrl_Xposed": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "zipUrl_Full": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" From 29fd0ec27dc8748a2ccb1495c589a4072d9a811b Mon Sep 17 00:00:00 2001 From: Crowdin Bot Date: Sun, 10 Mar 2024 00:45:19 +0000 Subject: [PATCH 014/162] New Crowdin translations by GitHub Action --- app/src/main/res/values-pt-rPT/strings.xml | 22 +++++++++++----------- app/src/main/res/values-ru-rRU/strings.xml | 22 +++++++++++----------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index b58e988f5..99b7e0b37 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -167,7 +167,7 @@ Cor ao carregar Cor ao carregar rápido Cores entre o intervalo - Colored battery percentage while charging + Cor da bateria ao carregar Hoje Semana atual Mês atual @@ -293,15 +293,15 @@ Desativar o efeito elástico no final da navegação Nota: Requer ativar as apps, para as quais pretende desativar o efeito elástico, no gestor da LSposed Milissegundos - Hours - System time - Use NTP to sync time - Time synchronization interval - NTP servers - Use semicolon to separate multiple servers - Sync now - Time synced successfully - NTP server connection error! + Horas + Hora do sistema + Usar NTP para sincronizar dia e hora + Intervalo de sincronização + Servidores NTP + Use ponto e vírgula para separar vários servidores + Sincronizar agora + Data e hora sincronizada com sucesso + Erro de ligação ao servidor NTP! Painel de volume Duração do painel de volume @@ -313,7 +313,7 @@ Desbloqueado para todas as aplicações via Pixel Xpert: Desfrute! Informação da bateria… - Erro ao carregar dados + Erro ao carregar dados de carregamento Vibrar ao atender chamada Vibrar ao terminar chamada diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 45517f844..2e9fc86d9 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -167,7 +167,7 @@ Цвет зарядки Цвет быстрой зарядки Цвета оттенков между диапазоном - Colored battery percentage while charging + Цветной индикатор батареи при зарядке Сегодня Текущая неделя Текущий месяц @@ -293,15 +293,15 @@ Отключить эффект упругости в конце прокрутки Важно: Вы ДОЛЖНЫ включить приложения, для которых Вы хотите отключить прокрутку, в LSPosed Миллисекунды - Hours - System time - Use NTP to sync time - Time synchronization interval - NTP servers - Use semicolon to separate multiple servers - Sync now - Time synced successfully - NTP server connection error! + Часы + Системное время + Использовать NTP сервера для синхронизации времени + Интервал синхронизации времени + NTP сервера + Используйте точку с запятой для разделения нескольких серверов + Синхронизировать + Время синхронизировано + Ошибка подключения к NTP серверам! Панель регулировки громкости Тайм-аут панели громкости @@ -313,7 +313,7 @@ Разблокировано для всех приложений через Pixel Xpert: Наслаждайтесь! Информация о батарее… - Error fetching charging data + Ошибка при получении данных о зарядке Вибрация при ответе на исходящий вызов Вибрация при отключении вызова From d3edcc46fff192853ab79f96af2d063a2094facc Mon Sep 17 00:00:00 2001 From: Siavash Date: Sun, 10 Mar 2024 11:42:26 +0330 Subject: [PATCH 015/162] -- --- .../pixelxpert/modpacks/systemui/QSTileGrid.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/QSTileGrid.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/QSTileGrid.java index 8660246f3..3b2164693 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/QSTileGrid.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/QSTileGrid.java @@ -8,6 +8,7 @@ import static de.robv.android.xposed.XposedHelpers.callStaticMethod; import static de.robv.android.xposed.XposedHelpers.findClass; import static de.robv.android.xposed.XposedHelpers.findClassIfExists; +import static de.robv.android.xposed.XposedHelpers.findMethodExactIfExists; import static de.robv.android.xposed.XposedHelpers.getIntField; import static de.robv.android.xposed.XposedHelpers.getObjectField; import static de.robv.android.xposed.XposedHelpers.setObjectField; @@ -57,6 +58,8 @@ public class QSTileGrid extends XposedModPack { protected static boolean QSHapticEnabled = false; private static boolean VerticalQSTile = false; + private int updateFontSizeMethodType = 0; + public QSTileGrid(Context context) { super(context); } @@ -108,6 +111,13 @@ public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Th Class TileAdapterClass = findClass("com.android.systemui.qs.customize.TileAdapter", lpparam.classLoader); Class SideLabelTileLayoutClass = findClass("com.android.systemui.qs.SideLabelTileLayout", lpparam.classLoader); + if(findMethodExactIfExists(FontSizeUtilsClass, + "updateFontSize", + TextView.class, int.class) + != null) + { + updateFontSizeMethodType = 1; + } hookAllMethods(SideLabelTileLayoutClass, "updateResources", new XC_MethodHook() { @SuppressLint("DiscouragedApi") @Override @@ -304,14 +314,14 @@ else if (isLandscape && QSColQtyL != QS_COL_NOT_SET) private void updateFontSize(Class FontSizeUtilsClass, Object textView, int resId) { - try + if(updateFontSizeMethodType == 1) { callStaticMethod(FontSizeUtilsClass, "updateFontSize", textView, resId); } - catch (Throwable ignored) + else { callStaticMethod(FontSizeUtilsClass, "updateFontSize", From 2ff3d6585c4d4037cccb801d29a617c05727079c Mon Sep 17 00:00:00 2001 From: Siavash Date: Tue, 12 Mar 2024 10:57:48 +0330 Subject: [PATCH 016/162] -- --- .../modpacks/launcher/CustomNavGestures.java | 40 ++++++++++--------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/CustomNavGestures.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/CustomNavGestures.java index 5d95c3105..b3ac4e039 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/CustomNavGestures.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/CustomNavGestures.java @@ -223,32 +223,36 @@ && getBooleanField(param.thisObject, "mStartingInActivityBounds")) { String mTasksFieldName = null; // in case the code was obfuscated private void saveFocusedTask() { - ArrayList recentTaskList = (ArrayList) callMethod( - mSysUiProxy, - "getRecentTasks", - 1, - callMethod(Process.myUserHandle(), "getIdentifier")); + try + { + ArrayList recentTaskList = (ArrayList) callMethod( + mSysUiProxy, + "getRecentTasks", + 1, + callMethod(Process.myUserHandle(), "getIdentifier")); - if(recentTaskList.size() == 0) return; + if(recentTaskList.isEmpty()) return; - if(mTasksFieldName == null) - { - for(Field f : recentTaskList.get(0).getClass().getDeclaredFields()) + if(mTasksFieldName == null) { - if(f.getType().getName().contains("RecentTaskInfo")) + for(Field f : recentTaskList.get(0).getClass().getDeclaredFields()) { - mTasksFieldName = f.getName(); + if(f.getType().getName().contains("RecentTaskInfo")) + { + mTasksFieldName = f.getName(); + } } } - } - Optional focusedTask = recentTaskList.stream().filter(recentTask -> - (boolean) getObjectField( - ((Object[]) getObjectField(recentTask, mTasksFieldName))[0], - "isFocused" - )).findFirst(); + Optional focusedTask = recentTaskList.stream().filter(recentTask -> + (boolean) getObjectField( + ((Object[]) getObjectField(recentTask, mTasksFieldName))[0], + "isFocused" + )).findFirst(); - currentFocusedTask = focusedTask.map(o -> ((Object[]) getObjectField(o, mTasksFieldName))[0]).orElse(null); + currentFocusedTask = focusedTask.map(o -> ((Object[]) getObjectField(o, mTasksFieldName))[0]).orElse(null); + } + catch (Throwable ignored){} } private void runAction(int action) { From 39b7789079895ba9badf4c66bee4d79e6eb85d3b Mon Sep 17 00:00:00 2001 From: Siavash Date: Sun, 17 Mar 2024 10:28:25 +0330 Subject: [PATCH 017/162] RootProviderProxy: removed unnecessary root service connection --- .../siava/pixelxpert/IRootProviderProxy.aidl | 1 - .../pixelxpert/service/RootProviderProxy.java | 62 +++---------------- 2 files changed, 7 insertions(+), 56 deletions(-) diff --git a/app/src/main/aidl/sh/siava/pixelxpert/IRootProviderProxy.aidl b/app/src/main/aidl/sh/siava/pixelxpert/IRootProviderProxy.aidl index f12a2808f..d1d40e46b 100644 --- a/app/src/main/aidl/sh/siava/pixelxpert/IRootProviderProxy.aidl +++ b/app/src/main/aidl/sh/siava/pixelxpert/IRootProviderProxy.aidl @@ -9,5 +9,4 @@ interface IRootProviderProxy { * and return values in AIDL. */ String[] runCommand(String command); - IBinder getFileSystemService(); } \ No newline at end of file diff --git a/app/src/main/java/sh/siava/pixelxpert/service/RootProviderProxy.java b/app/src/main/java/sh/siava/pixelxpert/service/RootProviderProxy.java index b6abd3ace..1b175e003 100644 --- a/app/src/main/java/sh/siava/pixelxpert/service/RootProviderProxy.java +++ b/app/src/main/java/sh/siava/pixelxpert/service/RootProviderProxy.java @@ -1,12 +1,8 @@ package sh.siava.pixelxpert.service; -import static sh.siava.pixelxpert.modpacks.utils.SystemUtils.sleep; - import android.app.Service; -import android.content.ComponentName; import android.content.Context; import android.content.Intent; -import android.content.ServiceConnection; import android.os.Binder; import android.os.IBinder; import android.os.RemoteException; @@ -14,13 +10,11 @@ import androidx.annotation.Nullable; import com.topjohnwu.superuser.Shell; -import com.topjohnwu.superuser.ipc.RootService; import java.util.Arrays; import java.util.List; import sh.siava.pixelxpert.IRootProviderProxy; -import sh.siava.pixelxpert.IRootProviderService; import sh.siava.pixelxpert.R; public class RootProviderProxy extends Service { @@ -35,37 +29,14 @@ class RootPoviderProxyIPC extends IRootProviderProxy.Stub /** @noinspection unused*/ String TAG = getClass().getSimpleName(); - private final Context mContext; - private IRootProviderService mRootServiceIPC; private final List rootAllowedPacks; - - private final ServiceConnection mRootServiceConnection = new ServiceConnection() { - @Override - public void onServiceConnected(ComponentName name, IBinder service) { - mRootServiceIPC = IRootProviderService.Stub.asInterface(service); - } - - @Override - public void onServiceDisconnected(ComponentName name) { - mRootServiceIPC = null; - } - }; - + private final boolean rootGranted; private RootPoviderProxyIPC(Context context) { - mContext = context; - - rootAllowedPacks = Arrays.asList(mContext.getResources().getStringArray(R.array.root_requirement)); - - startRootService(); - } + rootGranted = Shell.getShell().isRoot(); - private void startRootService() - { - // Start RootService connection - Intent intent = new Intent(mContext, RootProvider.class); - getMainExecutor().execute(() -> RootService.bind(intent, mRootServiceConnection)); + rootAllowedPacks = Arrays.asList(context.getResources().getStringArray(R.array.root_requirement)); } /** @noinspection RedundantThrows*/ @@ -83,32 +54,13 @@ public String[] runCommand(String command) throws RemoteException { } } - @Override - public IBinder getFileSystemService() throws RemoteException { - ensureEnvironment(); - - return mRootServiceIPC.getFileSystemService(); - } - private void ensureEnvironment() throws RemoteException { - ensureSecurity(Binder.getCallingUid()); - - if(mRootServiceIPC == null) + if(!rootGranted) { - startRootService(); - - long startTime = System.currentTimeMillis(); - while(mRootServiceIPC == null && System.currentTimeMillis() < startTime + 5000) - { - sleep(50); - } - - if(mRootServiceIPC == null) - { - //This shouldn't happen at all - throw new RemoteException("Timeout: Could not connect to root service"); - } + throw new RemoteException("Root permission denied"); } + + ensureSecurity(Binder.getCallingUid()); } private void ensureSecurity(int uid) throws RemoteException { From fc6a661bc887e3bb6da90ab3e0f7f5fd38e496ca Mon Sep 17 00:00:00 2001 From: Siavash Date: Sun, 17 Mar 2024 10:34:47 +0330 Subject: [PATCH 018/162] CHANGELOG: A14a21b2 & A15: Fixed system crash when changing adjusting volume --- .../modpacks/systemui/VolumeTile.java | 57 +++++++++++++------ .../modpacks/utils/SystemUtils.java | 16 ++++-- 2 files changed, 50 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/VolumeTile.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/VolumeTile.java index fb1d7a5b3..08d339bd2 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/VolumeTile.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/VolumeTile.java @@ -8,7 +8,6 @@ import static android.service.quicksettings.Tile.STATE_ACTIVE; import static android.service.quicksettings.Tile.STATE_INACTIVE; import static android.view.View.GONE; -import static java.lang.Math.abs; import static java.lang.Math.max; import static java.lang.Math.min; import static java.lang.Math.round; @@ -86,8 +85,10 @@ public boolean listensTo(String packageName) { public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { if (!lpparam.packageName.equals(listenPackage) || AudioManager() == null) return; - minVol = AudioManager().getStreamMinVolume(STREAM_MUSIC); - maxVol = AudioManager().getStreamMaxVolume(STREAM_MUSIC); + new Thread(() -> { + minVol = AudioManager().getStreamMinVolume(STREAM_MUSIC); + maxVol = AudioManager().getStreamMaxVolume(STREAM_MUSIC); + }).start(); volumePercentageDrawable = new PercentageShape(); volumePercentageDrawable.setAlpha(64); @@ -113,7 +114,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { { Object tile = getObjectField(record, "tile"); - if (TARGET_SPEC.equals((String) getObjectField(tile, "mTileSpec"))) { + if (TARGET_SPEC.equals(getObjectField(tile, "mTileSpec"))) { View tileView = (View) getObjectField(record, "tileView"); setupTile(tile, tileView); @@ -145,7 +146,7 @@ private void setupTile(Object tile, View tileView) { } private void setVolumeChangeListener(Object tile, View tileView) { - ChangeListener listener = (ignored) -> handleVolumeChanged(tileView); + ChangeListener listener = newVal -> handleVolumeChanged(tileView, round(100f * (newVal - minVol) / (maxVol - minVol))); setAdditionalInstanceField(tile, "volumeChangeListener", listener); @@ -162,23 +163,34 @@ private void setTouchListener(View tileView) { @Override public boolean onTouch(View view, MotionEvent motionEvent) { switch (motionEvent.getAction()) { - case MotionEvent.ACTION_DOWN: { + case MotionEvent.ACTION_DOWN: + { initX = motionEvent.getX(); initPct = initX / view.getWidth(); return true; } - case MotionEvent.ACTION_MOVE: { - float newPct = motionEvent.getX() / view.getWidth(); - float deltaPct = abs(newPct - initPct); - if (deltaPct > .03f) { - view.getParent().requestDisallowInterceptTouchEvent(true); - moved = true; - currentPct = round(max(min(newPct, 1), 0) * 100f); - changeVolume(currentPct); + + case MotionEvent.ACTION_MOVE: + { + float deltaMove = Math.abs(initX - motionEvent.getX()) / view.getWidth(); + + if(deltaMove > .03) + { + int newPct = clampPctToSteps(round(max(min((motionEvent.getX() / view.getWidth()), 1), 0) * 100f)); + + if (newPct != currentPct) { + currentPct = newPct; + view.getParent().requestDisallowInterceptTouchEvent(true); + moved = true; + + changeVolume(currentPct); + } } return true; } - case MotionEvent.ACTION_UP: { + + case MotionEvent.ACTION_UP: + { if (moved) { moved = false; } else { @@ -194,6 +206,10 @@ public boolean onTouch(View view, MotionEvent motionEvent) { }); } + private int clampPctToSteps(int volPct) { + return round(round((maxVol - minVol) * volPct / 100f) * 1f / (maxVol - minVol) *100f); + } + private void updateTileView(LinearLayout tileView, int state) { try { //don't crash systemui if failed Resources res = mContext.getResources(); @@ -240,15 +256,15 @@ private void toggleMute() { } else { - changeVolume(unMuteVolumePCT); + changeVolume(clampPctToSteps(unMuteVolumePCT)); } } - private void handleVolumeChanged(View thisView) { + private void handleVolumeChanged(View thisView, int newVal) { new Thread(() -> { Object parentTile = getAdditionalInstanceField(thisView, "mParentTile"); - currentPct = getCurrentVolumePercent(); + currentPct = newVal; Object mTile = getObjectField(parentTile, "mTile"); @@ -264,6 +280,11 @@ private void handleVolumeChanged(View thisView) { }).start(); } + private void handleVolumeChanged(View thisView) { + new Thread(() -> handleVolumeChanged(thisView, getCurrentVolumePercent())).start(); + } + + private void changeVolume(int currentPct) { AudioManager().setStreamVolume( STREAM_MUSIC, diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/SystemUtils.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/SystemUtils.java index f5a349088..3a70b5bcf 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/SystemUtils.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/SystemUtils.java @@ -49,6 +49,8 @@ @SuppressWarnings("unused") public class SystemUtils { private static final int THREAD_PRIORITY_BACKGROUND = 10; + public static final String EXTRA_VOLUME_STREAM_TYPE = "android.media.EXTRA_VOLUME_STREAM_TYPE"; + public static final String EXTRA_VOLUME_STREAM_VALUE = "android.media.EXTRA_VOLUME_STREAM_VALUE"; @SuppressLint("StaticFieldLeak") static SystemUtils instance; @@ -254,9 +256,13 @@ private void registerVolumeChangeReceiver() { BroadcastReceiver volChangeReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { - for(ChangeListener listener : mVolumeChangeListeners) + if(intent.getIntExtra(EXTRA_VOLUME_STREAM_TYPE, -1) == AudioManager.STREAM_MUSIC) { - listener.onChanged(0); + int newLevel = intent.getIntExtra(EXTRA_VOLUME_STREAM_VALUE, 0); + for(ChangeListener listener : mVolumeChangeListeners) + { + listener.onChanged(newLevel); + } } } }; @@ -297,7 +303,7 @@ private void setFlashInternal(boolean enabled) { try { String flashID = getFlashID(mCameraManager); - if (flashID.equals("")) { + if (flashID.isEmpty()) { return; } if (enabled @@ -332,7 +338,7 @@ private boolean supportsFlashLevelsInternal() { try { String flashID = getFlashID(mCameraManager); - if (flashID.equals("")) { + if (flashID.isEmpty()) { return false; } if (maxFlashLevel == -1) { @@ -354,7 +360,7 @@ private void setFlashInternal(boolean enabled, float pct) { try { String flashID = getFlashID(mCameraManager); - if (flashID.equals("")) { + if (flashID.isEmpty()) { return; } if (maxFlashLevel == -1) { From 98e52b8179e01341367c1debd0c9987005ef449b Mon Sep 17 00:00:00 2001 From: Siavash Date: Sun, 17 Mar 2024 10:36:47 +0330 Subject: [PATCH 019/162] performance improvement --- .../systemui/BatteryDataProvider.java | 54 ++++++++++++++++--- .../modpacks/systemui/FeatureFlagsMods.java | 22 ++++++-- 2 files changed, 65 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BatteryDataProvider.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BatteryDataProvider.java index 106c5d680..c30ca5aad 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BatteryDataProvider.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BatteryDataProvider.java @@ -95,13 +95,20 @@ private void onBatteryStatusChanged(int status, Intent intent) { public static void registerStatusCallback(BatteryStatusCallback callback) { - instance.mStatusCallbacks.add(callback); + try + { + instance.mStatusCallbacks.add(callback); + } + catch (Throwable ignored) {} } /** @noinspection unused*/ public static void unRegisterStatusCallback(BatteryStatusCallback callback) { - instance.mStatusCallbacks.remove(callback); + try { + instance.mStatusCallbacks.remove(callback); + } + catch (Throwable ignored){} } @Override @@ -111,33 +118,64 @@ public boolean listensTo(String packageName) { public static void registerInfoCallback(BatteryInfoCallback callback) { - instance.mInfoCallbacks.add(callback); + try + { + instance.mInfoCallbacks.add(callback); + } + catch (Throwable ignored){} } /** @noinspection unused*/ public static void unRegisterInfoCallback(BatteryInfoCallback callback) { - instance.mInfoCallbacks.remove(callback); + try { + instance.mInfoCallbacks.remove(callback); + } + catch (Throwable ignored){} } public static boolean isCharging() { - return instance.mCharging; + try { + return instance.mCharging; + } + catch (Throwable ignored) + { + return false; + } } public static int getCurrentLevel() { - return instance.mCurrentLevel; + try { + return instance.mCurrentLevel; + } + catch (Throwable ignored) + { + return 0; + } } public static boolean isPowerSaving() { - return instance.mPowerSave; + try { + return instance.mPowerSave; + } + catch (Throwable ignored) + { + return false; + } } public static boolean isFastCharging() { - return instance.mCharging && instance.mIsFastCharging; + try { + return instance.mCharging && instance.mIsFastCharging; + } + catch (Throwable ignored) + { + return false; + } } private void fireBatteryInfoChanged() { diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/FeatureFlagsMods.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/FeatureFlagsMods.java index 5f18b77f8..15cea2650 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/FeatureFlagsMods.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/FeatureFlagsMods.java @@ -2,6 +2,7 @@ import static de.robv.android.xposed.XposedBridge.hookAllMethods; import static de.robv.android.xposed.XposedHelpers.findClass; +import static de.robv.android.xposed.XposedHelpers.getObjectField; import static de.robv.android.xposed.XposedHelpers.setObjectField; import static sh.siava.pixelxpert.modpacks.XPrefs.Xprefs; @@ -12,13 +13,14 @@ import sh.siava.pixelxpert.modpacks.Constants; import sh.siava.pixelxpert.modpacks.XPLauncher; import sh.siava.pixelxpert.modpacks.XposedModPack; +import sh.siava.pixelxpert.modpacks.utils.toolkit.ReflectionTools; @SuppressWarnings("RedundantThrows") public class FeatureFlagsMods extends XposedModPack { public static final String listenPackage = Constants.SYSTEM_UI_PACKAGE; - public static final String CLIPBOARD_OVERLAY_SHOW_ACTIONS = "clipboard_overlay_show_actions"; - public static final String NAMESPACE_SYSTEMUI = "systemui"; +// public static final String CLIPBOARD_OVERLAY_SHOW_ACTIONS = "clipboard_overlay_show_actions"; +// public static final String NAMESPACE_SYSTEMUI = "systemui"; private static final int SIGNAL_DEFAULT = 0; @SuppressWarnings("unused") @@ -48,7 +50,7 @@ public void updatePrefs(String... Key) { public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { if (!lpparam.packageName.equals(listenPackage)) return; - Class DeviceConfigClass = findClass("android.provider.DeviceConfig", lpparam.classLoader); +/* Class DeviceConfigClass = findClass("android.provider.DeviceConfig", lpparam.classLoader); hookAllMethods(DeviceConfigClass, "getBoolean", new XC_MethodHook() { @Override @@ -58,8 +60,22 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { param.setResult(EnableClipboardSmartActions); } } + });*/ + //replaced with this: + Class ClipboardOverlayControllerClass = findClass("com.android.systemui.clipboardoverlay.ClipboardOverlayController", lpparam.classLoader); + ReflectionTools.hookAllMethodsMatchPattern(ClipboardOverlayControllerClass, "setExpandedView.*", new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + if(EnableClipboardSmartActions) { + setObjectField( + getObjectField(param.thisObject, "mClipboardModel"), + "isRemote", + true); + } + } }); + hookAllMethods( findClass("com.android.settingslib.mobile.MobileMappings$Config", lpparam.classLoader), "readConfig", new XC_MethodHook() { From 4dabcf997d4f93fa3223524ddc883fb66fa4e2ae Mon Sep 17 00:00:00 2001 From: Siavash Date: Sun, 17 Mar 2024 10:37:11 +0330 Subject: [PATCH 020/162] performance improvement --- .github/edit2MakeNewCanary | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/edit2MakeNewCanary b/.github/edit2MakeNewCanary index 04ad0604c..65aeddb0b 100644 --- a/.github/edit2MakeNewCanary +++ b/.github/edit2MakeNewCanary @@ -1 +1 @@ -Editing this file will trigger the build script for a new canary.. \ No newline at end of file +Editing this file will trigger the build script for a new canary. \ No newline at end of file From 39215d829b6f3ddeae58e14e19d21ac026f24833 Mon Sep 17 00:00:00 2001 From: GitHub Date: Sun, 17 Mar 2024 07:10:42 +0000 Subject: [PATCH 021/162] Version update: Release --- CanaryChangelog.md | 3 +++ MagiskModBase/module.prop | 4 ++-- MagiskModuleUpdate_Full.json | 4 ++-- MagiskModuleUpdate_Xposed.json | 4 ++-- app/build.gradle | 4 ++-- latestCanary.json | 4 ++-- 6 files changed, 13 insertions(+), 10 deletions(-) diff --git a/CanaryChangelog.md b/CanaryChangelog.md index 3e458c734..7d5655fd8 100644 --- a/CanaryChangelog.md +++ b/CanaryChangelog.md @@ -1,3 +1,6 @@ +**canary-340** +- A14a21b2 & A15: Fixed system crash when changing adjusting volume + **canary-339** - A14ap21b2: Fixed QS Tile label sizes - A14ap21b2: Fixed NotificationExpander diff --git a/MagiskModBase/module.prop b/MagiskModBase/module.prop index b889cba7b..e390e2ebe 100644 --- a/MagiskModBase/module.prop +++ b/MagiskModBase/module.prop @@ -1,7 +1,7 @@ id=PixelXpert name=Pixel Xpert -version=canary-339 -versionCode=339 +version=canary-340 +versionCode=340 author=Pixel Xpert Team description=Xposed based module for customizations on Pixel roms. Android 13+ updateJson=https://raw.githubusercontent.com/siavash79/PixelXpert/canary/MagiskModuleUpdate_Xposed.json diff --git a/MagiskModuleUpdate_Full.json b/MagiskModuleUpdate_Full.json index 8bc414ee7..13df802cf 100644 --- a/MagiskModuleUpdate_Full.json +++ b/MagiskModuleUpdate_Full.json @@ -1,6 +1,6 @@ { - "version": "canary-339", - "versionCode": 339, + "version": "canary-340", + "versionCode": 340, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/MagiskModuleUpdate_Xposed.json b/MagiskModuleUpdate_Xposed.json index 8bc414ee7..13df802cf 100644 --- a/MagiskModuleUpdate_Xposed.json +++ b/MagiskModuleUpdate_Xposed.json @@ -1,6 +1,6 @@ { - "version": "canary-339", - "versionCode": 339, + "version": "canary-340", + "versionCode": 340, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 55081b85e..a9adfc4de 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "sh.siava.pixelxpert" minSdk 33 targetSdk 34 - versionCode 339 - versionName "canary-339" + versionCode 340 + versionName "canary-340" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/latestCanary.json b/latestCanary.json index bd9e4bad1..805cc6461 100644 --- a/latestCanary.json +++ b/latestCanary.json @@ -1,6 +1,6 @@ { - "version": "canary-339", - "versionCode": 339, + "version": "canary-340", + "versionCode": 340, "zipUrl_Xposed": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "zipUrl_Full": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" From 658a43879532ff6173084b6152f7fe8a698cb2fd Mon Sep 17 00:00:00 2001 From: Siavash Date: Sun, 17 Mar 2024 10:50:35 +0330 Subject: [PATCH 022/162] Update CanaryChangelog.md --- CanaryChangelog.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CanaryChangelog.md b/CanaryChangelog.md index 7d5655fd8..a08f9430a 100644 --- a/CanaryChangelog.md +++ b/CanaryChangelog.md @@ -1,5 +1,5 @@ **canary-340** -- A14a21b2 & A15: Fixed system crash when changing adjusting volume +- A14a21b2 & A15: Fixed system crash when adjusting volume **canary-339** - A14ap21b2: Fixed QS Tile label sizes From 7cec2cf93c669ed86a82d547a5ffbf2f23fd02f5 Mon Sep 17 00:00:00 2001 From: Siavash Date: Fri, 22 Mar 2024 00:21:40 +0330 Subject: [PATCH 023/162] CHANGELOG: Refined leveled flashlight tile --- .../modpacks/systemui/FlashLightLevel.java | 21 +++--- .../modpacks/utils/SystemUtils.java | 68 +++++++++++++------ 2 files changed, 59 insertions(+), 30 deletions(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/FlashLightLevel.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/FlashLightLevel.java index c9dfc2dc4..d021b16b9 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/FlashLightLevel.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/FlashLightLevel.java @@ -7,6 +7,7 @@ import static de.robv.android.xposed.XposedHelpers.getObjectField; import static de.robv.android.xposed.XposedHelpers.setAdditionalInstanceField; import static sh.siava.pixelxpert.modpacks.XPrefs.Xprefs; +import static sh.siava.pixelxpert.modpacks.utils.SystemUtils.getFlashlightLevel; import android.annotation.SuppressLint; import android.content.Context; @@ -73,7 +74,7 @@ public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Th @SuppressLint("DiscouragedApi") @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - if (!SystemUtils.supportsFlashLevels() || !leveledFlashTile) return; + if (!leveledFlashTile || !SystemUtils.supportsFlashLevels()) return; try { Object state = param.args[0]; @@ -123,13 +124,15 @@ public boolean onTouch(View view, MotionEvent motionEvent) { return true; } case MotionEvent.ACTION_MOVE: { - float newPct = motionEvent.getX() / view.getWidth(); - float deltaPct = Math.abs(newPct - initPct); - if (deltaPct > .03f) { + float deltaMove = Math.abs(initX - motionEvent.getX()) / view.getWidth(); + + if (deltaMove > .03f) { + int newLevel = getFlashlightLevel(motionEvent.getX() / view.getWidth()); + view.getParent().requestDisallowInterceptTouchEvent(true); moved = true; - currentPct = Math.max(0.01f, Math.min(newPct, 1)); - handleFlashLightClick(false, currentPct); + currentPct = newLevel * 1f / SystemUtils.getMaxFlashLevel(); + handleFlashLightClick(false, newLevel); SystemUtils.setFlashlightLevel(Math.round(currentPct * 100f)); } return true; @@ -139,7 +142,7 @@ public boolean onTouch(View view, MotionEvent motionEvent) { moved = false; Xprefs.edit().putFloat("flashPCT", currentPct).apply(); } else { - handleFlashLightClick(true, currentPct); + handleFlashLightClick(true, getFlashlightLevel(currentPct)); if (QSTileGrid.QSHapticEnabled) SystemUtils.vibrate(VibrationEffect.EFFECT_CLICK, VibrationAttributes.USAGE_TOUCH); } @@ -188,8 +191,8 @@ protected void afterHookedMethod(MethodHookParam param) { }); } - private void handleFlashLightClick(boolean toggle, float pct) { - SystemUtils.setFlash(toggle ^ SystemUtils.isFlashOn(), pct); + private void handleFlashLightClick(boolean toggle, int level) { + SystemUtils.setFlash(toggle ^ SystemUtils.isFlashOn(), level); } private class PercentageShape extends Drawable { diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/SystemUtils.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/SystemUtils.java index 3a70b5bcf..eff601c12 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/SystemUtils.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/SystemUtils.java @@ -2,6 +2,7 @@ import static android.content.Context.RECEIVER_EXPORTED; import static android.content.res.Configuration.UI_MODE_NIGHT_YES; +import static java.lang.Math.round; import static de.robv.android.xposed.XposedBridge.log; import static de.robv.android.xposed.XposedHelpers.callMethod; import static de.robv.android.xposed.XposedHelpers.getStaticObjectField; @@ -102,9 +103,9 @@ public static void toggleFlash() { instance.toggleFlashInternal(); } - public static void setFlash(boolean enabled, float pct) { + public static void setFlash(boolean enabled, int level) { if (instance != null) - instance.setFlashInternal(enabled, pct); + instance.setFlashInternal(enabled, level); } public static void setFlash(boolean enabled) { @@ -311,7 +312,7 @@ private void setFlashInternal(boolean enabled) { && Xprefs.getBoolean("isFlashLevelGlobal", false) && supportsFlashLevelsInternal()) { float currentPct = Xprefs.getFloat("flashPCT", 0.5f); - setFlashInternal(true, currentPct); + setFlashInternal(true, getFlashlightLevelInternal(currentPct)); return; } @@ -324,6 +325,22 @@ && supportsFlashLevelsInternal()) { } } + public static int getFlashlightLevel(float flashPct) + { + if(instance == null) return 1; + return instance.getFlashlightLevelInternal(flashPct); + } + + private int getFlashlightLevelInternal(float flashPct) { + return + Math.max( + Math.min( + round(SystemUtils.getMaxFlashLevel() * flashPct), + SystemUtils.getMaxFlashLevel()) + , 1); + } + + @SuppressWarnings("BooleanMethodIsAlwaysInverted") public static boolean supportsFlashLevels() { return instance != null @@ -331,28 +348,45 @@ public static boolean supportsFlashLevels() { } private boolean supportsFlashLevelsInternal() { - if(getCameraManager() == null) + if(maxFlashLevel == -1) { - return false; + refreshFlashLevel(); } + return maxFlashLevel > 0; + } + private void refreshFlashLevel() + { try { - String flashID = getFlashID(mCameraManager); + String flashID = getFlashID(getCameraManager()); if (flashID.isEmpty()) { - return false; + maxFlashLevel = -1; + return; } if (maxFlashLevel == -1) { @SuppressWarnings("unchecked") CameraCharacteristics.Key FLASH_INFO_STRENGTH_MAXIMUM_LEVEL = (CameraCharacteristics.Key) getStaticObjectField(CameraCharacteristics.class, "FLASH_INFO_STRENGTH_MAXIMUM_LEVEL"); maxFlashLevel = mCameraManager.getCameraCharacteristics(flashID).get(FLASH_INFO_STRENGTH_MAXIMUM_LEVEL); } - return maxFlashLevel > 1; - } catch (Throwable ignored) { - return false; + } catch (Throwable ignored) {} + } + + public static int getMaxFlashLevel() + { + return instance == null + ? -1 + : instance.getMaxFlashLevelInternal(); + } + + private int getMaxFlashLevelInternal() { + if(maxFlashLevel == -1) + { + refreshFlashLevel(); } + return maxFlashLevel; } - private void setFlashInternal(boolean enabled, float pct) { + private void setFlashInternal(boolean enabled, int level) { if(getCameraManager() == null) { return; @@ -360,18 +394,10 @@ private void setFlashInternal(boolean enabled, float pct) { try { String flashID = getFlashID(mCameraManager); - if (flashID.isEmpty()) { - return; - } - if (maxFlashLevel == -1) { - @SuppressWarnings("unchecked") - CameraCharacteristics.Key FLASH_INFO_STRENGTH_MAXIMUM_LEVEL = (CameraCharacteristics.Key) getStaticObjectField(CameraCharacteristics.class, "FLASH_INFO_STRENGTH_MAXIMUM_LEVEL"); - maxFlashLevel = mCameraManager.getCameraCharacteristics(flashID).get(FLASH_INFO_STRENGTH_MAXIMUM_LEVEL); - } if (enabled) { - if (maxFlashLevel > 1) //good news. we can set levels + if (supportsFlashLevels()) //good news. we can set levels { - callMethod(mCameraManager, "turnOnTorchWithStrengthLevel", flashID, Math.max(Math.round(pct * maxFlashLevel), 1)); + callMethod(mCameraManager, "turnOnTorchWithStrengthLevel", flashID, Math.max(level, 1)); } else //flash doesn't support levels: go normal { setFlashInternal(true); From d3be9f9f6dd5fa79a72de06f96b5c5890cbc93c8 Mon Sep 17 00:00:00 2001 From: Siavash Date: Fri, 22 Mar 2024 00:46:53 +0330 Subject: [PATCH 024/162] CHANGELOG: Network monitor: added bit/s to options --- .../modpacks/systemui/StatusbarMods.java | 9 +-- .../modpacks/utils/NetworkTraffic.java | 6 +- .../modpacks/utils/StringFormatter.java | 2 +- .../modpacks/utils/toolkit/ObjectTools.java | 55 ++++++++++--------- app/src/main/res/values/strings.xml | 1 + app/src/main/res/xml/sbqs_network_prefs.xml | 8 +++ 6 files changed, 49 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/StatusbarMods.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/StatusbarMods.java index 066f2b603..0306a8f5b 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/StatusbarMods.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/StatusbarMods.java @@ -332,6 +332,7 @@ public void updatePrefs(String... Key) { int networkTrafficInterval = Xprefs.getSliderInt( "networkTrafficInterval", 1); boolean networkTrafficColorful = Xprefs.getBoolean("networkTrafficColorful", false); boolean networkTrafficShowIcons = Xprefs.getBoolean("networkTrafficShowIcons", true); + boolean networkTrafficShowInBits = Xprefs.getBoolean("networkTrafficShowInBits", false); if (networkOnSBEnabled || networkOnQSEnabled) { networkTrafficPosition = Integer.parseInt(Xprefs.getString("networkTrafficPosition", String.valueOf(POSITION_RIGHT))); @@ -349,7 +350,7 @@ public void updatePrefs(String... Key) { } catch (Exception ignored) { networkTrafficThreshold = 10; } - NetworkTraffic.setConstants(networkTrafficInterval, networkTrafficThreshold, networkTrafficMode, networkTrafficRXTop, networkTrafficColorful, networkTrafficDLColor, networkTrafficULColor, networkTrafficOpacity, networkTrafficShowIcons); + NetworkTraffic.setConstants(networkTrafficInterval, networkTrafficThreshold, networkTrafficMode, networkTrafficRXTop, networkTrafficColorful, networkTrafficDLColor, networkTrafficULColor, networkTrafficOpacity, networkTrafficShowIcons, networkTrafficShowInBits); } if (networkOnSBEnabled) { @@ -402,7 +403,7 @@ public void updatePrefs(String... Key) { } - if ((mStringFormatBefore + mStringFormatAfter).trim().length() == 0) { + if ((mStringFormatBefore + mStringFormatAfter).trim().isEmpty()) { int SBCDayOfWeekMode = Integer.parseInt(Xprefs.getString("SBCDayOfWeekMode", "0")); switch (SBCDayOfWeekMode) { @@ -1374,7 +1375,7 @@ private void placeClock() { private final StringFormatter stringFormatter = new StringFormatter(); private CharSequence getFormattedString(String dateFormat, boolean small, @Nullable @ColorInt Integer textColor) { - if (dateFormat.length() == 0) return ""; + if (dateFormat.isEmpty()) return ""; //There's some format to work on SpannableStringBuilder formatted = new SpannableStringBuilder(stringFormatter.formatString(dateFormat)); @@ -1418,7 +1419,7 @@ private void wifiVisibleChanged() , ICON_HIDE_LIST); if (CombineSignalIcons && mWifiVisible) { - if (hideListString == null || hideListString.length() == 0) { + if (hideListString == null || hideListString.isEmpty()) { hideListString = "mobile"; } else if (!hideListString.contains("mobile")) { hideListString = hideListString + ",mobile"; diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/NetworkTraffic.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/NetworkTraffic.java index ce6d8d373..e9ac2cafa 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/NetworkTraffic.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/NetworkTraffic.java @@ -66,11 +66,12 @@ public class NetworkTraffic extends FrameLayout { private static boolean colorTraffic = false; private static int opacity = 100; private static long lastParamUpdate = 0; + private static boolean showInBits = false; private final boolean isSBInstance; private long lastInstanceParamUpdate = -1; - public static void setConstants(int refreshInterval, int autoHideThreshold, int indicatorMode, boolean RXonTop, boolean colorTraffic, int downloadColor, int uploadColor, int opacity, boolean showIcons) { + public static void setConstants(int refreshInterval, int autoHideThreshold, int indicatorMode, boolean RXonTop, boolean colorTraffic, int downloadColor, int uploadColor, int opacity, boolean showIcons, boolean showInBits) { NetworkTraffic.refreshInterval = refreshInterval; NetworkTraffic.autoHideThreshold = autoHideThreshold * KB; NetworkTraffic.indicatorMode = indicatorMode; @@ -80,6 +81,7 @@ public static void setConstants(int refreshInterval, int autoHideThreshold, int NetworkTraffic.uploadColor = uploadColor; NetworkTraffic.opacity = opacity; NetworkTraffic.showIcons = showIcons; + NetworkTraffic.showInBits = showInBits; lastParamUpdate = SystemClock.elapsedRealtime(); } @@ -163,7 +165,7 @@ public void handleMessage(Message msg) { private SpannableStringBuilder formatOutput(long timeDelta, long data, @Nullable @ColorInt Integer textColor) { long speed = (long) (data / (timeDelta / 1000F)); - return ObjectTools.getHumanizedBytes(speed, .7f, (indicatorMode == MODE_SHOW_RXTX) ? " " : "\n", symbol, textColor); + return ObjectTools.getHumanizedBytes(speed, showInBits, .7f, (indicatorMode == MODE_SHOW_RXTX) ? " " : "\n", symbol, textColor); } private boolean shouldHide(long rxData, long txData, long timeDelta) { diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/StringFormatter.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/StringFormatter.java index 80383214f..93340468f 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/StringFormatter.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/StringFormatter.java @@ -223,7 +223,7 @@ private CharSequence networkStatOf(String variable) { } if (transformed == null) { - transformed = ObjectTools.getHumanizedBytes(traffic, .6f, "", "", textColor); + transformed = ObjectTools.getHumanizedBytes(traffic, false, .6f, "", "", textColor); } return transformed; } catch (Exception ignored) { diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/toolkit/ObjectTools.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/toolkit/ObjectTools.java index c298f5710..ce5c92ed6 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/toolkit/ObjectTools.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/toolkit/ObjectTools.java @@ -19,9 +19,9 @@ /** @noinspection unused, RedundantThrows */ @SuppressWarnings("CommentedOutCode") public class ObjectTools { - private static final int KB = 1024; - private static final int MB = 1024 * KB; - private static final int GB = 1024 * MB; + private static final int KILO = 1024; + private static final int MEGA = 1024 * KILO; + private static final int GIGA = 1024 * MEGA; public static int tryParseInt(String string, int fallbackResult) { @@ -38,40 +38,45 @@ static Stream concatArrays(T[] array1, T[] array2) { } - public static SpannableStringBuilder getHumanizedBytes(long bytes, float unitSizeFactor, String unitSeparator, String indicatorSymbol, @Nullable @ColorInt Integer textColor) { + public static SpannableStringBuilder getHumanizedBytes(long bytes, boolean showInBits, float unitSizeFactor, String unitSeparator, String indicatorSymbol, @Nullable @ColorInt Integer textColor) { + if(showInBits) + { + bytes *= 8; + } + DecimalFormat decimalFormat; CharSequence formattedData; SpannableString spanSizeString; SpannableString spanUnitString; String unit; - if (bytes >= GB) { - unit = "GB"; + if (bytes >= GIGA) { + unit = showInBits ? "Gb" : "GB"; decimalFormat = new DecimalFormat("0.00"); - formattedData = decimalFormat.format(bytes / (float) GB); - } else if (bytes >= 100 * MB) { + formattedData = decimalFormat.format(bytes / (float) GIGA); + } else if (bytes >= 100 * MEGA) { decimalFormat = new DecimalFormat("000"); - unit = "MB"; - formattedData = decimalFormat.format(bytes / (float) MB); - } else if (bytes >= 10 * MB) { + unit = showInBits ? "Mb" : "MB"; + formattedData = decimalFormat.format(bytes / (float) MEGA); + } else if (bytes >= 10 * MEGA) { decimalFormat = new DecimalFormat("00.0"); - unit = "MB"; - formattedData = decimalFormat.format(bytes / (float) MB); - } else if (bytes >= MB) { + unit = showInBits ? "Mb" : "MB"; + formattedData = decimalFormat.format(bytes / (float) MEGA); + } else if (bytes >= MEGA) { decimalFormat = new DecimalFormat("0.00"); - unit = "MB"; - formattedData = decimalFormat.format(bytes / (float) MB); - } else if (bytes >= 100 * KB) { + unit = showInBits ? "Mb" : "MB"; + formattedData = decimalFormat.format(bytes / (float) MEGA); + } else if (bytes >= 100 * KILO) { decimalFormat = new DecimalFormat("000"); - unit = "KB"; - formattedData = decimalFormat.format(bytes / (float) KB); - } else if (bytes >= 10 * KB) { + unit = showInBits ? "Kb" : "KB"; + formattedData = decimalFormat.format(bytes / (float) KILO); + } else if (bytes >= 10 * KILO) { decimalFormat = new DecimalFormat("00.0"); - unit = "KB"; - formattedData = decimalFormat.format(bytes / (float) KB); + unit = showInBits ? "Kb" : "KB"; + formattedData = decimalFormat.format(bytes / (float) KILO); } else { decimalFormat = new DecimalFormat("0.00"); - unit = "KB"; - formattedData = decimalFormat.format(bytes / (float) KB); + unit = showInBits ? "Kb" : "KB"; + formattedData = decimalFormat.format(bytes / (float) KILO); } spanSizeString = new SpannableString(formattedData); @@ -101,7 +106,7 @@ public static String addItemToCommaStringIfNotPresent(String string, String key) { if(Pattern.matches(getCommaSearchPattern(key), string)) return string; - return String.format("%s%s%s", key, (string.length() > 0) ? "," : "", string); + return String.format("%s%s%s", key, !string.isEmpty() ? "," : "", string); } private static String getCommaSearchPattern(String tile) { return String.format("^(%s,)(.+)|(.+)(,%s)(,.+|$)", tile, tile); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index dac031caf..7fe08d9d4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -150,6 +150,7 @@ Download + Upload (Combined) Download only Upload only + Show in bits/s Status Bar Options Enable dual tone battery meter On (only works with portrait icon) diff --git a/app/src/main/res/xml/sbqs_network_prefs.xml b/app/src/main/res/xml/sbqs_network_prefs.xml index d5da9f501..c70f99478 100644 --- a/app/src/main/res/xml/sbqs_network_prefs.xml +++ b/app/src/main/res/xml/sbqs_network_prefs.xml @@ -27,6 +27,14 @@ android:title="@string/network_show_icons_title" app:iconSpaceReserved="false" /> + + Date: Fri, 22 Mar 2024 00:48:08 +0330 Subject: [PATCH 025/162] CHANGELOG: Happy Nowruz! --- .github/edit2MakeNewCanary | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/edit2MakeNewCanary b/.github/edit2MakeNewCanary index 65aeddb0b..04ad0604c 100644 --- a/.github/edit2MakeNewCanary +++ b/.github/edit2MakeNewCanary @@ -1 +1 @@ -Editing this file will trigger the build script for a new canary. \ No newline at end of file +Editing this file will trigger the build script for a new canary.. \ No newline at end of file From 919bc77c65972604cd5542ac8ab83312360afebc Mon Sep 17 00:00:00 2001 From: GitHub Date: Thu, 21 Mar 2024 21:20:52 +0000 Subject: [PATCH 026/162] Version update: Release --- CanaryChangelog.md | 5 +++++ MagiskModBase/module.prop | 4 ++-- MagiskModuleUpdate_Full.json | 4 ++-- MagiskModuleUpdate_Xposed.json | 4 ++-- app/build.gradle | 4 ++-- latestCanary.json | 4 ++-- 6 files changed, 15 insertions(+), 10 deletions(-) diff --git a/CanaryChangelog.md b/CanaryChangelog.md index a08f9430a..504b28a2e 100644 --- a/CanaryChangelog.md +++ b/CanaryChangelog.md @@ -1,3 +1,8 @@ +**canary-341** +- Happy Nowruz! +- Network monitor: added bit/s to options +- Refined leveled flashlight tile + **canary-340** - A14a21b2 & A15: Fixed system crash when adjusting volume diff --git a/MagiskModBase/module.prop b/MagiskModBase/module.prop index e390e2ebe..8d1cfeeb4 100644 --- a/MagiskModBase/module.prop +++ b/MagiskModBase/module.prop @@ -1,7 +1,7 @@ id=PixelXpert name=Pixel Xpert -version=canary-340 -versionCode=340 +version=canary-341 +versionCode=341 author=Pixel Xpert Team description=Xposed based module for customizations on Pixel roms. Android 13+ updateJson=https://raw.githubusercontent.com/siavash79/PixelXpert/canary/MagiskModuleUpdate_Xposed.json diff --git a/MagiskModuleUpdate_Full.json b/MagiskModuleUpdate_Full.json index 13df802cf..aaa6cde4f 100644 --- a/MagiskModuleUpdate_Full.json +++ b/MagiskModuleUpdate_Full.json @@ -1,6 +1,6 @@ { - "version": "canary-340", - "versionCode": 340, + "version": "canary-341", + "versionCode": 341, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/MagiskModuleUpdate_Xposed.json b/MagiskModuleUpdate_Xposed.json index 13df802cf..aaa6cde4f 100644 --- a/MagiskModuleUpdate_Xposed.json +++ b/MagiskModuleUpdate_Xposed.json @@ -1,6 +1,6 @@ { - "version": "canary-340", - "versionCode": 340, + "version": "canary-341", + "versionCode": 341, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index a9adfc4de..f8f59eb50 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "sh.siava.pixelxpert" minSdk 33 targetSdk 34 - versionCode 340 - versionName "canary-340" + versionCode 341 + versionName "canary-341" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/latestCanary.json b/latestCanary.json index 805cc6461..172f77c7c 100644 --- a/latestCanary.json +++ b/latestCanary.json @@ -1,6 +1,6 @@ { - "version": "canary-340", - "versionCode": 340, + "version": "canary-341", + "versionCode": 341, "zipUrl_Xposed": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "zipUrl_Full": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" From 3aa28553dff66e1552ceb788af05d778c95cc222 Mon Sep 17 00:00:00 2001 From: Crowdin Bot Date: Sun, 24 Mar 2024 00:47:45 +0000 Subject: [PATCH 027/162] New Crowdin translations by GitHub Action --- app/src/main/res/values-af-rZA/strings.xml | 1 + app/src/main/res/values-ar-rSA/strings.xml | 37 ++++++------ app/src/main/res/values-cs-rCZ/strings.xml | 1 + app/src/main/res/values-da-rDK/strings.xml | 1 + app/src/main/res/values-de-rDE/strings.xml | 1 + app/src/main/res/values-el-rGR/strings.xml | 1 + app/src/main/res/values-es-rES/strings.xml | 1 + app/src/main/res/values-fa-rIR/strings.xml | 1 + app/src/main/res/values-fi-rFI/strings.xml | 1 + app/src/main/res/values-fr-rFR/strings.xml | 1 + app/src/main/res/values-hi-rIN/strings.xml | 1 + app/src/main/res/values-hu-rHU/strings.xml | 67 +++++++++++----------- app/src/main/res/values-it-rIT/strings.xml | 1 + app/src/main/res/values-iw-rIL/strings.xml | 1 + app/src/main/res/values-ja-rJP/strings.xml | 1 + app/src/main/res/values-ko-rKR/strings.xml | 1 + app/src/main/res/values-nl-rNL/strings.xml | 1 + app/src/main/res/values-no-rNO/strings.xml | 1 + app/src/main/res/values-pl-rPL/strings.xml | 1 + app/src/main/res/values-pt-rPT/strings.xml | 1 + app/src/main/res/values-ro-rRO/strings.xml | 1 + app/src/main/res/values-ru-rRU/strings.xml | 1 + app/src/main/res/values-sr-rSP/strings.xml | 1 + app/src/main/res/values-sv-rSE/strings.xml | 1 + app/src/main/res/values-tr-rTR/strings.xml | 1 + app/src/main/res/values-uk-rUA/strings.xml | 1 + app/src/main/res/values-vi-rVN/strings.xml | 1 + app/src/main/res/values-zh-rCN/strings.xml | 1 + app/src/main/res/values-zh-rTW/strings.xml | 1 + 29 files changed, 80 insertions(+), 51 deletions(-) diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml index 0ce9b373d..34325a64e 100644 --- a/app/src/main/res/values-af-rZA/strings.xml +++ b/app/src/main/res/values-af-rZA/strings.xml @@ -142,6 +142,7 @@ Aflaai + Laai op (Gekombineerd) Slegs aflaai Slegs oplaai + Show in bits/s Statusbalkopsies Aktiveer dubbeltoonbatterymeter Aan (werk net met portretikoon) diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index c4b1ce09c..d4baac9ec 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -142,6 +142,7 @@ تحميل + تحميل (مجمع) تنزيل فقط تحميل فقط + Show in bits/s خيارات شريط الحالة تمكين مقياس بطارية النغمة المزدوجة تشغيل (يعمل فقط مع أيقونة عمودية) @@ -167,7 +168,7 @@ لون الشحن لون الشحن السريع ألوان التظليل بين هذا النطاق - Colored battery percentage while charging + نسبة بطارية ملونة أثناء الشحن اليوم الأسبوع الحالي الشهر الحالي @@ -289,22 +290,22 @@ مدة الإشعار بالرؤوس توسيع الإشعارات تلقائياً توسيع تلقائي - Always collapse + الإنهيار دائمًا تعطيل تأثير التمرير المرن هام: يمكنك تمكين التطبيقات التي تريد تعطيل التمرير الزائد داخل LSPosed المللي ثانية - Hours - System time - Use NTP to sync time - Time synchronization interval - NTP servers - Use semicolon to separate multiple servers - Sync now - Time synced successfully - NTP server connection error! + ساعات + وقت النظام + استخدم NTP لمزامنة الوقت + المدة الزمنية للمزامنة + خوادم NTP + استخدام المنصة لفصل عدة خوادم + المزامنة الآن + تمت مزامنة الوقت بنجاح + خطأ في اتصال سيرفر NTP! - Volume panel - Volume dialog timeout + لوحة مستوى الصوت + مهلة لوحة مستوى الصوت الملف الشخصي للعمل/غير الشخصي اضغط مطولاً على شريط الحالة لتبديل الملف الشخصي @@ -312,8 +313,8 @@ مفتوح لجميع التطبيقات عبر Pixel Xpert: استمتع! - Battery info… - Error fetching charging data + معلومات البطارية… + خطأ في جلب بيانات الشحن إهتزاز عند الرد على المكالمة الصادرة اهتزاز عند قطع اتصال المكالمة @@ -441,9 +442,9 @@ تم تفعيل الحزمة بنجاح فشل تنشيط الحزمة تنشيط في LSPosed - Package is not launch-able - Launch app - Restart app + الحزمة غير قابلة للتشغيل + تشغيل التطبيق + إعادة تشغيل التطبيق التحقق من أذونات الجذر… جارٍ الاتصال بالخدمة الجذر… diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index 38966da4e..43810d050 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -142,6 +142,7 @@ Stáhnout + nahrát (kombinované) Pouze stáhnout Pouze nahrát + Show in bits/s Možnosti stavového řádku Povolit dvoutónový měřič baterie Zapnuto (funguje pouze s ikonou na výšku) diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml index b112366af..6bb7bfbc5 100644 --- a/app/src/main/res/values-da-rDK/strings.xml +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -142,6 +142,7 @@ Download + Upload (kombineret) Kun download Kun upload + Show in bits/s Statuslinjeindstillinger Aktiver dual tone batterimåler Til (virker kun med portrætikon) diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index afa1f52dc..346e12b3f 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -142,6 +142,7 @@ Herunterladen + Hochladen (kombiniert) Nur herunterladen Nur hochladen + Show in bits/s Statusleisten Optionen Aktivieren die Zweiton-Akkuanzeige Ein (Funktioniert nur mit dem Portrait Symbol) diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index 773dbb258..966b3ab58 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -142,6 +142,7 @@ Λήψη + Μεταφόρτωση (Συνδυασμένη) Λήψη μόνο Μεταφόρτωση μόνο + Show in bits/s Επιλογές γραμμής κατάστασης Ενεργοποίηση μετρητή μπαταρίας διπλού τόνου Ενεργό (λειτουργεί μόνο με κατακόρυφο εικονίδιο) diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 9861cfd7a..46c5ad9c4 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -142,6 +142,7 @@ Descarga + subida (Combinado) Solo descarga Solo subida + Mostrar en bits/s Preferencias de barra de estado Activar icono de tono dual Activado (solo en modo horizontal) diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml index 01ac09a8c..19cc5661d 100644 --- a/app/src/main/res/values-fa-rIR/strings.xml +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -142,6 +142,7 @@ دانلود+‌ آپلود (ترکیبی) فقط دانلود فقط آپلود + Show in bits/s تنظیمات نوار وضعیت باتری دو رنگ روشن (فقط با نماد عمودی کار می کند) diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index 5dc40952a..df7f6f847 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -142,6 +142,7 @@ Lataa + lähetä (yhdistetty) Lataa vain Lataa vain + Show in bits/s Tilapalkin asetukset Ota kaksiääninen akkumittari käyttöön Päällä (toimii vain pystykuvakkeen kanssa) diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index 745c83274..bf4f5b33a 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -142,6 +142,7 @@ Téléchargement + upload (combiné) Téléchargement seulement Upload seulement + Afficher en bits/s Préférence de la barre d’état Activer le compteur de batterie à double couleur Activé (marche seulement pour le mode portrait) diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index 0394bfeb9..aab2e22ce 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -142,6 +142,7 @@ डाउनलोड + अपलोड (संयुक्त) केवल डाउनलोड करें केवल अपलोड करें + Show in bits/s स्थिति पट्टी विकल्प डुअल टोन बैटरी इंडिकेटर सक्षम करें ऑन (केवल पोर्ट्रेट आइकन के साथ काम करता है) diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index 58d9f7107..d37cb4622 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -2,7 +2,7 @@ Alternatív témájú ikon - Customizations for Google Pixel devices + Testreszabás Google Pixel eszközökhöz Média kötet Alkalmazás profil váltás Elrejtés (alapértelmezett) @@ -34,8 +34,8 @@ Telegram csoport Használat Nyissa meg a wiki oldalt - Translate to your language - Help us in translating %s into your own language + Fordítsd le a saját nyelvedre + Segíts lefordítani a %s a saját nyelvedre Lezárási képernyő Állapotsor @@ -81,7 +81,7 @@ Egyszerű feloldás (Pin/jelszó) Ha az első alkalommal nem sikerült, próbálja újra Töltési információk a lezárási képernyőn - Don\'t show \"Customize Lock Screen\" pill + Ne mutassa a \"Zár képernyő testreszabása\" gombot Használjon angolszász mértékegységet Dupla érintésre alvó mód @@ -142,6 +142,7 @@ Letöltés + Feltöltés (kombinált) Csak letöltés Csak feltöltés + Mutassa bits/s-ben Az állapotsor beállításai A kéttónusú akkumulátormérő engedélyezése Be (csak az álló ikonnal működik) @@ -167,7 +168,7 @@ Töltő szín Gyors töltés szín Árnyékolja a színeket e tartomány között - Colored battery percentage while charging + Színes akkumulátor ikon töltés során Ma Jelenlegi hét Jelenlegi hónap @@ -195,13 +196,13 @@ Gyors QS panel legördülő az állapotsorról Gyorsan lehúzható oldal Gyors beállítások legördülő menü - Close quick settings with one swipe + A gyors beállítások bezárása egy húzással Rezgés a QS csempecsapon A rendszer érintési rezgésbeállításai által meghatározott intenzitás Álló tájolásban Fekvő tájolásban - Miscellaneous - Show charging info on QS panel + Egyebek + Töltési információk kijelzése a gyors beállítások panelen QS-sorok száma QS oszlopok száma Maximális csempék a Quick QS-ben (max. 2 sor) @@ -257,11 +258,11 @@ Figyelmen kívül hagyja a kézi forgató lebegő gombot is Hagyja figyelmen kívül a kamera kivágását Adjon hozzá egy hozzáférhető, minden törlése gombot a legutóbbi oldalhoz - Auto-generate missing themed icons (Pixel launcher only) + Automatikusan hozza létre a hiányzó témázott ikonokat (csak Pixel Launcher-re működik) Az alkalmazáshoz engedélyezze újra a tematikus ikonokat Hangerő lépések (0-100%) - Modify display resolution - Before enabling this, make sure to reset all display size/dpi changes to default + Képernyő felbontás módosítása + Mielőtt engedélyeznéd ezt, győződj meg róla, hogy minden képernyő méret/dpi változásokat az eredeti értékekre visszaállítottál Kijelző felbontása A kijelző fényerejének korlátai Ez a tartomány NEM lineáris: Néha egy kis eltérés jelentős változásokhoz vezet @@ -276,8 +277,8 @@ [Amikor a kijelző mindig ki van kapcsolva] A képernyő megérintésével megjelenik a környezeti kijelzés Válassza ki a környezeti kijelző megjelenítéséhez [Amikor mindig a kijelző ki van kapcsolva] A telefon kiválasztásakor a környezeti kijelző látható - Force AOD while charging - Keep always on display enabled while device is charging + AOD kényszerítése töltés alatt + A \"mindig bekapcsolt\" kijelző engedélyezése, míg a készülék tölt Amíg a képernyő ki van kapcsolva,… Egyedi témájú ikonok Egyéni ikonok letiltva @@ -285,26 +286,26 @@ A zene kihagyásához nyomja meg hosszan a hangerő gombokat Értesítési lehetőségek Az összes kibontása/összecsukása gomb hozzáadása - Never dismiss ongoing notifications + Soha ne törölje a futó értesítéseket Figyelmeztető értesítés időtartama - Notification default expansion - Always expand - Always collapse + Értesítések alap terjedelme + Mindig kiterjesztett + Mindig összecsukott A rugalmas túlgörgetési hatás letiltása Fontos: engedélyeznie KELL azokat az alkalmazásokat, amelyeknél letiltani szeretné a túlgörgetést az LSPoseden belül Ezredmásodperc - Hours - System time - Use NTP to sync time - Time synchronization interval - NTP servers - Use semicolon to separate multiple servers - Sync now - Time synced successfully - NTP server connection error! + Órák + Rendszer idő + NTP használata az idő szinkronizálásához + Idő szinkronizálási időintervallum + NTP szerverek + Pontosvesszőt használj a szerverek elválasztásához + Szinkronizálás most + Az idő sikeresen szinkronizálásra került + NTP szerver kapcsolódási hiba! - Volume panel - Volume dialog timeout + Hangerő panel + Hangerő panel kijelzési idő Munka/klónozási profil A profilváltáshoz nyomja meg hosszan az állapotsort @@ -312,8 +313,8 @@ Engedélyezve az összes appnak a Pixel Xpert által. Jó szórakozást! - Battery info… - Error fetching charging data + Akkumulátor infó… + Töltési adatok lekérésekor hiba lépett fel Rezgés fogadott kimenő híváskor Rezgés, amikor megszakad a hívás @@ -441,9 +442,9 @@ A csomag sikeresen aktiválva A csomag aktiválása nem sikerült Aktiválás az LSPosedben - Package is not launch-able - Launch app - Restart app + A csomag nem futtatható + App futtatása + App újraindítása A root jogosultságok ellenőrzése… Csatlakozás a root szolgáltatáshoz… diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index ba584f5c5..18e1e5713 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -142,6 +142,7 @@ Download + Upload (Combinato) Solo download Solo upload + Show in bits/s Opzioni Status Bar Abilita indicatore batteria dual-tone On (solo con icona verticale) diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index 14ccee272..d7890ef3a 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -142,6 +142,7 @@ הורדה + העלאה (מְשׁוּלָב) הורדה בלבד העלאה בלבד + Show in bits/s אפשרויות שורת המצב אפשר מד סוללה כפול פועל (עובד רק עם סמל לאורך) diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index ddf7d2b82..700fb23f0 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -142,6 +142,7 @@ 下り + 上り (複合) 下りのみ 上りのみ + Show in bits/s ステータスバーの設定 デュアルトーンバッテリーメーターを有効化 ON (縦画面時のみ有効) diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index cf2cbac8b..0cdbd39ac 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -142,6 +142,7 @@ 다운로드 속도 + 업로드 속도 합산 표시 다운로드 속도만 표시 업로드 속도만 표시 + Show in bits/s 상태 표시줄 설정 다중 색상 배터리 아이콘 활성화 켜짐 (세로 아이콘에만 적용) diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index 9d9c8697b..e1df682b6 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -142,6 +142,7 @@ Downloaden + Uploaden (gecombineerd) Alleen downloaden Alleen uploaden + Show in bits/s Statusbalkopties Dual tone batterijmeter inschakelen Aan (werkt alleen met portretpictogram) diff --git a/app/src/main/res/values-no-rNO/strings.xml b/app/src/main/res/values-no-rNO/strings.xml index cda93513c..a7cdac95b 100644 --- a/app/src/main/res/values-no-rNO/strings.xml +++ b/app/src/main/res/values-no-rNO/strings.xml @@ -142,6 +142,7 @@ Last ned + Last opp (kombinert) Kun nedlasting Bare last opp + Show in bits/s Alternativer for statuslinje Aktiver dual tone batterimåler På (fungerer bare med stående ikon) diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index 9b593271a..835f5091a 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -142,6 +142,7 @@ Pobierz Prześlij (łącznie) Tylko pobierz Tylko prześlij + Show in bits/s Opcje paska stanu Włącz dwutonowy miernik baterii Włączone (działa tylko z ikoną pionową) diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 99b7e0b37..d2226ecaf 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -142,6 +142,7 @@ Downlaod + Upload (Combinado) Apenas download Apenas upload + Show in bits/s Preferências da barra de estado Ativar ícone de dois tons Ativado (apenas para o ícone em retrato) diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 5b62dee13..9eae2bf46 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -142,6 +142,7 @@ Descărcare + Încărcare (Combinat) Doar descărcare Doar încărcare + Arată în biți/s Opțiuni bară de stare Activare baterie cu ton dual Pornit (funcționează numai cu pictograma portret) diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 2e9fc86d9..07132c547 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -142,6 +142,7 @@ Загрузка + Отдача (комбинированная) Только загрузка Только отдача + Show in bits/s Параметры строки состояния Включить двухтонный измеритель заряда батареи Вкл (работает только с портретным значком) diff --git a/app/src/main/res/values-sr-rSP/strings.xml b/app/src/main/res/values-sr-rSP/strings.xml index ee5fd6e0a..a8cfeeb58 100644 --- a/app/src/main/res/values-sr-rSP/strings.xml +++ b/app/src/main/res/values-sr-rSP/strings.xml @@ -142,6 +142,7 @@ Преузимање + отпремање (комбиновано) Само преузимање Само отпремање + Show in bits/s Опције статусне траке Омогућите двотонски мерач батерије Укључено (ради само са иконом портрета) diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index cecdce17c..b62ea04f7 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -142,6 +142,7 @@ Ladda ner + Ladda upp (kombinerat) Endast nedladdning Endast ladda upp + Show in bits/s Statusfältsalternativ Aktivera batterimätare med dubbla toner På (fungerar bara med stående ikon) diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index 606a02122..eda329f0b 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -142,6 +142,7 @@ İndirme + Yükleme (Birleşik) Sadece indirme Sadece yükleme + Bit/s olarak göster Durum Çubuğu Seçenekleri Çift tonlu pil ölçeri etkinleştir Açık (yalnızca portre simgesiyle çalışır) diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index 7b9cd9794..cecde0039 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -142,6 +142,7 @@ Завантаження + Відправлення (Разом) Лише завантаження Лише відправлення + Show in bits/s Налаштування рядка стану Увімкнути двотональний індикатор заряду батареї Увімк (працює лише зі значком портретної орієнтації) diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index 2deb4185f..df8fa544f 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -142,6 +142,7 @@ Tải xuống + Tải lên (Kết hợp) Chỉ tải xuống Chỉ tải lên + Show in bits/s Tùy chỉnh thanh trạng thái Bật biểu tượng pin hai tông màu Bật (chỉ hoạt động với biểu tượng dọc) diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 69b14004c..250a68c64 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -142,6 +142,7 @@ 下载 + 上传 (合并) 仅下载 仅上传 + Show in bits/s 状态栏选项 双色电池图标 开启 (仅当纵向图标时生效) diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index e54f34f8a..3c0cf9bbc 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -142,6 +142,7 @@ 下載 +上傳 (合併) 僅下載 僅上傳 + Show in bits/s 自定狀態列 雙色電池圖示 開啟 (僅當縱向圖示時生效) From 54fc75222b7c838a67bcb67d990050c516933b63 Mon Sep 17 00:00:00 2001 From: Aaron Tulino <13600347+aaronjamt@users.noreply.github.com> Date: Fri, 29 Mar 2024 14:05:06 -0700 Subject: [PATCH 028/162] Add option to remove icon for UDFPS hint Similar to the option to remove the background circle for it, this one instead removes the actual fingerprint icon. This allows you to visually hide that you have an UDFPS, if desired, or just remove the icon for a cleaner look. I'm not sure how adding new translations are handled here so I only added English translations as that is the language I speak. If there is some other protocol involved in adding the translations, I'd be happy to follow it. --- .../modpacks/systemui/UDFPSManager.java | 24 +++++++++++++------ app/src/main/res/values/strings.xml | 3 +++ app/src/main/res/xml/lock_screen_prefs.xml | 8 +++++++ 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/UDFPSManager.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/UDFPSManager.java index 678b30866..67f54cc18 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/UDFPSManager.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/UDFPSManager.java @@ -25,6 +25,7 @@ public class UDFPSManager extends XposedModPack { private static final String listenPackage = Constants.SYSTEM_UI_PACKAGE; private static boolean transparentBG = false; + private static boolean transparentFG = false; public UDFPSManager(Context context) { super(context); @@ -34,6 +35,7 @@ public UDFPSManager(Context context) { public void updatePrefs(String... Key) { if (Xprefs == null) return; transparentBG = Xprefs.getBoolean("fingerprint_circle_hide", false); + transparentFG = Xprefs.getBoolean("fingerprint_icon_hide", false); } @Override @@ -71,7 +73,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { new XC_MethodHook() { @Override protected void afterHookedMethod(MethodHookParam param1) throws Throwable { - removeUDFPSBG(param.thisObject); + removeUDFPSGraphics(param.thisObject); } }); } catch (Throwable ignored) { @@ -82,7 +84,7 @@ protected void afterHookedMethod(MethodHookParam param1) throws Throwable { hookAllMethods(UdfpsKeyguardViewClass, "onFinishInflate", new XC_MethodHook() { //A13 @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { - removeUDFPSBG(param.thisObject); + removeUDFPSGraphics(param.thisObject); } }); @@ -108,13 +110,21 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { }); } - private void removeUDFPSBG(Object object) { - if (!transparentBG) return; - + private void removeUDFPSGraphics(Object object) { try { - ImageView mBgProtection = (ImageView) getObjectField(object, "mBgProtection"); - mBgProtection.setImageDrawable(new ShapeDrawable()); + if (transparentBG) { + ImageView mBgProtection = (ImageView) getObjectField(object, "mBgProtection"); + mBgProtection.setImageDrawable(new ShapeDrawable()); + } + + if (transparentFG) { + ImageView mLockScreenFp = (ImageView) getObjectField(object, "mLockScreenFp"); + mLockScreenFp.setImageDrawable(new ShapeDrawable()); + + ImageView mAodFp = (ImageView) getObjectField(object, "mAodFp"); + mAodFp.setImageDrawable(new ShapeDrawable()); + } } catch (Throwable ignored){} } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7fe08d9d4..2575518b0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -63,6 +63,9 @@ Remove background circle from under-display fingerprint Circle around fingerprint icon is active Circle around fingerprint icon will be hidden + Remove foreground icon from under-display fingerprint + Fingerprint icon is active + Fingerprint icon will be hidden Custom text on Lockscreen Configure carrier text - Top of the screen Carrier text unchanged diff --git a/app/src/main/res/xml/lock_screen_prefs.xml b/app/src/main/res/xml/lock_screen_prefs.xml index f188fed48..3bfd7e6bf 100644 --- a/app/src/main/res/xml/lock_screen_prefs.xml +++ b/app/src/main/res/xml/lock_screen_prefs.xml @@ -33,6 +33,14 @@ android:title="@string/transparent_fingerprint_circle" app:iconSpaceReserved="false" /> + + Date: Sun, 31 Mar 2024 00:47:34 +0000 Subject: [PATCH 029/162] New Crowdin translations by GitHub Action --- app/src/main/res/values-it-rIT/strings.xml | 2 +- app/src/main/res/values-ru-rRU/strings.xml | 2 +- app/src/main/res/values-vi-rVN/strings.xml | 2 +- app/src/main/res/values-zh-rCN/strings.xml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index 18e1e5713..18eed115a 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -142,7 +142,7 @@ Download + Upload (Combinato) Solo download Solo upload - Show in bits/s + Mostra in bit/s Opzioni Status Bar Abilita indicatore batteria dual-tone On (solo con icona verticale) diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 07132c547..f044913e7 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -142,7 +142,7 @@ Загрузка + Отдача (комбинированная) Только загрузка Только отдача - Show in bits/s + Показывать в битах/с Параметры строки состояния Включить двухтонный измеритель заряда батареи Вкл (работает только с портретным значком) diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index df8fa544f..01872e4c9 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -142,7 +142,7 @@ Tải xuống + Tải lên (Kết hợp) Chỉ tải xuống Chỉ tải lên - Show in bits/s + Hiển thị kiểu bit/s Tùy chỉnh thanh trạng thái Bật biểu tượng pin hai tông màu Bật (chỉ hoạt động với biểu tượng dọc) diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 250a68c64..6788545da 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -142,7 +142,7 @@ 下载 + 上传 (合并) 仅下载 仅上传 - Show in bits/s + 以位/秒显示 状态栏选项 双色电池图标 开启 (仅当纵向图标时生效) From b876cbca28ed931d9503445e26229e848490bbf9 Mon Sep 17 00:00:00 2001 From: DHD2280 Date: Mon, 1 Apr 2024 12:12:32 +0200 Subject: [PATCH 030/162] Battery Bar Power Save Color --- .../modpacks/systemui/StatusbarMods.java | 6 +++++- .../utils/batteryStyles/BatteryBarView.java | 10 +++++++++- .../siava/pixelxpert/utils/PreferenceHelper.java | 4 ++++ app/src/main/res/values/strings.xml | 2 ++ .../main/res/xml/statusbar_batterybar_prefs.xml | 14 ++++++++++++++ 5 files changed, 34 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/StatusbarMods.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/StatusbarMods.java index 0306a8f5b..9777e5073 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/StatusbarMods.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/StatusbarMods.java @@ -131,8 +131,10 @@ public class StatusbarMods extends XposedModPack { private static int[] batteryColors = new int[]{Color.RED, Color.YELLOW}; private static int chargingColor = Color.WHITE; private static int fastChargingColor = Color.WHITE; + private static int powerSaveColor = Color.parseColor("#FFBF00"); private static boolean indicateCharging = false; private static boolean indicateFastCharging = false; + private static boolean indicatePowerSave = false; private static boolean BBarTransitColors = false; //endregion @@ -304,10 +306,12 @@ public void updatePrefs(String... Key) { indicateFastCharging = Xprefs.getBoolean("indicateFastCharging", false); + indicatePowerSave = Xprefs.getBoolean("indicatePowerSave", false); indicateCharging = Xprefs.getBoolean("indicateCharging", true); chargingColor = Xprefs.getInt("batteryChargingColor", Color.GREEN); fastChargingColor = Xprefs.getInt("batteryFastChargingColor", Color.BLUE); + powerSaveColor = Xprefs.getInt("batteryPowerSaveColor", Color.parseColor("#FFBF00")); if (BBarEnabled) { placeBatteryBar(); @@ -1064,7 +1068,7 @@ private void setHeights() { //region battery bar related private void refreshBatteryBar(BatteryBarView instance) { - BatteryBarView.setStaticColor(batteryLevels, batteryColors, indicateCharging, chargingColor, indicateFastCharging, fastChargingColor, BBarTransitColors); + BatteryBarView.setStaticColor(batteryLevels, batteryColors, indicateCharging, chargingColor, indicateFastCharging, fastChargingColor, indicatePowerSave, powerSaveColor, BBarTransitColors); instance.setVisibility((BBarEnabled) ? VISIBLE : GONE); instance.setColorful(BBarColorful); instance.setOnlyWhileCharging(BBOnlyWhileCharging); diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/batteryStyles/BatteryBarView.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/batteryStyles/BatteryBarView.java index 0bea89cbb..fa16da1e9 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/batteryStyles/BatteryBarView.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/batteryStyles/BatteryBarView.java @@ -3,6 +3,7 @@ import static sh.siava.pixelxpert.modpacks.systemui.BatteryDataProvider.getCurrentLevel; import static sh.siava.pixelxpert.modpacks.systemui.BatteryDataProvider.isCharging; import static sh.siava.pixelxpert.modpacks.systemui.BatteryDataProvider.isFastCharging; +import static sh.siava.pixelxpert.modpacks.systemui.BatteryDataProvider.isPowerSaving; import android.annotation.SuppressLint; import android.content.Context; @@ -49,16 +50,20 @@ public class BatteryBarView extends FrameLayout { private static int[] batteryColors = new int[]{Color.RED, Color.YELLOW}; private static int chargingColor = Color.WHITE; private static int fastChargingColor = Color.WHITE; + private static int powerSaveColor = Color.parseColor("#FFBF00"); private static boolean indicateCharging = false; private static boolean indicateFastCharging = false; + private static boolean indicatePowerSave = false; private static boolean transitColors = false; - public static void setStaticColor(List batteryLevels, int[] batteryColors, boolean indicateCharging, int chargingColor, boolean indicateFastCharging, int fastChargingColor, boolean transitColors) { + public static void setStaticColor(List batteryLevels, int[] batteryColors, boolean indicateCharging, int chargingColor, boolean indicateFastCharging, int fastChargingColor, boolean indicatePowerSave, int powerSaveColor, boolean transitColors) { BatteryBarView.transitColors = transitColors; BatteryBarView.batteryLevels = batteryLevels; BatteryBarView.batteryColors = batteryColors; BatteryBarView.chargingColor = chargingColor; BatteryBarView.fastChargingColor = fastChargingColor; + BatteryBarView.indicatePowerSave = indicatePowerSave; + BatteryBarView.powerSaveColor = powerSaveColor; BatteryBarView.indicateCharging = indicateCharging; BatteryBarView.indicateFastCharging = indicateFastCharging; } @@ -178,6 +183,9 @@ public void refreshColors(int lenX, int lenY) { } else if (isCharging() && indicateCharging) //normal charging color { mPaint.setColor(chargingColor); + } else if (isPowerSaving() && indicatePowerSave) //power saving color + { + mPaint.setColor(powerSaveColor); } else if (!colorful || shadeColors == null) { //not charging color for (int i = 0; i < batteryLevels.size(); i++) { if (getCurrentLevel() <= batteryLevels.get(i)) { diff --git a/app/src/main/java/sh/siava/pixelxpert/utils/PreferenceHelper.java b/app/src/main/java/sh/siava/pixelxpert/utils/PreferenceHelper.java index 277ada4f2..8c67c1657 100644 --- a/app/src/main/java/sh/siava/pixelxpert/utils/PreferenceHelper.java +++ b/app/src/main/java/sh/siava/pixelxpert/utils/PreferenceHelper.java @@ -109,6 +109,7 @@ public static boolean isVisible(String key) { return instance.mPreferences.getBoolean("carrierTextMod", false); case "batteryFastChargingColor": + case "batteryPowerSaveColor": case "batteryChargingColor": case "batteryWarningColor": case "batteryCriticalColor": @@ -128,6 +129,8 @@ public static boolean isVisible(String key) { return instance.mPreferences.getBoolean("indicateFastCharging", false) && bBarEnabled; case "batteryChargingColor": return instance.mPreferences.getBoolean("indicateCharging", false) && bBarEnabled; + case "batteryPowerSaveColor": + return instance.mPreferences.getBoolean("indicatePowerSave", false) && bBarEnabled; case "batteryWarningColor": return !warnZero && bBarEnabled; default: //batteryCriticalColor @@ -143,6 +146,7 @@ public static boolean isVisible(String key) { case "BBSetCentered": case "indicateCharging": case "indicateFastCharging": + case "indicatePowerSave": case "batteryWarningRange": return instance.mPreferences.getBoolean("BBarEnabled", false); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7fe08d9d4..66451af07 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -169,12 +169,14 @@ Bar thickness Indicate charging Indicate fast charging + Indicate power save Warning level range Set both to 0 to disable level-based colors Critical level color Warning level color Charging color Fast charging color + Power Save color Shade colors between this range Colored battery percentage while charging diff --git a/app/src/main/res/xml/statusbar_batterybar_prefs.xml b/app/src/main/res/xml/statusbar_batterybar_prefs.xml index 02c9ba50f..99d25e9bd 100644 --- a/app/src/main/res/xml/statusbar_batterybar_prefs.xml +++ b/app/src/main/res/xml/statusbar_batterybar_prefs.xml @@ -84,6 +84,20 @@ android:title="@string/BB_batteryFastChargingColor" app:iconSpaceReserved="false" /> + + + + Date: Tue, 2 Apr 2024 11:15:21 +0330 Subject: [PATCH 031/162] updated app urls to short.io --- .../sh/siava/pixelxpert/ui/activities/SettingsActivity.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/ui/activities/SettingsActivity.java b/app/src/main/java/sh/siava/pixelxpert/ui/activities/SettingsActivity.java index f9718387a..da55b7336 100644 --- a/app/src/main/java/sh/siava/pixelxpert/ui/activities/SettingsActivity.java +++ b/app/src/main/java/sh/siava/pixelxpert/ui/activities/SettingsActivity.java @@ -947,7 +947,7 @@ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { .setOnPreferenceClickListener(preference -> { try { Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setData(Uri.parse("https://github.com/siavash79/PixelXpert")); + intent.setData(Uri.parse("https://pixelxpert.siava.sh")); startActivity(intent); } catch (Exception ignored) { Toast.makeText(getContext(), getString(R.string.browser_not_found), Toast.LENGTH_SHORT).show(); @@ -972,7 +972,7 @@ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { .setOnPreferenceClickListener(preference -> { try { Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setData(Uri.parse("https://crowdin.com/project/aospmods")); + intent.setData(Uri.parse("https://pixelxpert.siava.sh/translate")); startActivity(intent); } catch (Exception ignored) { Toast.makeText(getContext(), getString(R.string.browser_not_found), Toast.LENGTH_SHORT).show(); @@ -984,7 +984,7 @@ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { .setOnPreferenceClickListener(preference -> { try { Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setData(Uri.parse("https://github.com/siavash79/PixelXpert/wiki/PixelXpert-Wiki")); + intent.setData(Uri.parse("https://pixelxpert.siava.sh/wiki")); startActivity(intent); } catch (Exception ignored) { Toast.makeText(getContext(), getString(R.string.browser_not_found), Toast.LENGTH_SHORT).show(); From fade803047da5653de1c869b57f11af3cfe3e608 Mon Sep 17 00:00:00 2001 From: Siavash Date: Tue, 2 Apr 2024 16:41:36 +0330 Subject: [PATCH 032/162] CHANGELOG: This release is brought to you by: aaronjamt and DHD2280 --- .github/edit2MakeNewCanary | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/edit2MakeNewCanary b/.github/edit2MakeNewCanary index 04ad0604c..65aeddb0b 100644 --- a/.github/edit2MakeNewCanary +++ b/.github/edit2MakeNewCanary @@ -1 +1 @@ -Editing this file will trigger the build script for a new canary.. \ No newline at end of file +Editing this file will trigger the build script for a new canary. \ No newline at end of file From 5b4ecfb86225c2cdbb621ffdb2a5daff3bbe8082 Mon Sep 17 00:00:00 2001 From: GitHub Date: Tue, 2 Apr 2024 13:14:11 +0000 Subject: [PATCH 033/162] Version update: Release --- CanaryChangelog.md | 3 +++ MagiskModBase/module.prop | 4 ++-- MagiskModuleUpdate_Full.json | 4 ++-- MagiskModuleUpdate_Xposed.json | 4 ++-- app/build.gradle | 4 ++-- latestCanary.json | 4 ++-- 6 files changed, 13 insertions(+), 10 deletions(-) diff --git a/CanaryChangelog.md b/CanaryChangelog.md index 504b28a2e..06d6a2e62 100644 --- a/CanaryChangelog.md +++ b/CanaryChangelog.md @@ -1,3 +1,6 @@ +**canary-342** +- This release is brought to you by: aaronjamt and DHD2280 + **canary-341** - Happy Nowruz! - Network monitor: added bit/s to options diff --git a/MagiskModBase/module.prop b/MagiskModBase/module.prop index 8d1cfeeb4..7c84f6a0e 100644 --- a/MagiskModBase/module.prop +++ b/MagiskModBase/module.prop @@ -1,7 +1,7 @@ id=PixelXpert name=Pixel Xpert -version=canary-341 -versionCode=341 +version=canary-342 +versionCode=342 author=Pixel Xpert Team description=Xposed based module for customizations on Pixel roms. Android 13+ updateJson=https://raw.githubusercontent.com/siavash79/PixelXpert/canary/MagiskModuleUpdate_Xposed.json diff --git a/MagiskModuleUpdate_Full.json b/MagiskModuleUpdate_Full.json index aaa6cde4f..b6ab30366 100644 --- a/MagiskModuleUpdate_Full.json +++ b/MagiskModuleUpdate_Full.json @@ -1,6 +1,6 @@ { - "version": "canary-341", - "versionCode": 341, + "version": "canary-342", + "versionCode": 342, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/MagiskModuleUpdate_Xposed.json b/MagiskModuleUpdate_Xposed.json index aaa6cde4f..b6ab30366 100644 --- a/MagiskModuleUpdate_Xposed.json +++ b/MagiskModuleUpdate_Xposed.json @@ -1,6 +1,6 @@ { - "version": "canary-341", - "versionCode": 341, + "version": "canary-342", + "versionCode": 342, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index f8f59eb50..827c31142 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "sh.siava.pixelxpert" minSdk 33 targetSdk 34 - versionCode 341 - versionName "canary-341" + versionCode 342 + versionName "canary-342" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/latestCanary.json b/latestCanary.json index 172f77c7c..a2c9a980c 100644 --- a/latestCanary.json +++ b/latestCanary.json @@ -1,6 +1,6 @@ { - "version": "canary-341", - "versionCode": 341, + "version": "canary-342", + "versionCode": 342, "zipUrl_Xposed": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "zipUrl_Full": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" From 638481f78a094cd63e105508a3a4db73e023d5ed Mon Sep 17 00:00:00 2001 From: Siavash Date: Tue, 2 Apr 2024 16:47:21 +0330 Subject: [PATCH 034/162] updated CanaryChangelog.md --- CanaryChangelog.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CanaryChangelog.md b/CanaryChangelog.md index 06d6a2e62..7a210edba 100644 --- a/CanaryChangelog.md +++ b/CanaryChangelog.md @@ -1,5 +1,7 @@ **canary-342** - This release is brought to you by: aaronjamt and DHD2280 +- Added option to indicate power saving on battery bar +- Added option to completely hide the fingerprint icon from lockscreen **canary-341** - Happy Nowruz! From a209b701a41ae576846ff419ce0b7f87b91fd456 Mon Sep 17 00:00:00 2001 From: Siavash Date: Wed, 3 Apr 2024 09:15:11 +0330 Subject: [PATCH 035/162] CHANGELOG: A14ap21: Fixed QS panel mods --- .../pixelxpert/modpacks/systemui/QSTileGrid.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/QSTileGrid.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/QSTileGrid.java index 3b2164693..2ada3982d 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/QSTileGrid.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/QSTileGrid.java @@ -101,7 +101,6 @@ public void updatePrefs(String... Key) { public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { if (!lpparam.packageName.equals(listenPackage)) return; - Class tileLayoutClass = findClass("com.android.systemui.qs.TileLayout", lpparam.classLoader); Class QSTileViewImplClass = findClass("com.android.systemui.qs.tileimpl.QSTileViewImpl", lpparam.classLoader); Class FontSizeUtilsClass = findClass("com.android.systemui.FontSizeUtils", lpparam.classLoader); Class QSTileImplClass = findClass("com.android.systemui.qs.tileimpl.QSTileImpl", lpparam.classLoader); @@ -111,6 +110,12 @@ public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Th Class TileAdapterClass = findClass("com.android.systemui.qs.customize.TileAdapter", lpparam.classLoader); Class SideLabelTileLayoutClass = findClass("com.android.systemui.qs.SideLabelTileLayout", lpparam.classLoader); + Class TileLayoutClass = findClassIfExists("com.android.systemui.qs.TileLayout", lpparam.classLoader); + if(TileLayoutClass == null) //new versions have merged tile layout to sidelable + { + TileLayoutClass = SideLabelTileLayoutClass; + } + if(findMethodExactIfExists(FontSizeUtilsClass, "updateFontSize", TextView.class, int.class) @@ -141,7 +146,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { } } }); - hookAllMethods(tileLayoutClass, "updateResources", new XC_MethodHook() { + hookAllMethods(TileLayoutClass, "updateResources", new XC_MethodHook() { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { if(getQSCols() != QS_COL_NOT_SET || getQSRows() != NOT_SET) @@ -296,7 +301,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { }); // when media is played, system reverts tile cols to default value of 2. handling it: - hookAllMethods(tileLayoutClass, "setMaxColumns", new XC_MethodHook() { + hookAllMethods(TileLayoutClass, "setMaxColumns", new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { Context context = (Context) getObjectField(param.thisObject, "mContext"); From c146e8280c51baeae43f1dd3c2fc8154c52d4927 Mon Sep 17 00:00:00 2001 From: Siavash Date: Wed, 3 Apr 2024 09:34:57 +0330 Subject: [PATCH 036/162] CHANGELOG: A14ap21: Fixed Easy Unlock --- .github/edit2MakeNewCanary | 2 +- .../modpacks/systemui/EasyUnlock.java | 24 ++++++++++++++----- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/.github/edit2MakeNewCanary b/.github/edit2MakeNewCanary index 65aeddb0b..04ad0604c 100644 --- a/.github/edit2MakeNewCanary +++ b/.github/edit2MakeNewCanary @@ -1 +1 @@ -Editing this file will trigger the build script for a new canary. \ No newline at end of file +Editing this file will trigger the build script for a new canary.. \ No newline at end of file diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/EasyUnlock.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/EasyUnlock.java index a271fc6d7..3220cbfa9 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/EasyUnlock.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/EasyUnlock.java @@ -76,7 +76,18 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { if (passwordLen == expectedPassLen && passwordLen > lastPassLen) { new Thread(() -> { try { //don't crash systemUI if failed - int userId = (int) getObjectField(getObjectField(param.thisObject, "mKeyguardUpdateMonitor"), "sCurrentUser"); + int userId; + try { //14 QPR3 beta 2.1 + userId = (int) callMethod( + getObjectField( + getObjectField(param.thisObject, "mKeyguardUpdateMonitor"), + "mSelectedUserInteractor") + , "getSelectedUserId"); + } + catch (Throwable ignored) + { //14 QPR3 beta 2 and older + userId = (int) getObjectField(getObjectField(param.thisObject, "mKeyguardUpdateMonitor"), "sCurrentUser"); + } String methodName = param.thisObject.getClass().getName().contains("Password") ? "createPassword" : "createPin"; @@ -91,17 +102,18 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { if (accepted) { View mView = (View) getObjectField(param.thisObject, "mView"); + int finalUserId = userId; mView.post(() -> { try { //13 QPR3 - callMethod(callMethod(param.thisObject, "getKeyguardSecurityCallback"), "dismiss", userId, getObjectField(param.thisObject, "mSecurityMode")); + callMethod(callMethod(param.thisObject, "getKeyguardSecurityCallback"), "dismiss", finalUserId, getObjectField(param.thisObject, "mSecurityMode")); return; } catch (Throwable ignored) { } try { //Pre 13QPR3 - callMethod(callMethod(param.thisObject, "getKeyguardSecurityCallback"), "dismiss", userId, true /* sucessful */, getObjectField(param.thisObject, "mSecurityMode")); + callMethod(callMethod(param.thisObject, "getKeyguardSecurityCallback"), "dismiss", finalUserId, true /* sucessful */, getObjectField(param.thisObject, "mSecurityMode")); } catch (Throwable ignored) { //PRE-Pre 13QPR3 - callMethod(callMethod(param.thisObject, "getKeyguardSecurityCallback"), "dismiss", userId, true /* sucessful */); + callMethod(callMethod(param.thisObject, "getKeyguardSecurityCallback"), "dismiss", finalUserId, true /* sucessful */); } }); } @@ -118,9 +130,9 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { protected void afterHookedMethod(MethodHookParam param) throws Throwable { if (!easyUnlockEnabled) return; - boolean succesful = (boolean) param.args[2]; + boolean successful = (boolean) param.args[2]; - if (succesful) { + if (successful) { expectedPassLen = lastPassLen; Xprefs.edit().putInt("expectedPassLen", expectedPassLen).commit(); } From 937a2c24cfeb49760485a5a031ab3a36eea846eb Mon Sep 17 00:00:00 2001 From: GitHub Date: Wed, 3 Apr 2024 06:07:54 +0000 Subject: [PATCH 037/162] Version update: Release --- CanaryChangelog.md | 4 ++++ MagiskModBase/module.prop | 4 ++-- MagiskModuleUpdate_Full.json | 4 ++-- MagiskModuleUpdate_Xposed.json | 4 ++-- app/build.gradle | 4 ++-- latestCanary.json | 4 ++-- 6 files changed, 14 insertions(+), 10 deletions(-) diff --git a/CanaryChangelog.md b/CanaryChangelog.md index 7a210edba..55c0da613 100644 --- a/CanaryChangelog.md +++ b/CanaryChangelog.md @@ -1,3 +1,7 @@ +**canary-343** +- A14ap21: Fixed Easy Unlock +- A14ap21: Fixed QS panel mods + **canary-342** - This release is brought to you by: aaronjamt and DHD2280 - Added option to indicate power saving on battery bar diff --git a/MagiskModBase/module.prop b/MagiskModBase/module.prop index 7c84f6a0e..823627ea8 100644 --- a/MagiskModBase/module.prop +++ b/MagiskModBase/module.prop @@ -1,7 +1,7 @@ id=PixelXpert name=Pixel Xpert -version=canary-342 -versionCode=342 +version=canary-343 +versionCode=343 author=Pixel Xpert Team description=Xposed based module for customizations on Pixel roms. Android 13+ updateJson=https://raw.githubusercontent.com/siavash79/PixelXpert/canary/MagiskModuleUpdate_Xposed.json diff --git a/MagiskModuleUpdate_Full.json b/MagiskModuleUpdate_Full.json index b6ab30366..ea3fa03a0 100644 --- a/MagiskModuleUpdate_Full.json +++ b/MagiskModuleUpdate_Full.json @@ -1,6 +1,6 @@ { - "version": "canary-342", - "versionCode": 342, + "version": "canary-343", + "versionCode": 343, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/MagiskModuleUpdate_Xposed.json b/MagiskModuleUpdate_Xposed.json index b6ab30366..ea3fa03a0 100644 --- a/MagiskModuleUpdate_Xposed.json +++ b/MagiskModuleUpdate_Xposed.json @@ -1,6 +1,6 @@ { - "version": "canary-342", - "versionCode": 342, + "version": "canary-343", + "versionCode": 343, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 827c31142..39ddf95fa 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "sh.siava.pixelxpert" minSdk 33 targetSdk 34 - versionCode 342 - versionName "canary-342" + versionCode 343 + versionName "canary-343" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/latestCanary.json b/latestCanary.json index a2c9a980c..bb8950eb9 100644 --- a/latestCanary.json +++ b/latestCanary.json @@ -1,6 +1,6 @@ { - "version": "canary-342", - "versionCode": 342, + "version": "canary-343", + "versionCode": 343, "zipUrl_Xposed": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "zipUrl_Full": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" From 7775122d5e59479e0b48a43d2bab8e51c108b6dd Mon Sep 17 00:00:00 2001 From: Siavash Date: Wed, 3 Apr 2024 14:02:36 +0330 Subject: [PATCH 038/162] fixed update clock when only format has changed --- .../modpacks/systemui/StatusbarMods.java | 15 +++++++++------ .../modpacks/utils/toolkit/ObjectTools.java | 8 +++++++- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/StatusbarMods.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/StatusbarMods.java index 9777e5073..5f7912b4c 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/StatusbarMods.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/StatusbarMods.java @@ -158,7 +158,7 @@ public class StatusbarMods extends XposedModPack { private FrameLayout fullStatusbar; // private Object STB = null; - private View mClockView; + private TextView mClockView; private ViewGroup mNotificationIconContainer = null; LinearLayout mNotificationContainerContainer; private LinearLayout mLeftVerticalSplitContainer; @@ -468,12 +468,15 @@ public void updatePrefs(String... Key) { break; } } - } private void updateClock() { try { - mClockView.post(() -> callMethod(mClockView, "updateClock")); + mClockView.post(() -> { //the builtin update method doesn't care about the format. Just the text sadly + callMethod(getObjectField(mClockView, "mCalendar"), "setTimeInMillis", System.currentTimeMillis()); + + mClockView.setText((CharSequence) callMethod(mClockView, "getSmallTime")); + }); } catch (Throwable ignored){} } @@ -830,10 +833,10 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { } try { - mClockView = (View) getObjectField(param.thisObject, "mClockView"); + mClockView = (TextView) getObjectField(param.thisObject, "mClockView"); } catch (Throwable t) { //PE Plus Object mClockController = getObjectField(param.thisObject, "mClockController"); - mClockView = (View) callMethod(mClockController, "getClock"); + mClockView = (TextView) callMethod(mClockController, "getClock"); } mStatusBar = (ViewGroup) getObjectField(mCollapsedStatusBarFragment, "mStatusBar"); @@ -920,7 +923,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { if(getAdditionalInstanceField(param.thisObject, "stringFormatCallBack") == null) { FormattedStringCallback callback = () -> { - if(mAmPmStyle == AM_PM_STYLE_GONE) //don't update again if it's going to do it every second anyway + if(!mShowSeconds) //don't update again if it's going to do it every second anyway updateClock(); }; diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/toolkit/ObjectTools.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/toolkit/ObjectTools.java index ce5c92ed6..d1df65bb4 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/toolkit/ObjectTools.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/toolkit/ObjectTools.java @@ -1,5 +1,6 @@ package sh.siava.pixelxpert.modpacks.utils.toolkit; +import android.graphics.Color; import android.text.SpannableString; import android.text.SpannableStringBuilder; import android.text.Spanned; @@ -11,6 +12,7 @@ import java.text.DecimalFormat; import java.util.Arrays; +import java.util.Random; import java.util.regex.Pattern; import java.util.stream.Stream; @@ -112,5 +114,9 @@ private static String getCommaSearchPattern(String tile) { return String.format("^(%s,)(.+)|(.+)(,%s)(,.+|$)", tile, tile); } - + public static @ColorInt int getRandomColor() + { + Random rnd = new Random(); + return Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256)); + } } From eb4d8a68627d056151ca090bfc9688984148f49d Mon Sep 17 00:00:00 2001 From: Siavash Date: Thu, 4 Apr 2024 12:20:07 +0330 Subject: [PATCH 039/162] moved tile percentage drawable to separate class --- .../modpacks/systemui/FlashLightLevel.java | 84 ++++--------------- .../modpacks/systemui/VolumeTile.java | 83 ++++-------------- .../utils/TilePercentageDrawable.java | 74 ++++++++++++++++ 3 files changed, 104 insertions(+), 137 deletions(-) create mode 100644 app/src/main/java/sh/siava/pixelxpert/modpacks/utils/TilePercentageDrawable.java diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/FlashLightLevel.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/FlashLightLevel.java index d021b16b9..04cbd0b5d 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/FlashLightLevel.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/FlashLightLevel.java @@ -12,13 +12,7 @@ import android.annotation.SuppressLint; import android.content.Context; import android.content.res.Resources; -import android.graphics.Bitmap; -import android.graphics.Canvas; import android.graphics.Color; -import android.graphics.ColorFilter; -import android.graphics.Paint; -import android.graphics.PixelFormat; -import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.graphics.drawable.LayerDrawable; import android.os.VibrationAttributes; @@ -28,15 +22,13 @@ import android.widget.LinearLayout; import android.widget.TextView; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.callbacks.XC_LoadPackage; import sh.siava.pixelxpert.modpacks.Constants; import sh.siava.pixelxpert.modpacks.XPLauncher; import sh.siava.pixelxpert.modpacks.XposedModPack; import sh.siava.pixelxpert.modpacks.utils.SystemUtils; +import sh.siava.pixelxpert.modpacks.utils.TilePercentageDrawable; @SuppressWarnings("RedundantThrows") public class FlashLightLevel extends XposedModPack { @@ -44,7 +36,7 @@ public class FlashLightLevel extends XposedModPack { private static boolean leveledFlashTile = false; private float currentPct = .5f; private static boolean lightQSHeaderEnabled = false; - Drawable flashPercentageDrawable = null; + TilePercentageDrawable mFlashPercentageDrawable = null; public FlashLightLevel(Context context) { super(context); @@ -65,8 +57,8 @@ public boolean listensTo(String packageName) { public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { if (!lpparam.packageName.equals(listenPackage)) return; - flashPercentageDrawable = new PercentageShape(); - flashPercentageDrawable.setAlpha(64); + mFlashPercentageDrawable = new TilePercentageDrawable(mContext); + mFlashPercentageDrawable.setAlpha(64); Class QSTileViewImplClass = findClass("com.android.systemui.qs.tileimpl.QSTileViewImpl", lpparam.classLoader); @@ -104,7 +96,7 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { SystemUtils.registerFlashlightLevelListener(listener); - currentPct = Xprefs.getFloat("flashPCT", 0.5f); + setPct(Xprefs.getFloat("flashPCT", 0.5f)); thisView.setOnTouchListener(new View.OnTouchListener() { float initX = 0; @@ -131,7 +123,7 @@ public boolean onTouch(View view, MotionEvent motionEvent) { view.getParent().requestDisallowInterceptTouchEvent(true); moved = true; - currentPct = newLevel * 1f / SystemUtils.getMaxFlashLevel(); + setPct(newLevel * 1f / SystemUtils.getMaxFlashLevel()); handleFlashLightClick(false, newLevel); SystemUtils.setFlashlightLevel(Math.round(currentPct * 100f)); } @@ -167,20 +159,20 @@ protected void afterHookedMethod(MethodHookParam param) { if (getObjectField(state, "spec").equals("flashlight")) { LinearLayout tileView = (LinearLayout) param.thisObject; - currentPct = Xprefs.getFloat("flashPCT", 0.5f); + setPct(Xprefs.getFloat("flashPCT", 0.5f)); SystemUtils.setFlashlightLevel(Math.round(currentPct * 100f)); - flashPercentageDrawable.setTint( + mFlashPercentageDrawable.setTint( (SystemUtils.isDarkMode() || !lightQSHeaderEnabled) && !getObjectField(state, "state").equals(STATE_ACTIVE) ? Color.WHITE : Color.BLACK); LayerDrawable layerDrawable; try { //A14 AP11 - layerDrawable = new LayerDrawable(new Drawable[]{(Drawable) getObjectField(tileView, "backgroundDrawable"), flashPercentageDrawable}); + layerDrawable = new LayerDrawable(new Drawable[]{(Drawable) getObjectField(tileView, "backgroundDrawable"), mFlashPercentageDrawable}); } catch (Throwable ignored) { //Older - layerDrawable = new LayerDrawable(new Drawable[]{(Drawable) getObjectField(tileView, "colorBackgroundDrawable"), flashPercentageDrawable}); + layerDrawable = new LayerDrawable(new Drawable[]{(Drawable) getObjectField(tileView, "colorBackgroundDrawable"), mFlashPercentageDrawable}); } if(layerDrawable == null) return; //something is wrong @@ -191,58 +183,12 @@ protected void afterHookedMethod(MethodHookParam param) { }); } - private void handleFlashLightClick(boolean toggle, int level) { - SystemUtils.setFlash(toggle ^ SystemUtils.isFlashOn(), level); + private void setPct(float newVal) { + currentPct = newVal; + mFlashPercentageDrawable.setPct(Math.round(newVal * 100)); } - private class PercentageShape extends Drawable { - final Drawable shape; - - @SuppressLint({"UseCompatLoadingForDrawables", "DiscouragedApi"}) - private PercentageShape() { - shape = mContext.getDrawable(mContext.getResources().getIdentifier("qs_tile_background_shape", "drawable", mContext.getPackageName())); - } - - @Override - public void setBounds(Rect bounds) { - shape.setBounds(bounds); - } - - @Override - public void setBounds(int a, int b, int c, int d) { - shape.setBounds(a, b, c, d); - } - - @Override - public void draw(@NonNull Canvas canvas) { - try { - Bitmap bitmap = Bitmap.createBitmap(Math.round(shape.getBounds().width() * currentPct), shape.getBounds().height(), Bitmap.Config.ARGB_8888); - Canvas tempCanvas = new Canvas(bitmap); - shape.draw(tempCanvas); - - canvas.drawBitmap(bitmap, 0, 0, new Paint()); - } - catch (Throwable ignored){} - } - - @Override - public void setAlpha(int i) { - shape.setAlpha(i); - } - - @Override - public void setColorFilter(@Nullable ColorFilter colorFilter) { - shape.setColorFilter(colorFilter); - } - - @Override - public int getOpacity() { - return PixelFormat.UNKNOWN; - } - - @Override - public void setTint(int t) { - shape.setTint(t); - } + private void handleFlashLightClick(boolean toggle, int level) { + SystemUtils.setFlash(toggle ^ SystemUtils.isFlashOn(), level); } } \ No newline at end of file diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/VolumeTile.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/VolumeTile.java index 08d339bd2..ff523f477 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/VolumeTile.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/VolumeTile.java @@ -1,7 +1,5 @@ package sh.siava.pixelxpert.modpacks.systemui; -import static android.graphics.Bitmap.Config; -import static android.graphics.Bitmap.createBitmap; import static android.media.AudioManager.STREAM_MUSIC; import static android.os.VibrationAttributes.USAGE_TOUCH; import static android.os.VibrationEffect.EFFECT_CLICK; @@ -29,13 +27,7 @@ import android.annotation.SuppressLint; import android.content.Context; import android.content.res.Resources; -import android.graphics.Bitmap; -import android.graphics.Canvas; import android.graphics.Color; -import android.graphics.ColorFilter; -import android.graphics.Paint; -import android.graphics.PixelFormat; -import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.graphics.drawable.LayerDrawable; import android.view.MotionEvent; @@ -43,9 +35,6 @@ import android.widget.LinearLayout; import android.widget.TextView; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - import java.util.ArrayList; import de.robv.android.xposed.XC_MethodHook; @@ -54,6 +43,7 @@ import sh.siava.pixelxpert.modpacks.XPLauncher; import sh.siava.pixelxpert.modpacks.XposedModPack; import sh.siava.pixelxpert.modpacks.utils.SystemUtils.ChangeListener; +import sh.siava.pixelxpert.modpacks.utils.TilePercentageDrawable; @SuppressWarnings({"RedundantThrows", "ConstantConditions"}) public class VolumeTile extends XposedModPack { @@ -63,7 +53,7 @@ public class VolumeTile extends XposedModPack { private int currentPct = 50; private static int unMuteVolumePCT = 50; private static boolean lightQSHeaderEnabled = false; - Drawable volumePercentageDrawable = null; + TilePercentageDrawable mVolumePercentageDrawable = null; private static int minVol = -1; private static int maxVol = -1; public VolumeTile(Context context) { @@ -90,8 +80,8 @@ public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Th maxVol = AudioManager().getStreamMaxVolume(STREAM_MUSIC); }).start(); - volumePercentageDrawable = new PercentageShape(); - volumePercentageDrawable.setAlpha(64); + mVolumePercentageDrawable = new TilePercentageDrawable(mContext); + mVolumePercentageDrawable.setAlpha(64); Class QSTileViewImplClass = findClass("com.android.systemui.qs.tileimpl.QSTileViewImpl", lpparam.classLoader); Class QSPanelControllerBaseClass = findClass("com.android.systemui.qs.QSPanelControllerBase", lpparam.classLoader); @@ -179,7 +169,8 @@ public boolean onTouch(View view, MotionEvent motionEvent) { int newPct = clampPctToSteps(round(max(min((motionEvent.getX() / view.getWidth()), 1), 0) * 100f)); if (newPct != currentPct) { - currentPct = newPct; + setPct(newPct); + view.getParent().requestDisallowInterceptTouchEvent(true); moved = true; @@ -214,16 +205,16 @@ private void updateTileView(LinearLayout tileView, int state) { try { //don't crash systemui if failed Resources res = mContext.getResources(); - volumePercentageDrawable.setTint( + mVolumePercentageDrawable.setTint( (isDarkMode() || !lightQSHeaderEnabled) && state != STATE_ACTIVE ? Color.WHITE : Color.BLACK); LayerDrawable layerDrawable; try { //A14 AP11 - layerDrawable = new LayerDrawable(new Drawable[]{(Drawable) getObjectField(tileView, "backgroundDrawable"), volumePercentageDrawable}); + layerDrawable = new LayerDrawable(new Drawable[]{(Drawable) getObjectField(tileView, "backgroundDrawable"), mVolumePercentageDrawable}); } catch (Throwable ignored) { //Older - layerDrawable = new LayerDrawable(new Drawable[]{(Drawable) getObjectField(tileView, "colorBackgroundDrawable"), volumePercentageDrawable}); + layerDrawable = new LayerDrawable(new Drawable[]{(Drawable) getObjectField(tileView, "colorBackgroundDrawable"), mVolumePercentageDrawable}); } if(layerDrawable == null) return; //something is wrong @@ -264,7 +255,7 @@ private void handleVolumeChanged(View thisView, int newVal) { new Thread(() -> { Object parentTile = getAdditionalInstanceField(thisView, "mParentTile"); - currentPct = newVal; + setPct(newVal); Object mTile = getObjectField(parentTile, "mTile"); @@ -280,6 +271,11 @@ private void handleVolumeChanged(View thisView, int newVal) { }).start(); } + private void setPct(int newVal) { + currentPct = newVal; + mVolumePercentageDrawable.setPct(newVal); + } + private void handleVolumeChanged(View thisView) { new Thread(() -> handleVolumeChanged(thisView, getCurrentVolumePercent())).start(); } @@ -298,54 +294,5 @@ private int getCurrentVolumePercent() { return round(100f * (currentVol - minVol) / (maxVol - minVol)); } - private class PercentageShape extends Drawable { - final Drawable shape; - - @SuppressLint({"UseCompatLoadingForDrawables", "DiscouragedApi"}) - private PercentageShape() { - shape = mContext.getDrawable(mContext.getResources().getIdentifier("qs_tile_background_shape", "drawable", mContext.getPackageName())); - } - - @Override - public void setBounds(Rect bounds) { - shape.setBounds(bounds); - } - - @Override - public void setBounds(int a, int b, int c, int d) { - shape.setBounds(a, b, c, d); - } - - @Override - public void draw(@NonNull Canvas canvas) { - try { - Bitmap bitmap = createBitmap(round(shape.getBounds().width() * currentPct / 100f), shape.getBounds().height(), Config.ARGB_8888); - Canvas tempCanvas = new Canvas(bitmap); - shape.draw(tempCanvas); - canvas.drawBitmap(bitmap, 0, 0, new Paint()); - } - catch (Throwable ignored){} - } - - @Override - public void setAlpha(int i) { - shape.setAlpha(i); - } - - @Override - public void setColorFilter(@Nullable ColorFilter colorFilter) { - shape.setColorFilter(colorFilter); - } - - @Override - public int getOpacity() { - return PixelFormat.UNKNOWN; - } - - @Override - public void setTint(int t) { - shape.setTint(t); - } - } } \ No newline at end of file diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/TilePercentageDrawable.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/TilePercentageDrawable.java new file mode 100644 index 000000000..d7d5ff2a6 --- /dev/null +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/TilePercentageDrawable.java @@ -0,0 +1,74 @@ +package sh.siava.pixelxpert.modpacks.utils; + +import static android.graphics.Bitmap.createBitmap; +import static java.lang.Math.round; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.ColorFilter; +import android.graphics.Paint; +import android.graphics.PixelFormat; +import android.graphics.Rect; +import android.graphics.drawable.Drawable; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +public class TilePercentageDrawable extends Drawable { + final Drawable shape; + private int currentPct = 0; + + @SuppressLint({"UseCompatLoadingForDrawables", "DiscouragedApi"}) + public TilePercentageDrawable(Context context) { + shape = context.getDrawable(context.getResources().getIdentifier("qs_tile_background_shape", "drawable", context.getPackageName())); + } + + public void setPct(int pct) + { + currentPct = pct; + } + + @Override + public void setBounds(Rect bounds) { + shape.setBounds(bounds); + } + + @Override + public void setBounds(int a, int b, int c, int d) { + shape.setBounds(a, b, c, d); + } + + @Override + public void draw(@NonNull Canvas canvas) { + try { + Bitmap bitmap = createBitmap(round(shape.getBounds().width() * currentPct / 100f), shape.getBounds().height(), Bitmap.Config.ARGB_8888); + Canvas tempCanvas = new Canvas(bitmap); + shape.draw(tempCanvas); + + canvas.drawBitmap(bitmap, 0, 0, new Paint()); + } + catch (Throwable ignored){} + } + + @Override + public void setAlpha(int i) { + shape.setAlpha(i); + } + + @Override + public void setColorFilter(@Nullable ColorFilter colorFilter) { + shape.setColorFilter(colorFilter); + } + + @Override + public int getOpacity() { + return PixelFormat.UNKNOWN; + } + + @Override + public void setTint(int t) { + shape.setTint(t); + } +} \ No newline at end of file From e46354fccac2ff5612ce2af2bf2dd5399aac87ba Mon Sep 17 00:00:00 2001 From: Crowdin Bot Date: Sun, 7 Apr 2024 00:47:44 +0000 Subject: [PATCH 040/162] New Crowdin translations by GitHub Action --- app/src/main/res/values-af-rZA/strings.xml | 5 ++ app/src/main/res/values-ar-rSA/strings.xml | 5 ++ app/src/main/res/values-cs-rCZ/strings.xml | 5 ++ app/src/main/res/values-da-rDK/strings.xml | 5 ++ app/src/main/res/values-de-rDE/strings.xml | 81 ++++++++++++---------- app/src/main/res/values-el-rGR/strings.xml | 5 ++ app/src/main/res/values-es-rES/strings.xml | 5 ++ app/src/main/res/values-fa-rIR/strings.xml | 5 ++ app/src/main/res/values-fi-rFI/strings.xml | 5 ++ app/src/main/res/values-fr-rFR/strings.xml | 5 ++ app/src/main/res/values-hi-rIN/strings.xml | 5 ++ app/src/main/res/values-hu-rHU/strings.xml | 5 ++ app/src/main/res/values-it-rIT/strings.xml | 5 ++ app/src/main/res/values-iw-rIL/strings.xml | 5 ++ app/src/main/res/values-ja-rJP/strings.xml | 81 ++++++++++++---------- app/src/main/res/values-ko-rKR/strings.xml | 5 ++ app/src/main/res/values-nl-rNL/strings.xml | 5 ++ app/src/main/res/values-no-rNO/strings.xml | 5 ++ app/src/main/res/values-pl-rPL/strings.xml | 5 ++ app/src/main/res/values-pt-rPT/strings.xml | 7 +- app/src/main/res/values-ro-rRO/strings.xml | 5 ++ app/src/main/res/values-ru-rRU/strings.xml | 5 ++ app/src/main/res/values-sr-rSP/strings.xml | 5 ++ app/src/main/res/values-sv-rSE/strings.xml | 5 ++ app/src/main/res/values-tr-rTR/strings.xml | 5 ++ app/src/main/res/values-uk-rUA/strings.xml | 5 ++ app/src/main/res/values-vi-rVN/strings.xml | 5 ++ app/src/main/res/values-zh-rCN/strings.xml | 5 ++ app/src/main/res/values-zh-rTW/strings.xml | 5 ++ 29 files changed, 222 insertions(+), 77 deletions(-) diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml index 34325a64e..4e237e5ff 100644 --- a/app/src/main/res/values-af-rZA/strings.xml +++ b/app/src/main/res/values-af-rZA/strings.xml @@ -57,6 +57,9 @@ Verwyder agtergrondsirkel van vingerafdruk onder die skerm Sirkel om vingerafdrukikoon is aktief Sirkel om vingerafdrukikoon sal versteek word + Remove foreground icon from under-display fingerprint + Fingerprint icon is active + Fingerprint icon will be hidden Pasgemaakte teks op sluitskerm Stel diensverskafferteks op - Boaan die skerm Draerteks onveranderd @@ -161,12 +164,14 @@ Staaf dikte Dui laai aan Dui vinnige laai aan + Indicate power save Waarskuwing vlak reeks Stel albei op 0 om vlakgebaseerde kleure uit te skakel Kritieke vlak kleur Waarskuwing vlak kleur Laai kleur Vinnig laai kleur + Power Save color Skadu kleure tussen hierdie reeks Colored battery percentage while charging Vandag diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index d4baac9ec..8e5a18fe0 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -57,6 +57,9 @@ إزالة دائرة الخلفية من البصمة السفلية الدائرة حول أيقونة البصمة نشطة الدائرة حول أيقونة بصمة الاصبع سوف تكون مخفية + Remove foreground icon from under-display fingerprint + Fingerprint icon is active + Fingerprint icon will be hidden نص مخصص على شاشة القفل تكوين نص شركة الاتصالات - أعلى الشاشة نص الناقل لم يتغير @@ -161,12 +164,14 @@ سمك الشريط اذكر الشحن حدد الشحن السريع + Indicate power save نطاق مستوى التحذير تعيين كلا إلى 0 لتعطيل الألوان المستندة إلى المستوى لون المستوى الحرج لون مستوى التحذير لون الشحن لون الشحن السريع + Power Save color ألوان التظليل بين هذا النطاق نسبة بطارية ملونة أثناء الشحن اليوم diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index 43810d050..5d005c96f 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -57,6 +57,9 @@ Odstraňte kruh na pozadí z otisku prstu pod displejem Kruh kolem ikony otisku prstu je aktivní Kruh kolem ikony otisku prstu bude skrytý + Remove foreground icon from under-display fingerprint + Fingerprint icon is active + Fingerprint icon will be hidden Vlastní text na obrazovce uzamčení Konfigurace textu operátora – horní část obrazovky Text nosiče nezměněn @@ -161,12 +164,14 @@ Tloušťka tyče Označte nabíjení Označte rychlé nabíjení + Indicate power save Rozsah úrovně varování Nastavením obou na 0 deaktivujete barvy založené na úrovni Barva kritické úrovně Barva úrovně varování Barva nabíjení Barva rychlého nabíjení + Power Save color Stínujte barvy mezi tímto rozsahem Colored battery percentage while charging Dnes diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml index 6bb7bfbc5..c2d2c690c 100644 --- a/app/src/main/res/values-da-rDK/strings.xml +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -57,6 +57,9 @@ Fjern baggrundscirkel fra fingeraftryk under skærmen Cirkel omkring fingeraftryksikonet er aktivt Cirkel omkring fingeraftryksikonet vil blive skjult + Remove foreground icon from under-display fingerprint + Fingerprint icon is active + Fingerprint icon will be hidden Brugerdefineret tekst på låseskærm Konfigurer operatørtekst - Øverst på skærmen Transportørtekst uændret @@ -161,12 +164,14 @@ Bar tykkelse Angiv opladning Angiv hurtig opladning + Indicate power save Advarselsniveauområde Indstil begge til 0 for at deaktivere niveaubaserede farver Farve på kritisk niveau Farve på advarselsniveau Opladningsfarve Hurtig opladning farve + Power Save color Skygge farver mellem dette område Colored battery percentage while charging I dag diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index 346e12b3f..fe2a63e4d 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -2,7 +2,7 @@ Alternative AOSP Mods-Symbole aktivieren - Customizations for Google Pixel devices + Anpassungen für Google Pixel-Geräte Medienvolumen App-Profil wechseln Verstecken (Standard) @@ -34,8 +34,8 @@ Telegrammgruppe Verwendung Wiki-Seite öffnen - Translate to your language - Help us in translating %s into your own language + In Deine Sprache übersetzen + Hilf uns, %s in deine eigene Sprache zu übersetzen Sperrbildschirm Statusleiste @@ -57,6 +57,9 @@ Verstecke den Kreis um das Fingerabdrucksymbol Kreis um das Fingerabdrucksymbol wird angezeigt Kreis um das Fingerabdrucksymbol wird versteckt + Remove foreground icon from under-display fingerprint + Fingerprint icon is active + Fingerprint icon will be hidden Benutzerdefinierter Text auf dem Sperrbildschirm Konfiguriere den Betreibertext Betreibertext unverändert @@ -81,7 +84,7 @@ Einfaches Entsperren (Pin/Passwort) Wenn es beim ersten Mal nicht funktioniert hat, versuche es erneut Ladeinformationen auf dem Sperrbildschirm - Don\'t show \"Customize Lock Screen\" pill + \"Sperrbildschirm anpassen\" Pille nicht anzeigen Verwenden imperiale Einheiten Doppelt Tippen zum Sperren @@ -142,7 +145,7 @@ Herunterladen + Hochladen (kombiniert) Nur herunterladen Nur hochladen - Show in bits/s + In Bits/s anzeigen Statusleisten Optionen Aktivieren die Zweiton-Akkuanzeige Ein (Funktioniert nur mit dem Portrait Symbol) @@ -161,14 +164,16 @@ Leistendicke Ladeanzeige Schnelladeanzeige + Indicate power save Warnung bei Akkulevel Setze beide auf 0 um die Level basierenden Farben zu deaktivieren Farbe bei kritischem Akkulevel Farbe bei Warnung des Akkulevel Farbe beim Laden Farbe beim Schnelladen + Power Save color Schattierungsfarben zwischen den Bereichen - Colored battery percentage while charging + Farbiger Akku-Prozentsatz beim Laden Heute Aktuelle Woche Aktueller Monat @@ -196,13 +201,13 @@ Schnelles herunterziehen des Schnelleinstellungsmenüs von der Statusleiste Schnelles herunterziehen Seite Schnelleinstellungen herunterziehen - Close quick settings with one swipe + Schnelleinstellungen mit einem Wischen schließen Vibriere beim berühren eines Schnelleinstellungs Tab Intensität wird durch die Systemeinstellungen für die Berührungsvibration bestimmt Im Hochformat Im Querformat - Miscellaneous - Show charging info on QS panel + Verschiedenes + Ladeinformationen im QS-Panel anzeigen Anzahl Reihen in den Schnelleinstellungen Anzahl der QS-Spalten Maximale Kacheln in Quick QS (max. 2 Zeilen) @@ -258,11 +263,11 @@ Ignoriert auch die schwebende Schaltfläche für die manuelle Drehung Kameraausschnitt ignorieren Fügen Sie \'alles löschen\' unten auf die Recents-Leiste - Auto-generate missing themed icons (Pixel launcher only) + Fehlende Themensymbole automatisch generieren (nur Pixel Launcher) Thematische Symbole wieder aktivieren und anwenden Lautstärkeschritte (0 bis 100%) - Modify display resolution - Before enabling this, make sure to reset all display size/dpi changes to default + Bildschirmauflösung ändern + Bevor Sie dies aktivieren, stellen Sie sicher, dass alle Displaygrößen/dpi-Änderungen auf Standard zurückgesetzt wurden Bildschirmauflösung Helligkeitsgrenzen anzeigen Dieser Bereich ist NICHT linear: Manchmal führt ein kleiner Unterschied zu erheblichen Veränderungen @@ -277,8 +282,8 @@ [Wenn die Anzeige immer eingeschaltet ist, ist sie ausgeschaltet] Wenn Sie auf den Bildschirm tippen, wird die Umgebungsanzeige angezeigt Wählen Sie diese Option, um die Umgebungsanzeige anzuzeigen [Wenn das Display immer eingeschaltet ist, ist es ausgeschaltet] Wenn Sie das Telefon in die Hand nehmen, wird die Umgebungsanzeige angezeigt - Force AOD while charging - Keep always on display enabled while device is charging + AOD während des Ladens erzwingen + AOD während des Ladevorgangs aktiviert lassen Während der Bildschirm aus ist… Benutzerdefiniertes Symbolthema Benutzerdefinierte Symbole deaktiviert @@ -286,35 +291,35 @@ Lautstärke lange drücken um Titel zu überspringen* Benachrichtigungseinstellungen Alle ausklappen/einklappen aktivieren - Never dismiss ongoing notifications + Laufende Benachrichtigungen niemals ablehnen Dauer der Heads-up-Benachrichtigung - Notification default expansion - Always expand - Always collapse + Standard Benachrichtigungs-Erweiterung + Immer erweitern + Immer einklappen Deaktiviere elastischen Überscrolling Effekt Wichtig: Sie MÜSSEN die Apps, für die Sie Overscroll deaktivieren möchten, in LSPosed aktivieren Millisekunden - Hours - System time - Use NTP to sync time - Time synchronization interval - NTP servers - Use semicolon to separate multiple servers - Sync now - Time synced successfully - NTP server connection error! + Stunden + Systemzeit + NTP zum Synchronisieren der Zeit verwenden + Zeitsynchronisierungsintervall + NTP-Server + Verwenden Sie Semikola, um mehrere Server zu trennen + Jetzt synchronisieren + Zeit erfolgreich synchronisiert + NTP-Server-Verbindungsfehler! - Volume panel - Volume dialog timeout + Lautstärkefeld + Anzeigedauer des Lautstärkefeldes Arbeits-/Klonprofil Drücken Sie lange auf die Statusleiste, um das Profil zu wechseln Zeigt ein Symbol in der Statusleiste an, wenn ein Wechsel möglich ist - Unlocked for all apps via Pixel Xpert: Enjoy! + Über Pixel Xpert für alle Apps entsperrt! - Battery info… - Error fetching charging data + Akkuinfo… + Fehler beim Abrufen der Ladeinformationen Vibrieren bei angenommenem abgehenden Anruf Vibrieren, wenn Anruf getrennt wird @@ -442,18 +447,18 @@ Paket erfolgreich aktiviert Die Paketaktivierung ist fehlgeschlagen In LSPosed aktivieren - Package is not launch-able - Launch app - Restart app + Paket kann nicht gestartet werden + App öffnen + App neu starten Root-Berechtigungen prüfen… Verbindung zum Root-Dienst herstellen… Root-Zugriff verweigert. Bitte erlauben Sie Root-Zugriff. - Unable to connect to root services. Please try again later + Keine Verbindung zu Root-Diensten möglich. Bitte versuchen Sie es später erneut Ausfahrt - Home + Startseite Update Hooks - Settings + Einstellungen diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index 966b3ab58..44f5460df 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -57,6 +57,9 @@ Αφαιρέστε τον κύκλο φόντου από το δακτυλικό αποτύπωμα κάτω από την οθόνη Το εικονίδιο του κύκλου γύρω από το δακτυλικό αποτύπωμα είναι ενεργό Το εικονίδιο του κύκλου γύρω από το δακτυλικό αποτύπωμα θα είναι κρυφό + Remove foreground icon from under-display fingerprint + Fingerprint icon is active + Fingerprint icon will be hidden Προσαρμοσμένο κείμενο στην οθόνη κλειδώματος Διαμόρφωση κειμένου φορέα - Επάνω μέρος της οθόνης Το κείμενο της εταιρείας κινητής τηλεφωνίας δεν άλλαξε @@ -161,12 +164,14 @@ Πάχος ράβδου Υποδείξτε τη φόρτιση Υποδεικνύει γρήγορη φόρτιση + Indicate power save Εύρος επιπέδου προειδοποίησης Ορίστε και τα δύο στο 0 για να απενεργοποιήσετε τα χρώματα που βασίζονται σε επίπεδο Χρώμα κρίσιμου επιπέδου Χρώμα επιπέδου προειδοποίησης Χρώμα φόρτισης Χρώμα γρήγορης φόρτισης + Power Save color Σκιάστε τα χρώματα μεταξύ αυτού του εύρους Colored battery percentage while charging Σήμερα diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 46c5ad9c4..3f3888206 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -57,6 +57,9 @@ Ocultar círculo del icono de la huella digital El círculo se activará El círculo se ocultará + Ocultar círculo del icono de la huella digital + El icono de huella dactilar está activo + El icono de huella dactilar se ocultará Texto personalizado en la pantalla de bloqueo Personalizar texto del operador Texto por defecto @@ -161,12 +164,14 @@ Grosor de barra Indicador de carga Indicar carga rápida + Indique ahorro de energía Valor del nivel critico de batería Poner los dos a 0 para deshabilitar los colores de nivel de batería Color de nivel de bateria critíco Aviso de nivel de batería Color de carga Color de carga rápida + Color de ahorro de energía Sombrear colores en transito de cambio Colored battery percentage while charging Hoy diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml index 19cc5661d..02984b247 100644 --- a/app/src/main/res/values-fa-rIR/strings.xml +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -57,6 +57,9 @@ پنهان کردن دایره اثر انگشت زیر نمایشگر دایره اطراف نماد اثر انگشت فعال است دایره اطراف نماد اثر انگشت پنهان شد + Remove foreground icon from under-display fingerprint + Fingerprint icon is active + Fingerprint icon will be hidden متن دلخواه در صفحه قفل متن دلخواه نام اپراتور (بالای صفحه) نام اپراتور بدون تغییر @@ -161,12 +164,14 @@ ضخامت نمایش شارژ شدن نمایش شارژ سریع + Indicate power save محدوده هشدار برای غیرفعال کردن رنگ‌ها، هر دو را روی 0 تنظیم کنید رنگ سطح بحرانی رنگ سطح هشدار رنگ شارژ رنگ شارژ سریع + Power Save color تنظیم رنگ بر اساس سطح باتری Colored battery percentage while charging امروز diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index df7f6f847..3a12e9171 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -57,6 +57,9 @@ Poista taustaympyrä näytön alta sormenjäljestä Sormenjälkikuvakkeen ympärillä oleva ympyrä on aktiivinen Sormenjälkikuvakkeen ympärillä oleva ympyrä piilotetaan + Remove foreground icon from under-display fingerprint + Fingerprint icon is active + Fingerprint icon will be hidden Mukautettu teksti lukitusnäytöllä Määritä operaattorin teksti - näytön yläreuna Operaattorin teksti ennallaan @@ -161,12 +164,14 @@ Tangon paksuus Ilmoita lataus Ilmoita pikalatauksesta + Indicate power save Varoitustasoalue Aseta molemmat arvoksi 0, jos haluat poistaa tasopohjaiset värit käytöstä Kriittisen tason väri Varoitustason väri Latauksen väri Nopeasti latautuva väri + Power Save color Varjostaa värejä tämän alueen välillä Colored battery percentage while charging Tänään diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index bf4f5b33a..dab36a220 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -57,6 +57,9 @@ Retirer le disque autour du détecteur d’empreintes Le disque autour du détecteur d’empreintes est visible Le disque autour du détecteur d’empreintes est caché + Remove foreground icon from under-display fingerprint + Fingerprint icon is active + Fingerprint icon will be hidden Texte personnalisé sur l’écran de verrouillage Personnaliser le texte du fournisseur réseau - haut de l’écran Texte du fournisseur inchangé @@ -161,12 +164,14 @@ Épaisseur de la barre Montrer que l’appareil charge Montrer que l’appareil est en charge rapide + Indicate power save Intervalle du niveau d’alerte Mettre tout à 0 pour désactiver les couleurs par niveaux Couleur du niveau critique Couleur du niveau d’alerte Couleur de charge Couleur de charge rapide + Power Save color Nuancer les couleurs dans cet intervalle Pourcentage de batterie coloré pendant la charge Aujourd\'hui diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index aab2e22ce..bd248376e 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -57,6 +57,9 @@ फ़िंगरप्रिंट आइकन के चारों ओर वृत्त छिपाएँ फ़िंगरप्रिंट आइकन के चारों ओर सर्कल दिखाई देगा फ़िंगरप्रिंट आइकन के चारों ओर वृत्त छिपा हुआ है + Remove foreground icon from under-display fingerprint + Fingerprint icon is active + Fingerprint icon will be hidden लॉक स्क्रीन पर कस्टम टेक्स्ट ऑपरेटर टेक्स्ट कॉन्फ़िगर करें ऑपरेटर टेक्स्ट अपरिवर्तित @@ -161,12 +164,14 @@ बार की मोटाई चार्जिंग इंडिकेटर तेज़ चार्जिंग संकेतक + Indicate power save बैटरी स्तर की चेतावनी स्तर आधारित रंगों को अक्षम करने के लिए दोनों को 0 पर सेट करें बैटरी क्रिटिकल कलर बैटरी चेतावनी रंग चार्जिंग कलर तेजी से चार्ज होने वाला रंग + Power Save color क्षेत्रों के बीच रंगों को छायांकित करना Colored battery percentage while charging आज diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index d37cb4622..a24370345 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -57,6 +57,9 @@ Távolítsa el a háttérkört a kijelző alatti ujjlenyomatból Az ujjlenyomat ikon körüli kör aktív Az ujjlenyomat ikon körüli kör el lesz rejtve + Távolítsa el a háttérkört a kijelző alatti ujjlenyomatból + Ujjlenyomat ikon aktív + Ujjlenyomat ikon el lesz rejtve Egyéni szöveg a lezárási képernyőn Szolgáltatói szöveg konfigurálása – a képernyő tetején A szolgáltató szövege változatlan @@ -161,12 +164,14 @@ A sor vastagsága Töltés jelzése Gyorstöltés kijelzése + Indicate power save Figyelmeztetési szint tartomány Állítsa mindkettőt 0-ra a szintalapú színek letiltásához Kritikus szintű szín Figyelmeztető szint színe Töltő szín Gyors töltés szín + Power Save color Árnyékolja a színeket e tartomány között Színes akkumulátor ikon töltés során Ma diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index 18eed115a..48a4bcd17 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -57,6 +57,9 @@ Rimuovi il background dall\'icona del sensore d\'impronte sotto il display Background icona sensore d\'impronte attivo Background icona sensore d\'impronte disattivo + Rimuove l\'icona di primo piano dall\'impronta digitale sotto al display + L\'icona dell\'impronta digitale è attiva + L\'icona dell\'impronta digitale sarà nascosta Testo personalizzato su blocco schermo Configura testo operatore - Parte superiore dello schermo Testo operatore invariato @@ -161,12 +164,14 @@ Spessore barra Indica ricarica Indica ricarica rapida + Indicare risparmio energetico Range livello allerta Imposta entrambi a 0 per disabilitare i colori in base al livello Colore livello critico Colore livello allerta Colore ricarica Colore ricarica rapida + Colore risparmio energetico Sfuma i colori tra questo range Percentuale della batteria colorata durante la ricarica Oggi diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index d7890ef3a..f029192d6 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -57,6 +57,9 @@ הסר את עיגול הרקע מטביעת האצבע מתחת לתצוגה מעגל סביב סמל טביעת האצבע פעיל מעגל סביב סמל טביעת האצבע יוסתר + Remove foreground icon from under-display fingerprint + Fingerprint icon is active + Fingerprint icon will be hidden טקסט מותאם אישית במסך הנעילה הגדר את הטקסט של הספק - בחלק העליון של המסך טקסט הספק לא השתנה @@ -161,12 +164,14 @@ עובי בר ציין טעינה ציין טעינה מהירה + Indicate power save טווח רמות אזהרה הגדר את שניהם ל-0 כדי להשבית צבעים מבוססי רמות צבע ברמה קריטית צבע רמת אזהרה צבע טעינה צבע טעינה מהירה + Power Save color גוון צבעי בין טווח זה Colored battery percentage while charging היום diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 700fb23f0..2d9d30a4e 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -2,7 +2,7 @@ 代替テーマのアイコン - + Google Pixelのみカスタマイズ可能 メディアボリューム アプリプロファイルを切り替える 隠す (既定) @@ -34,7 +34,7 @@ 電報グループ 使用法 ウィキページを開く - Translate to your language + 翻訳 ロック画面 @@ -57,6 +57,9 @@ ディスプレイ下部の指紋認証の円の表示を削除 指紋認証アイコンを囲む円は表示されています 指紋認証アイコンを囲む円は非表示です + Remove foreground icon from under-display fingerprint + Fingerprint icon is active + Fingerprint icon will be hidden ロック画面に変更をしたテキストを表示します キャリアテキストの設定 - 画面上部 キャリアテキスト変更は無効です @@ -81,7 +84,7 @@ ロック解除を即座に実行 (PIN/パスワード) 最初に適用がされなかった場合は再度行なってみてください ロック画面に充電の詳細情報を表示 - Don\'t show \"Customize Lock Screen\" pill + 「ロック画面のカスタマイズ」を非表示 帝国単位を使用する ダブルタップでスリープ @@ -161,14 +164,16 @@ バーの太さ 充電中である事を表示 急速充電の表示 + Indicate power save 警告レベルの範囲 両方とも0にするとレベルの設定が無効になります 致命的レベルの色 警告レベルの色 充電中の色 急速充電の色 + Power Save color この範囲内のシェード色 - Colored battery percentage while charging + 充電中の残量に応じて電池残量(%)に色を付ける 今日 今週 今月 @@ -196,13 +201,13 @@ ステータスバーからクイック設定をプルダウン クイックプルダウンの側面 クイック設定のプルダウン - Close quick settings with one swipe + 一回のスワイプでクイック設定を閉じる クイック設定のタイルをタップで振動 システムのタッチ振動設定によって定義される強度 縦方向時 横方向時 - Miscellaneous - Show charging info on QS panel + その他 + クイック設定に充電の詳細を表示 クイック設定の列数 クイック設定のカラム数 クイック設定の最大タイル数 (最大2列) @@ -258,11 +263,11 @@ Will also ignore manual rotation floating button Ignore the camera cutout Add an accessible clear-all button to recents page - Auto-generate missing themed icons (Pixel launcher only) + 非対応のテーマアイコンを自動生成(Pixel Launcherのみ) テーマアイコンの適用を再度有効化します ボリュームステップ (0から100%) - Modify display resolution - Before enabling this, make sure to reset all display size/dpi changes to default + ディスプレイの解像度を変更 + これを有効にする前に、すべての表示サイズ/dpiの変更をデフォルトに設定してください 画面の解像度 ディスプレイの明るさ制限 This range is NOT linear: Sometimes a small difference leads to considerable changes @@ -277,8 +282,8 @@ 【常時表示オフ時】 画面をタップするとアンビエント表示になります 選択してアンビエント表示を表示します 【常時表示オフ時】受話器を取るとアンビエント表示が表示されます - Force AOD while charging - Keep always on display enabled while device is charging + 強制的にAODを使用 + 充電中は常に画面をオンにする While screen is off… カスタムテーマアイコン カスタムアイコン無効 @@ -286,35 +291,35 @@ 音量ボタン長押しで曲をスキップ 通知のオプション Add expand/collapse all buttons - Never dismiss ongoing notifications + 進行中の通知を削除しない Heads-up notification duration - Notification default expansion - Always expand - Always collapse + 通知のデフォルト展開 + 常に展開 + 常に折りたたむ オーバースクロール効果を無効化 重要事項: LSPosedでオーバースクロールを無効化するアプリをスコープに追加をする必要があります ミリ秒 - Hours - System time - Use NTP to sync time - Time synchronization interval - NTP servers - Use semicolon to separate multiple servers - Sync now - Time synced successfully - NTP server connection error! + 時間 + システム時刻 + NTPを使って時刻を同期する + 時刻同期の間隔 + NTPサーバー + セミコロンを使用して複数のサーバーを使用 + 今すぐ同期 + 時刻の同期が完了しました + NTPサーバーへ接続に失敗 - Volume panel - Volume dialog timeout + 音量パネル + 音量パネルの表示時間 作業/クローンプロファイル ステータスバーを長押ししてプロファイルを切り替えます 切り替えが可能な場合はステータスバーにアイコンを表示します - Unlocked for all apps via Pixel Xpert: Enjoy! + Pixel Xpertにより、全てのアプリでご利用いただけます。 - Battery info… - Error fetching charging data + バッテリー情報 + 充電データの取得に失敗 着信応答時にバイブレーション 通話切断時にバイブレーション @@ -442,18 +447,18 @@ パッケージが正常にアクティブ化されました パッケージのアクティベーションに失敗しました LSPosed でアクティブ化する - Package is not launch-able - Launch app - Restart app + 起動可能パッケージではありません + アプリを起動 + アプリを再起動 root権限の確認… ルートサービス…への接続 ルートアクセスが拒否されました。 root アクセスを許可してください。 - Unable to connect to root services. Please try again later + Rootサービスが利用できません。後でもう一度お試しください。 出口 - Home - Update - Hooks - Settings + ホーム + 更新 + フック + 設定 diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index 0cdbd39ac..613dff52c 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -57,6 +57,9 @@ 화면 내장 지문인식 아이콘 원형 배경 삭제 지문인식 아이콘의 원형 배경이 표시되고 있습니다 지문인식 아이콘의 원형 배경이 숨겨집니다 + Remove foreground icon from under-display fingerprint + Fingerprint icon is active + Fingerprint icon will be hidden 잠금 화면 커스텀 문구 화면 상단 통신사 문구 변경 통신사 문구가 그대로 표시됩니다 @@ -161,12 +164,14 @@ 막대 굵기 충전 상태 표시 고속 충전 표시 + Indicate power save 주의 단계 범위 설정 단계에 따른 막대 색 변화를 비활성화하려면 전부 0으로 설정 치명 단계 색상 주의 단계 색상 충전 표시 색상 고속 충전 표시 색상 + Power Save color 단계 간 색상 부드럽게 전환 Colored battery percentage while charging 오늘 diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index e1df682b6..570d89a26 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -57,6 +57,9 @@ Vingerafdrukcirkel onder het scherm verbergen Cirkel rond vingerafdrukpictogram is actief Cirkel rond vingerafdrukpictogram wordt verborgen + Remove foreground icon from under-display fingerprint + Fingerprint icon is active + Fingerprint icon will be hidden Aangepaste tekst op Lockscreen Dragertekst configureren - Bovenaan het scherm Vervoerder tekst ongewijzigd @@ -161,12 +164,14 @@ Staafdikte Geef opladen aan Geef snel opladen aan + Indicate power save Bereik waarschuwingsniveau Stel beide in op 0 om op niveau gebaseerde kleuren uit te schakelen Kritiek niveau kleur Kleur waarschuwingsniveau Oplaadkleur Snel opladen kleur + Power Save color Schaduwkleuren tussen het bereik Colored battery percentage while charging Vandaag diff --git a/app/src/main/res/values-no-rNO/strings.xml b/app/src/main/res/values-no-rNO/strings.xml index a7cdac95b..42e6a0bc0 100644 --- a/app/src/main/res/values-no-rNO/strings.xml +++ b/app/src/main/res/values-no-rNO/strings.xml @@ -57,6 +57,9 @@ Fjern bakgrunnssirkelen fra fingeravtrykket under skjermen Sirkel rundt fingeravtrykkikonet er aktivt Sirkelen rundt fingeravtrykkikonet skjules + Remove foreground icon from under-display fingerprint + Fingerprint icon is active + Fingerprint icon will be hidden Egendefinert tekst på låseskjerm Konfigurer operatørtekst - Øverst på skjermen Operatørtekst uendret @@ -161,12 +164,14 @@ Bar tykkelse Indiker lading Indikerer hurtiglading + Indicate power save Advarselsnivåområde Sett begge til 0 for å deaktivere nivåbaserte farger Farge på kritisk nivå Farge på varselnivå Ladefarge Hurtigladende farge + Power Save color Skygge farger mellom dette området Colored battery percentage while charging I dag diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index 835f5091a..4a911e69d 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -57,6 +57,9 @@ Usuń okrąg tła z odcisku palca pod wyświetlaczem Okrąg wokół ikony odcisku palca jest aktywny Okrąg wokół ikony odcisku palca zostanie ukryty + Remove foreground icon from under-display fingerprint + Fingerprint icon is active + Fingerprint icon will be hidden Niestandardowy tekst na ekranie blokady Skonfiguruj tekst operatora — góra ekranu Tekst operatora niezmieniony @@ -161,12 +164,14 @@ Grubość pręta Wskaż ładowanie Wskaż szybkie ładowanie + Indicate power save Zakres poziomu ostrzegawczego Ustaw oba na 0, aby wyłączyć kolory oparte na poziomie Kolor poziomu krytycznego Kolor poziomu ostrzeżenia Kolor ładowania Kolor szybkiego ładowania + Power Save color Odcień kolorów między tym zakresem Colored battery percentage while charging Dzisiaj diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index d2226ecaf..ad828598e 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -57,6 +57,9 @@ Esconder círculo no ícone da impressão digital O círculo está ativado O círculo será escondido + Remove foreground icon from under-display fingerprint + Fingerprint icon is active + Fingerprint icon will be hidden Texto personalizado no ecrã de bloqueio Personalizar texto da operadora Texto inalterado @@ -142,7 +145,7 @@ Downlaod + Upload (Combinado) Apenas download Apenas upload - Show in bits/s + Mostrar em bits/s Preferências da barra de estado Ativar ícone de dois tons Ativado (apenas para o ícone em retrato) @@ -161,12 +164,14 @@ Espessura da barra Indicar a carregar Indicar a carregar rápido + Indicar economia de energia Limites para bateria fraca/crítica Defina 0 para ambas de modo a desativar as cores por nível Cor para bateria crítica Cor para bateria fraca Cor ao carregar Cor ao carregar rápido + Cor da economia de energia Cores entre o intervalo Cor da bateria ao carregar Hoje diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 9eae2bf46..40375e240 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -57,6 +57,9 @@ Elimină cercul de fundal a amprentei de sub afișaj Cercul în jurul pictogramei amprentei este activat Cercul din jurul imaginii amprentei va fi ascuns + Elimină pictograma prim-plan a amprentei de sub afișaj + Pictograma amprentei este activă + Pictograma amprentei va fi ascunsă Text personalizat pe Ecranul de blocare Configurarea textului furnizorului - Partea de sus a ecranului Textul furnizorului neschimbat @@ -161,12 +164,14 @@ Grosimea barei Indică încărcarea Indică încărcarea rapidă + Indică economisirea energiei Interval de avertizare Setează ambele la 0 pentru a dezactiva culori bazate pe niveluri Culoare nivel critic Culoare nivel de avertizare Culoare încărcare Culoare de încărcare rapidă + Culoare economisire baterie Nuanță culori între aceste game Procentaj colorat al bateriei în timpul încărcării Astăzi diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index f044913e7..074f41bdc 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -57,6 +57,9 @@ Скрыть фон под индикатором отпечатков пальцев Круг вокруг значка отпечатка пальца активен Круг вокруг значка отпечатка пальца будет скрыт + Remove foreground icon from under-display fingerprint + Fingerprint icon is active + Fingerprint icon will be hidden Свой текст на экран блокировки Настройка своего текста Свой текст не установлен @@ -161,12 +164,14 @@ Толщина строки Индикатор зарядки Индикатор быстрой зарядки + Indicate power save Диапазон уровней предупреждения Установите оба значения в 0, чтобы отключить цвета на основе уровней Цвет критического уровня Цвет уровня предупреждения Цвет зарядки Цвет быстрой зарядки + Power Save color Цвета оттенков между диапазоном Цветной индикатор батареи при зарядке Сегодня diff --git a/app/src/main/res/values-sr-rSP/strings.xml b/app/src/main/res/values-sr-rSP/strings.xml index a8cfeeb58..ad0380f8d 100644 --- a/app/src/main/res/values-sr-rSP/strings.xml +++ b/app/src/main/res/values-sr-rSP/strings.xml @@ -57,6 +57,9 @@ Уклони позадински круг са сензора отиска прста Круг око иконе отиска прста је активан Круг око иконе отиска прста ће бити скривен + Remove foreground icon from under-display fingerprint + Fingerprint icon is active + Fingerprint icon will be hidden Прилагођени текст на закључаном екрану Прилагођени текст оператера Користи се подразумевани текст @@ -161,12 +164,14 @@ Дебљина траке Индикатор пуњења Индикатор брзог пуњења + Indicate power save Опсег за нивое напуњености батерије Поставите обе вредности на нулу да бисте онемогућили боје засноване на нивоу Критични ниво Упозоравајући ниво Боја пуњења Боја за брзо пуњење + Power Save color Нијансе боја између овог опсега Colored battery percentage while charging Данас diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index b62ea04f7..db50119c9 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -57,6 +57,9 @@ Ta bort bakgrundscirkeln från fingeravtrycket under skärmen Cirkel runt fingeravtrycksikonen är aktiv Cirkel runt fingeravtrycksikonen döljs + Remove foreground icon from under-display fingerprint + Fingerprint icon is active + Fingerprint icon will be hidden Anpassad text på låsskärm Konfigurera operatörstext - Överst på skärmen Operatörens text oförändrad @@ -161,12 +164,14 @@ Stångtjocklek Ange laddning Indikerar snabbladdning + Indicate power save Varningsnivåintervall Ställ in båda på 0 för att inaktivera nivåbaserade färger Kritisk nivå färg Färg på varningsnivån Laddningsfärg Snabbladdningsfärg + Power Save color Nyansfärger mellan detta intervall Colored battery percentage while charging I dag diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index eda329f0b..3a8adc791 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -57,6 +57,9 @@ Ekran altı parmak izindeki arka plan çemberini kaldır Parmak izi simgesinin etrafındaki daire etkin Parmak izi simgesinin etrafındaki daire gizli + Ekran altı parmak izindeki arka plan çemberini kaldır + Parmak izi simgesi etkin + Parmak izi simgesi gizlenecek Kilit ekranında özel metin Operatör metnini yapılandır - Ekranın üst kısmı Operatör metni değişmedi @@ -161,12 +164,14 @@ Çubuk kalınlığı Şarjı belirt Hızlı şarjı belirt + Güç tasarrufunu göster Uyarı seviyesi aralığı Seviye tabanlı renkleri devre dışı bırakmak için her ikisini de 0 olarak ayarlayın Kritik seviyesi rengi Uyarı seviyesi rengi Şarj rengi Hızlı şarj rengi + Güç Tasarrufu rengi Bu aralık arasındaki renk tonları Şarj sırasında renkli pil yüzdesi Bugün diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index cecde0039..ce7289c27 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -57,6 +57,9 @@ Сховати коло для відбитка пальця під дисплеєм Коло біля значка відбитка пальця активне Коло біля значка відбитка пальця буде сховано + Remove foreground icon from under-display fingerprint + Fingerprint icon is active + Fingerprint icon will be hidden Користувацький текст на екрані блокування Налаштування тексту носія - Зверху екрана Текст носія не змінено @@ -161,12 +164,14 @@ Товщина рядку Позначати заряджання Позначати швидке заряджання + Indicate power save Діапазон попередження про заряд Встановіть обидва на 0, щоб вимкнути кольори на основі рівнів Колір критичного заряду Колір попередження про заряд Колір заряджання Колір швидкого заряджання + Power Save color Кольори відтінків між діапазоном Кольоровий відсоток заряду батареї під час зарядки Сьогодні diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index 01872e4c9..3f22bc00b 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -57,6 +57,9 @@ Ẩn vòng tròn dấu vân tay dưới màn hình Biểu tượng vòng tròn dấu vân tay đang hoạt động Biểu tượng vòng tròn dấu vân tay sẽ bị ẩn + Xóa biểu tượng nền khỏi dấu vân tay dưới màn hình + Dấu vân tay được kích hoạt + Dấu vân tay sẽ được ẩn Văn bản tùy chỉnh trên Màn hình khóa Định cấu hình văn bản của nhà cung cấp dịch vụ - Đầu màn hình Văn bản của nhà cung cấp dịch vụ chưa thay đổi @@ -161,12 +164,14 @@ Độ dày thanh Cho biết đang sạc Cho biết đang sạc nhanh + Indicate power save Phạm vi mức cảnh báo Đặt cả hai thành 0 để tắt màu dựa trên cấp độ Màu cấp độ nguy cấp Màu cấp độ cảnh báo Màu đang sạc Màu đang sạc nhanh + Power Save color Màu bóng đổ trong khoảng này Thêm màu vào phần trăm pin khi đang sạc Hôm nay diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 6788545da..700da4955 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -57,6 +57,9 @@ 隐藏屏下指纹背景 指纹背景启用 指纹背景隐藏 + Remove foreground icon from under-display fingerprint + Fingerprint icon is active + Fingerprint icon will be hidden 自定义锁屏文本 设置运营商文本 未修改运营商文本 @@ -161,12 +164,14 @@ 厚度 充电显示 快充显示 + Indicate power save 电量警告 均设为 0 将禁用基于电量的颜色变化 临界值颜色 警告颜色 充电颜色 快充颜色 + Power Save color 颜色渐变 充电时彩色电池百分比 今天 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 3c0cf9bbc..0df50dc78 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -57,6 +57,9 @@ 隱藏螢幕下指紋背景圓 指紋圖示背景被啟用 指紋圖示背景被隱藏 + Remove foreground icon from under-display fingerprint + Fingerprint icon is active + Fingerprint icon will be hidden 自訂鎖定畫面文本顯示 設定電信商名稱 未修改電信商名稱 @@ -161,12 +164,14 @@ 粗細度 充電顯示 快充顯示 + Indicate power save 電量警告 均設為 0 將禁用基於電量的顏色變化 臨界值顏色 警告顏色 充電顏色 快充顏色 + Power Save color 陰影漸變 Colored battery percentage while charging Today From 8ca1efff46b25959dac5ccd39db2deecdf7e5d46 Mon Sep 17 00:00:00 2001 From: Siavash Date: Thu, 11 Apr 2024 15:49:00 +0330 Subject: [PATCH 041/162] CHANGELOG: Added option to enable depth effect on lockscreen wallpaper --- app/build.gradle | 7 +- .../siava/pixelxpert/IRootProviderProxy.aidl | 1 + .../siava/pixelxpert/modpacks/Constants.java | 7 + .../modpacks/systemui/KeyguardMods.java | 194 +++++++++++++++++- .../utils/BitmapSubjectSegmenter.java | 56 +++++ .../pixelxpert/service/RootProviderProxy.java | 36 ++++ 6 files changed, 293 insertions(+), 8 deletions(-) create mode 100644 app/src/main/java/sh/siava/pixelxpert/modpacks/utils/BitmapSubjectSegmenter.java diff --git a/app/build.gradle b/app/build.gradle index 39ddf95fa..dd2c9f343 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -90,8 +90,8 @@ dependencies { implementation 'androidx.annotation:annotation:1.7.1' implementation 'androidx.preference:preference-ktx:1.2.1' implementation 'androidx.recyclerview:recyclerview:1.3.2' - implementation 'com.google.android.material:material:1.12.0-alpha03' - implementation 'androidx.compose.ui:ui-geometry:1.6.1' + implementation 'com.google.android.material:material:1.12.0-rc01' + implementation 'androidx.compose.ui:ui-geometry:1.6.5' //noinspection KtxExtensionAvailable implementation 'androidx.activity:activity:1.8.2' implementation 'androidx.work:work-runtime:2.9.0' @@ -125,4 +125,7 @@ dependencies { //NTP Client implementation "com.lyft.kronos:kronos-android:0.0.1-alpha11" + + //Google Subject Segmentation - MLKit + implementation 'com.google.android.gms:play-services-mlkit-subject-segmentation:16.0.0-beta1' } \ No newline at end of file diff --git a/app/src/main/aidl/sh/siava/pixelxpert/IRootProviderProxy.aidl b/app/src/main/aidl/sh/siava/pixelxpert/IRootProviderProxy.aidl index d1d40e46b..4f87ac7d3 100644 --- a/app/src/main/aidl/sh/siava/pixelxpert/IRootProviderProxy.aidl +++ b/app/src/main/aidl/sh/siava/pixelxpert/IRootProviderProxy.aidl @@ -9,4 +9,5 @@ interface IRootProviderProxy { * and return values in AIDL. */ String[] runCommand(String command); + void extractSubject(in Bitmap input, String resultPath); } \ No newline at end of file diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/Constants.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/Constants.java index 54ee1f7b0..0e38af0b0 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/Constants.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/Constants.java @@ -2,6 +2,8 @@ import static sh.siava.pixelxpert.BuildConfig.APPLICATION_ID; +import android.content.Context; + import java.util.Arrays; import java.util.List; @@ -30,4 +32,9 @@ public final class Constants { public static final String DIALER_PACKAGE = "com.google.android.dialer"; public static final List PREF_UPDATE_EXCLUSIONS = Arrays.asList(BootLoopProtector.LOAD_TIME_KEY_KEY, BootLoopProtector.PACKAGE_STRIKE_KEY_KEY); + + public static String getLockScreenCachePath(Context context) + { + return context.getCacheDir().getAbsolutePath() + "/lswt.png"; + } } diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/KeyguardMods.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/KeyguardMods.java index bcdd16490..9b11561f3 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/KeyguardMods.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/KeyguardMods.java @@ -8,6 +8,7 @@ import static de.robv.android.xposed.XposedHelpers.findClass; import static de.robv.android.xposed.XposedHelpers.findClassIfExists; import static de.robv.android.xposed.XposedHelpers.getBooleanField; +import static de.robv.android.xposed.XposedHelpers.getFloatField; import static de.robv.android.xposed.XposedHelpers.getObjectField; import static de.robv.android.xposed.XposedHelpers.setObjectField; import static sh.siava.pixelxpert.modpacks.XPrefs.Xprefs; @@ -19,18 +20,31 @@ import android.content.Context; import android.content.res.ColorStateList; import android.content.res.Resources; +import android.graphics.Bitmap; import android.graphics.Color; +import android.graphics.Rect; +import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; +import android.graphics.drawable.LayerDrawable; import android.os.Build; +import android.os.Handler; +import android.os.Looper; import android.util.TypedValue; +import android.view.PixelCopy; +import android.view.SurfaceHolder; import android.view.View; import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import androidx.core.content.res.ResourcesCompat; +import java.io.File; +import java.io.FileInputStream; + import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.callbacks.XC_LoadPackage; import sh.siava.pixelxpert.R; @@ -111,6 +125,14 @@ public class KeyguardMods extends XposedModPack { private Object KeyguardIndicationController; //endregion + private static boolean lockScreenSubjectCacheValid = false; + private FrameLayout mLockScreenSubject; + private Object mQS; + private Object mScrimController; + + private static boolean DWallpaperEnabled = false; + private static int DWOpacity = 192; + private Drawable mDimmingOverlay; public KeyguardMods(Context context) { super(context); @@ -143,6 +165,9 @@ public void updatePrefs(String... Key) { transparentBGcolor = Xprefs.getBoolean("KeyguardBottomButtonsTransparent", false); + DWallpaperEnabled = Xprefs.getBoolean("DWallpaperEnabled", false); + DWOpacity = Xprefs.getInt("DWOpacity", 192); + if (Key.length > 0) { switch (Key[0]) { @@ -188,13 +213,103 @@ public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Th Class FooterActionsInteractorImplClass = findClass("com.android.systemui.qs.footer.domain.interactor.FooterActionsInteractorImpl", lpparam.classLoader); Class CommandQueueClass = findClass("com.android.systemui.statusbar.CommandQueue", lpparam.classLoader); Class AmbientDisplayConfigurationClass = findClass("android.hardware.display.AmbientDisplayConfiguration", lpparam.classLoader); - + Class QSImplClass = findClass("com.android.systemui.qs.QSImpl", lpparam.classLoader); + Class CanvasEngineClass = findClass("com.android.systemui.wallpapers.ImageWallpaper$CanvasEngine", lpparam.classLoader); Class AssistManagerClass = findClassIfExists("com.android.systemui.assist.AssistManager", lpparam.classLoader); if(AssistManagerClass == null) { AssistManagerClass = findClass("com.google.android.systemui.assist.AssistManagerGoogle", lpparam.classLoader); } + hookAllMethods(CentralSurfacesImplClass, "start", new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + if(!DWallpaperEnabled) return; + + View scrimBehind = (View) getObjectField(mScrimController, "mScrimBehind"); + ViewGroup rootView = (ViewGroup) scrimBehind.getParent(); + + @SuppressLint("DiscouragedApi") + ViewGroup targetView = rootView.findViewById(mContext.getResources().getIdentifier("notification_container_parent", "id", mContext.getPackageName())); + + mLockScreenSubject = new FrameLayout(mContext); + FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(-1, -1); + mLockScreenSubject.setLayoutParams(lp); + + targetView.addView(mLockScreenSubject,1); + } + }); + hookAllConstructors(QSImplClass, new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + mQS = param.thisObject; + } + }); + + + hookAllMethods(CanvasEngineClass, "drawFrameOnCanvas", new XC_MethodHook() { + @SuppressLint("NewApi") + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + if(!DWallpaperEnabled + || + ((int) callMethod(param.thisObject, "getWallpaperFlags") + & WallpaperManager.FLAG_LOCK) + != WallpaperManager.FLAG_LOCK) + { + return; //It's home screen wallpaper + } + + invalidateLSWSC(); + + SurfaceHolder wallpaperSurfaceHolder = (SurfaceHolder) getObjectField(param.thisObject, "mSurfaceHolder"); + + Rect surfaceBounds = wallpaperSurfaceHolder.getSurfaceFrame(); + + Bitmap wallpaperBitmap = Bitmap.createBitmap(surfaceBounds.width(), surfaceBounds.height(), Bitmap.Config.ARGB_8888); + + PixelCopy.request(wallpaperSurfaceHolder.getSurface(), wallpaperBitmap, copyResult -> { //stealing it from the actual screen + try { + Rect displayBounds = ((Context) callMethod(param.thisObject, "getDisplayContext")).getSystemService(WindowManager.class) + .getCurrentWindowMetrics() + .getBounds(); + + Bitmap resizedWallpaper = resizeAndCrop(wallpaperBitmap, displayBounds); + wallpaperBitmap.recycle(); + XPLauncher.enqueueProxyCommand(proxy -> { + proxy.extractSubject(resizedWallpaper, Constants.getLockScreenCachePath(mContext)); + resizedWallpaper.recycle(); + }); + } + catch (Throwable ignored) + {} + }, new Handler(Looper.myLooper())); + } + }); + + hookAllConstructors(ScrimControllerClass, new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + mScrimController = param.thisObject; + } + }); + hookAllMethods(ScrimControllerClass, "applyAndDispatchState", new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + setDepthWallpaper(); + } + }); + + hookAllMethods(QSImplClass, "setQsExpansion", new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + if((boolean) callMethod(param.thisObject, "isKeyguardState")) + { + setDepthWallpaper(); + } + } + }); + hookAllMethods(AmbientDisplayConfigurationClass, "alwaysOnEnabled", new XC_MethodHook() { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { @@ -460,7 +575,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { } private void setLongPress(ImageView button, String type) { - if(type.length() == 0) + if(type.isEmpty()) { button.setLongClickable(false); return; @@ -483,7 +598,7 @@ private void setShortcutVisibility() { Resources res = mContext.getResources(); - if(leftShortcutClick.length() > 0) { + if(!leftShortcutClick.isEmpty()) { ((View) KeyguardBottomAreaView) .findViewById(res.getIdentifier("start_button", "id", @@ -491,7 +606,7 @@ private void setShortcutVisibility() { .setVisibility(visibility); } - if(rightShortcutClick.length() > 0) { + if(!rightShortcutClick.isEmpty()) { ((View) KeyguardBottomAreaView) .findViewById(res.getIdentifier("end_button", "id", @@ -502,7 +617,7 @@ private void setShortcutVisibility() { @SuppressLint("DiscouragedApi") private void convertShortcut(ImageView button, String type) { - if(type.length() == 0) return; + if(type.isEmpty()) return; Resources res = mContext.getResources(); @@ -590,6 +705,43 @@ private void launchAssistant() { callMethod(mAssistUtils, "launchVoiceAssistFromKeyguard"); } + private void setDepthWallpaper() + { + if(DWallpaperEnabled + && getObjectField(mScrimController, "mState").toString().equals("KEYGUARD") + && (boolean) callMethod(mQS, "isFullyCollapsed")) { + + if(!lockScreenSubjectCacheValid && new File(Constants.getLockScreenCachePath(mContext)).exists()) + { + try (FileInputStream inputStream = new FileInputStream(Constants.getLockScreenCachePath(mContext))) + { + Drawable bitmapDrawable = BitmapDrawable.createFromStream(inputStream, ""); + bitmapDrawable.setAlpha(255); + + mDimmingOverlay = bitmapDrawable.getConstantState().newDrawable().mutate(); + mDimmingOverlay.setTint(Color.BLACK); + + mLockScreenSubject.setBackground(new LayerDrawable(new Drawable[]{bitmapDrawable, mDimmingOverlay})); + lockScreenSubjectCacheValid = true; + } + catch (Throwable ignored) {} + } + + if(lockScreenSubjectCacheValid) { + mLockScreenSubject.getBackground().setAlpha(DWOpacity); + + //this is the dimmed wallpaper coverage + mDimmingOverlay.setAlpha(Math.round(getFloatField(mScrimController, "mScrimBehindAlphaKeyguard")*240)); //A tad bit lower than max. show it a bit lighter than other stuff + + mLockScreenSubject.setVisibility(VISIBLE); + } + } + else + { + mLockScreenSubject.setVisibility(GONE); + } + } + private void launchTVRemote() { XPLauncher.enqueueProxyCommand(proxy -> { try { @@ -631,7 +783,7 @@ private void setMiddleText() { if (KGCS == null) return; mStatusArea.post(() -> { - if (KGMiddleCustomText.length() == 0) { + if (KGMiddleCustomText.isEmpty()) { mStatusArea.removeView(KGMiddleCustomTextView); } else { try { @@ -648,6 +800,36 @@ private void setMiddleText() { }); } + private Bitmap resizeAndCrop(Bitmap wallpaperBitmap, Rect displayBounds) { + int desiredHeight = wallpaperBitmap.getHeight() > wallpaperBitmap.getWidth() + ? displayBounds.height() + : Math.round(wallpaperBitmap.getHeight() * (displayBounds.width() * 1f / wallpaperBitmap.getWidth())); + + int desiredWidth = wallpaperBitmap.getWidth() > wallpaperBitmap.getHeight() + ? displayBounds.width() + : Math.round(wallpaperBitmap.getWidth() * (displayBounds.height() * 1f / wallpaperBitmap.getHeight())); + + Bitmap scaledWallpaperBitmap = Bitmap.createScaledBitmap(wallpaperBitmap, desiredWidth, desiredHeight, true); + + int xPixelShift = (desiredWidth - displayBounds.width()) / 2; + int yPixelShift = (desiredHeight - displayBounds.height()) / 2; + + //crop to display bounds + scaledWallpaperBitmap = Bitmap.createBitmap(scaledWallpaperBitmap, xPixelShift, yPixelShift, displayBounds.width(), displayBounds.height()); + return scaledWallpaperBitmap; + } + + private void invalidateLSWSC() //invalidate lock screen wallpaper subject cache + { + lockScreenSubjectCacheValid = false; + instance.mLockScreenSubject.post(() -> instance.mLockScreenSubject.setVisibility(GONE)); + try { + //noinspection ResultOfMethodCallIgnored + new File(Constants.getLockScreenCachePath(mContext)).delete(); + } + catch (Throwable ignored){} + } + public static String getPowerIndicationString() { try { diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/BitmapSubjectSegmenter.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/BitmapSubjectSegmenter.java new file mode 100644 index 000000000..cda2e57a7 --- /dev/null +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/BitmapSubjectSegmenter.java @@ -0,0 +1,56 @@ +package sh.siava.pixelxpert.modpacks.utils; + +import android.graphics.Bitmap; +import android.graphics.Color; + +import com.google.mlkit.vision.common.InputImage; +import com.google.mlkit.vision.segmentation.subject.SubjectSegmentation; +import com.google.mlkit.vision.segmentation.subject.SubjectSegmenter; +import com.google.mlkit.vision.segmentation.subject.SubjectSegmenterOptions; + +import java.nio.FloatBuffer; + +public class BitmapSubjectSegmenter { + SubjectSegmenter mSegmenter; + public BitmapSubjectSegmenter() + { + mSegmenter = SubjectSegmentation.getClient( + new SubjectSegmenterOptions.Builder() + .enableForegroundConfidenceMask() + .build()); + } + + public void segmentSubject(Bitmap inputBitmap, SegmentResultListener listener) + { + int transparentColor = Color.alpha(Color.TRANSPARENT); + + Bitmap resultBitmap = inputBitmap.copy(Bitmap.Config.ARGB_8888, true); + + mSegmenter.process(InputImage.fromBitmap(inputBitmap, 0)) + .addOnSuccessListener(subjectSegmentationResult -> { + FloatBuffer mSubjectMask = subjectSegmentationResult.getForegroundConfidenceMask(); + + resultBitmap.setHasAlpha(true); + for(int y = 0; y < inputBitmap.getHeight(); y++) + { + for(int x = 0; x < inputBitmap.getWidth(); x++) + { + //noinspection DataFlowIssue + if(mSubjectMask.get() < .5f) + { + resultBitmap.setPixel(x, y, transparentColor); + } + } + } + + listener.onSuccess(resultBitmap); + }) + .addOnFailureListener(e -> listener.onFail()); + + } + + public interface SegmentResultListener{ + void onSuccess(Bitmap result); + void onFail(); + } +} \ No newline at end of file diff --git a/app/src/main/java/sh/siava/pixelxpert/service/RootProviderProxy.java b/app/src/main/java/sh/siava/pixelxpert/service/RootProviderProxy.java index 1b175e003..6a7ffdfc5 100644 --- a/app/src/main/java/sh/siava/pixelxpert/service/RootProviderProxy.java +++ b/app/src/main/java/sh/siava/pixelxpert/service/RootProviderProxy.java @@ -3,6 +3,7 @@ import android.app.Service; import android.content.Context; import android.content.Intent; +import android.graphics.Bitmap; import android.os.Binder; import android.os.IBinder; import android.os.RemoteException; @@ -11,11 +12,14 @@ import com.topjohnwu.superuser.Shell; +import java.io.File; +import java.io.FileOutputStream; import java.util.Arrays; import java.util.List; import sh.siava.pixelxpert.IRootProviderProxy; import sh.siava.pixelxpert.R; +import sh.siava.pixelxpert.modpacks.utils.BitmapSubjectSegmenter; public class RootProviderProxy extends Service { @Nullable @@ -34,6 +38,10 @@ class RootPoviderProxyIPC extends IRootProviderProxy.Stub private RootPoviderProxyIPC(Context context) { + try { + Shell.setDefaultBuilder(Shell.Builder.create().setFlags(Shell.FLAG_MOUNT_MASTER)); + } + catch (Throwable ignored){} rootGranted = Shell.getShell().isRoot(); rootAllowedPacks = Arrays.asList(context.getResources().getStringArray(R.array.root_requirement)); @@ -54,6 +62,34 @@ public String[] runCommand(String command) throws RemoteException { } } + @Override + public void extractSubject(Bitmap input, String resultPath) throws RemoteException { + ensureEnvironment(); + + try { + new BitmapSubjectSegmenter().segmentSubject(input, new BitmapSubjectSegmenter.SegmentResultListener() { + @Override + public void onSuccess(Bitmap result) { + try { + File tempFile = File.createTempFile("lswt", ".png"); + + FileOutputStream outputStream = new FileOutputStream(tempFile); + result.compress(Bitmap.CompressFormat.PNG, 100, outputStream); + + outputStream.close(); + result.recycle(); + + Shell.cmd("cp -F " + tempFile.getAbsolutePath() + " " + resultPath).exec(); + Shell.cmd("chmod 644 " + resultPath).exec(); + } catch (Throwable ignored) {} + } + + @Override + public void onFail() {} + }); + } catch (Throwable ignored) {} + } + private void ensureEnvironment() throws RemoteException { if(!rootGranted) { From e5b8f5c1b39af005f90cf2e558a1116c928ab142 Mon Sep 17 00:00:00 2001 From: Siavash Date: Thu, 11 Apr 2024 15:56:24 +0330 Subject: [PATCH 042/162] DW Opacity shall be an slider integer --- .../sh/siava/pixelxpert/modpacks/systemui/KeyguardMods.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/KeyguardMods.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/KeyguardMods.java index 9b11561f3..5a6036678 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/KeyguardMods.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/KeyguardMods.java @@ -165,9 +165,8 @@ public void updatePrefs(String... Key) { transparentBGcolor = Xprefs.getBoolean("KeyguardBottomButtonsTransparent", false); - DWallpaperEnabled = Xprefs.getBoolean("DWallpaperEnabled", false); - DWOpacity = Xprefs.getInt("DWOpacity", 192); - + DWallpaperEnabled = Xprefs.getBoolean("DWallpaperEnabled", true); + DWOpacity = Xprefs.getSliderInt("DWOpacity", 192); if (Key.length > 0) { switch (Key[0]) { From 01e6f7b19b84a307706b334bb60f1778f18027bc Mon Sep 17 00:00:00 2001 From: DrDisagree Date: Thu, 11 Apr 2024 19:21:51 +0600 Subject: [PATCH 043/162] UI: Depth effect on lockscreen wallpaper --- .../ui/activities/SettingsActivity.java | 25 +++++++++++++++++++ .../pixelxpert/utils/PreferenceHelper.java | 4 +++ app/src/main/res/values/strings.xml | 8 ++++++ app/src/main/res/xml/lock_screen_prefs.xml | 17 +++++++++++++ 4 files changed, 54 insertions(+) diff --git a/app/src/main/java/sh/siava/pixelxpert/ui/activities/SettingsActivity.java b/app/src/main/java/sh/siava/pixelxpert/ui/activities/SettingsActivity.java index da55b7336..c1005c3bd 100644 --- a/app/src/main/java/sh/siava/pixelxpert/ui/activities/SettingsActivity.java +++ b/app/src/main/java/sh/siava/pixelxpert/ui/activities/SettingsActivity.java @@ -519,6 +519,31 @@ public String getTitle() { public int getLayoutResource() { return R.xml.lock_screen_prefs; } + + @Override + public void updateScreen(String key) { + super.updateScreen(key); + + if (key == null) return; + + switch (key) { + case "DWallpaperEnabled": + try { + boolean DepthEffectEnabled = mPreferences.getBoolean("DWallpaperEnabled", false); + + if (DepthEffectEnabled) { + new MaterialAlertDialogBuilder(getContext(), R.style.MaterialComponents_MaterialAlertDialog) + .setTitle(R.string.depth_effect_alert_title) + .setMessage(getString(R.string.depth_effect_alert_body, getString(R.string.sysui_restart_needed))) + .setPositiveButton(R.string.depth_effect_ok_btn, (dialog, which) -> dialog.dismiss()) + .setCancelable(false) + .show(); + } + } catch (Exception ignored) { + } + break; + } + } } public static class SBBBFragment extends ControlledPreferenceFragmentCompat { diff --git a/app/src/main/java/sh/siava/pixelxpert/utils/PreferenceHelper.java b/app/src/main/java/sh/siava/pixelxpert/utils/PreferenceHelper.java index 8c67c1657..398c6eb27 100644 --- a/app/src/main/java/sh/siava/pixelxpert/utils/PreferenceHelper.java +++ b/app/src/main/java/sh/siava/pixelxpert/utils/PreferenceHelper.java @@ -60,6 +60,7 @@ public static boolean isVisible(String key) { case "DisableLockScreenPill": case "ForceThemedLauncherIcons": case "DisableOngoingNotifDismiss": + case "DWallpaperEnabled": return Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE; case "enablePowerMenuTheme": @@ -290,6 +291,9 @@ public static boolean isVisible(String key) { case "UpdateWifiOnly": return instance.mPreferences.getBoolean("AutoUpdate", true); + + case "DWOpacity": + return instance.mPreferences.getBoolean("DWallpaperEnabled", false); } return true; } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2bc4ffc73..8ff04e9bf 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -57,6 +57,9 @@ Maximum clients + Depth effect wallpaper + Dynamically integrate wallpaper\'s foreground with the clock + Wallpaper foreground opacity Disable the unlock hint animation Lock screen options Remove user avatar (multi user mode) @@ -442,6 +445,11 @@ App will close now. You can open it again by tapping on the new icon OK + + Attention + Use a suitable lockscreen wallpaper where the foreground elements do not obstruct the entire clock on your lock screen, ensuring both visual appeal and functional clarity on your lock screen.\n\nNote: %s. + OK + A system reboot is required for the settings to apply diff --git a/app/src/main/res/xml/lock_screen_prefs.xml b/app/src/main/res/xml/lock_screen_prefs.xml index 3bfd7e6bf..eb411b004 100644 --- a/app/src/main/res/xml/lock_screen_prefs.xml +++ b/app/src/main/res/xml/lock_screen_prefs.xml @@ -25,6 +25,23 @@ android:title="@string/so_taptaptorch_title" app:iconSpaceReserved="false" /> + + + + Date: Thu, 11 Apr 2024 19:01:11 +0330 Subject: [PATCH 044/162] depth wallpaper final touches --- .github/edit2MakeNewCanary | 2 +- .../sh/siava/pixelxpert/modpacks/systemui/KeyguardMods.java | 6 ++++-- .../sh/siava/pixelxpert/ui/activities/SettingsActivity.java | 4 +--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/edit2MakeNewCanary b/.github/edit2MakeNewCanary index 04ad0604c..65aeddb0b 100644 --- a/.github/edit2MakeNewCanary +++ b/.github/edit2MakeNewCanary @@ -1 +1 @@ -Editing this file will trigger the build script for a new canary.. \ No newline at end of file +Editing this file will trigger the build script for a new canary. \ No newline at end of file diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/KeyguardMods.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/KeyguardMods.java index 5a6036678..6b630b151 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/KeyguardMods.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/KeyguardMods.java @@ -165,7 +165,7 @@ public void updatePrefs(String... Key) { transparentBGcolor = Xprefs.getBoolean("KeyguardBottomButtonsTransparent", false); - DWallpaperEnabled = Xprefs.getBoolean("DWallpaperEnabled", true); + DWallpaperEnabled = Xprefs.getBoolean("DWallpaperEnabled", false); DWOpacity = Xprefs.getSliderInt("DWOpacity", 192); if (Key.length > 0) { @@ -821,7 +821,9 @@ private Bitmap resizeAndCrop(Bitmap wallpaperBitmap, Rect displayBounds) { private void invalidateLSWSC() //invalidate lock screen wallpaper subject cache { lockScreenSubjectCacheValid = false; - instance.mLockScreenSubject.post(() -> instance.mLockScreenSubject.setVisibility(GONE)); + if(mLockScreenSubject != null) { + instance.mLockScreenSubject.post(() -> instance.mLockScreenSubject.setVisibility(GONE)); + } try { //noinspection ResultOfMethodCallIgnored new File(Constants.getLockScreenCachePath(mContext)).delete(); diff --git a/app/src/main/java/sh/siava/pixelxpert/ui/activities/SettingsActivity.java b/app/src/main/java/sh/siava/pixelxpert/ui/activities/SettingsActivity.java index c1005c3bd..5229357f6 100644 --- a/app/src/main/java/sh/siava/pixelxpert/ui/activities/SettingsActivity.java +++ b/app/src/main/java/sh/siava/pixelxpert/ui/activities/SettingsActivity.java @@ -40,12 +40,10 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.topjohnwu.superuser.Shell; -import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; import java.util.Locale; import java.util.Objects; -import java.util.regex.Pattern; import sh.siava.pixelxpert.BuildConfig; import sh.siava.pixelxpert.R; @@ -535,7 +533,7 @@ public void updateScreen(String key) { new MaterialAlertDialogBuilder(getContext(), R.style.MaterialComponents_MaterialAlertDialog) .setTitle(R.string.depth_effect_alert_title) .setMessage(getString(R.string.depth_effect_alert_body, getString(R.string.sysui_restart_needed))) - .setPositiveButton(R.string.depth_effect_ok_btn, (dialog, which) -> dialog.dismiss()) + .setPositiveButton(R.string.depth_effect_ok_btn, (dialog, which) -> AppUtils.Restart("systemui")) .setCancelable(false) .show(); } From 1343a5060925f996e507bd6297e1eb100eb650a1 Mon Sep 17 00:00:00 2001 From: GitHub Date: Thu, 11 Apr 2024 15:34:31 +0000 Subject: [PATCH 045/162] Version update: Release --- CanaryChangelog.md | 3 +++ MagiskModBase/module.prop | 4 ++-- MagiskModuleUpdate_Full.json | 4 ++-- MagiskModuleUpdate_Xposed.json | 4 ++-- app/build.gradle | 4 ++-- latestCanary.json | 4 ++-- 6 files changed, 13 insertions(+), 10 deletions(-) diff --git a/CanaryChangelog.md b/CanaryChangelog.md index 55c0da613..a0f30e102 100644 --- a/CanaryChangelog.md +++ b/CanaryChangelog.md @@ -1,3 +1,6 @@ +**canary-344** +- Added option to enable depth effect on lockscreen wallpaper + **canary-343** - A14ap21: Fixed Easy Unlock - A14ap21: Fixed QS panel mods diff --git a/MagiskModBase/module.prop b/MagiskModBase/module.prop index 823627ea8..3a6d9d483 100644 --- a/MagiskModBase/module.prop +++ b/MagiskModBase/module.prop @@ -1,7 +1,7 @@ id=PixelXpert name=Pixel Xpert -version=canary-343 -versionCode=343 +version=canary-344 +versionCode=344 author=Pixel Xpert Team description=Xposed based module for customizations on Pixel roms. Android 13+ updateJson=https://raw.githubusercontent.com/siavash79/PixelXpert/canary/MagiskModuleUpdate_Xposed.json diff --git a/MagiskModuleUpdate_Full.json b/MagiskModuleUpdate_Full.json index ea3fa03a0..4ba88d5b3 100644 --- a/MagiskModuleUpdate_Full.json +++ b/MagiskModuleUpdate_Full.json @@ -1,6 +1,6 @@ { - "version": "canary-343", - "versionCode": 343, + "version": "canary-344", + "versionCode": 344, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/MagiskModuleUpdate_Xposed.json b/MagiskModuleUpdate_Xposed.json index ea3fa03a0..4ba88d5b3 100644 --- a/MagiskModuleUpdate_Xposed.json +++ b/MagiskModuleUpdate_Xposed.json @@ -1,6 +1,6 @@ { - "version": "canary-343", - "versionCode": 343, + "version": "canary-344", + "versionCode": 344, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index dd2c9f343..5f90d7c6d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "sh.siava.pixelxpert" minSdk 33 targetSdk 34 - versionCode 343 - versionName "canary-343" + versionCode 344 + versionName "canary-344" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/latestCanary.json b/latestCanary.json index bb8950eb9..22c699f6d 100644 --- a/latestCanary.json +++ b/latestCanary.json @@ -1,6 +1,6 @@ { - "version": "canary-343", - "versionCode": 343, + "version": "canary-344", + "versionCode": 344, "zipUrl_Xposed": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "zipUrl_Full": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" From b1e5ecdb4619c0392907186dcdf70327e5b1be1c Mon Sep 17 00:00:00 2001 From: Siavash Date: Fri, 12 Apr 2024 21:40:19 +0330 Subject: [PATCH 046/162] CHANGELOG: Depth wallpaper: bug fixes --- .../siava/pixelxpert/modpacks/ModPacks.java | 2 + .../modpacks/systemui/DepthWallpaper.java | 280 ++++++++++++++++++ .../modpacks/systemui/KeyguardMods.java | 181 +---------- 3 files changed, 283 insertions(+), 180 deletions(-) create mode 100644 app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/ModPacks.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/ModPacks.java index 59b984e58..5999b6f58 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/ModPacks.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/ModPacks.java @@ -28,6 +28,7 @@ import sh.siava.pixelxpert.modpacks.systemui.BatteryDataProvider; import sh.siava.pixelxpert.modpacks.systemui.BatteryStyleManager; import sh.siava.pixelxpert.modpacks.systemui.BrightnessSlider; +import sh.siava.pixelxpert.modpacks.systemui.DepthWallpaper; import sh.siava.pixelxpert.modpacks.systemui.EasyUnlock; import sh.siava.pixelxpert.modpacks.systemui.FeatureFlagsMods; import sh.siava.pixelxpert.modpacks.systemui.FingerprintWhileDozing; @@ -126,6 +127,7 @@ public static ArrayList> getMods(String packageNa modPacks.add(VolumeTile.class); modPacks.add(ScreenRecord.class); modPacks.add(VolumeDialog.class); + modPacks.add(DepthWallpaper.class); } break; diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java new file mode 100644 index 000000000..0a192af51 --- /dev/null +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java @@ -0,0 +1,280 @@ +package sh.siava.pixelxpert.modpacks.systemui; + +import static android.view.View.GONE; +import static android.view.View.VISIBLE; +import static de.robv.android.xposed.XposedBridge.hookAllConstructors; +import static de.robv.android.xposed.XposedBridge.hookAllMethods; +import static de.robv.android.xposed.XposedHelpers.callMethod; +import static de.robv.android.xposed.XposedHelpers.findClass; +import static de.robv.android.xposed.XposedHelpers.getFloatField; +import static de.robv.android.xposed.XposedHelpers.getObjectField; +import static sh.siava.pixelxpert.modpacks.XPrefs.Xprefs; + +import android.annotation.SuppressLint; +import android.app.WallpaperManager; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Color; +import android.graphics.Rect; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.LayerDrawable; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.FrameLayout; + +import java.io.File; +import java.io.FileInputStream; + +import de.robv.android.xposed.XC_MethodHook; +import de.robv.android.xposed.callbacks.XC_LoadPackage; +import sh.siava.pixelxpert.modpacks.Constants; +import sh.siava.pixelxpert.modpacks.XPLauncher; +import sh.siava.pixelxpert.modpacks.XposedModPack; + +/** @noinspection RedundantThrows*/ +public class DepthWallpaper extends XposedModPack { + private static final String listenPackage = Constants.SYSTEM_UI_PACKAGE; + + private static boolean lockScreenSubjectCacheValid = false; + private FrameLayout mLockScreenSubject; + private Object mQS; + private Object mScrimController; + + private static boolean DWallpaperEnabled = false; + private static int DWOpacity = 192; + private Drawable mDimmingOverlay; + private int mLastXShift = -1, mLastYShift = -1; + private Bitmap mWallpaperBitmap; + + + public DepthWallpaper(Context context) { + super(context); + } + + @Override + public void updatePrefs(String... Key) { + DWallpaperEnabled = Xprefs.getBoolean("DWallpaperEnabled", false); + DWOpacity = Xprefs.getSliderInt("DWOpacity", 192); + } + + @Override + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { + Class QSImplClass = findClass("com.android.systemui.qs.QSImpl", lpparam.classLoader); + Class CanvasEngineClass = findClass("com.android.systemui.wallpapers.ImageWallpaper$CanvasEngine", lpparam.classLoader); + Class CentralSurfacesImplClass = findClass("com.android.systemui.statusbar.phone.CentralSurfacesImpl", lpparam.classLoader); + Class ScrimControllerClass = findClass("com.android.systemui.statusbar.phone.ScrimController", lpparam.classLoader); + + hookAllMethods(CentralSurfacesImplClass, "start", new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + if(!DWallpaperEnabled) return; + + View scrimBehind = (View) getObjectField(mScrimController, "mScrimBehind"); + ViewGroup rootView = (ViewGroup) scrimBehind.getParent(); + + @SuppressLint("DiscouragedApi") + ViewGroup targetView = rootView.findViewById(mContext.getResources().getIdentifier("notification_container_parent", "id", mContext.getPackageName())); + + mLockScreenSubject = new FrameLayout(mContext); + FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(-1, -1); + mLockScreenSubject.setLayoutParams(lp); + + targetView.addView(mLockScreenSubject,1); + } + }); + hookAllConstructors(QSImplClass, new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + mQS = param.thisObject; + } + }); + + hookAllMethods(CanvasEngineClass, "onOffsetsChanged", new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + if(!isLockScreenWallpaper(param.thisObject)) return; + + processPossibleChange(param.thisObject, (float) param.args[0], (float) param.args[1]); + } + }); + + hookAllMethods(CanvasEngineClass, "onSurfaceDestroyed", new XC_MethodHook() { //lockscreen wallpaper changed + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + if(DWallpaperEnabled && isLockScreenWallpaper(param.thisObject)) + { + invalidateLSWSC(); + } + } + }); + + hookAllMethods(CanvasEngineClass, "onCreate", new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + if( + callMethod( + getObjectField(param.thisObject, "mWallpaperManager"), + "getWallpaperInfo", WallpaperManager.FLAG_LOCK) + != null) //it's live wallpaper. we can't use that + { + invalidateLSWSC(); + } + } + }); + hookAllMethods(CanvasEngineClass, "drawFrameOnCanvas", new XC_MethodHook() { + @SuppressLint("NewApi") + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + if(DWallpaperEnabled && isLockScreenWallpaper(param.thisObject)) + { + invalidateLSWSC(); + mWallpaperBitmap = Bitmap.createBitmap((Bitmap) param.args[0]); + } + } + }); + + hookAllConstructors(ScrimControllerClass, new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + mScrimController = param.thisObject; + } + }); + hookAllMethods(ScrimControllerClass, "applyAndDispatchState", new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + setDepthWallpaper(); + } + }); + + hookAllMethods(QSImplClass, "setQsExpansion", new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + if((boolean) callMethod(param.thisObject, "isKeyguardState")) + { + setDepthWallpaper(); + } + } + }); + } + + private boolean isLockScreenWallpaper(Object canvasEngine) + { + return ((int) callMethod(canvasEngine, "getWallpaperFlags") + & WallpaperManager.FLAG_LOCK) + == WallpaperManager.FLAG_LOCK; + } + private void setDepthWallpaper() + { + if(DWallpaperEnabled + && getObjectField(mScrimController, "mState").toString().equals("KEYGUARD") + && (boolean) callMethod(mQS, "isFullyCollapsed")) { + + if(!lockScreenSubjectCacheValid && new File(Constants.getLockScreenCachePath(mContext)).exists()) + { + try (FileInputStream inputStream = new FileInputStream(Constants.getLockScreenCachePath(mContext))) + { + Drawable bitmapDrawable = BitmapDrawable.createFromStream(inputStream, ""); + bitmapDrawable.setAlpha(255); + + mDimmingOverlay = bitmapDrawable.getConstantState().newDrawable().mutate(); + mDimmingOverlay.setTint(Color.BLACK); + + mLockScreenSubject.setBackground(new LayerDrawable(new Drawable[]{bitmapDrawable, mDimmingOverlay})); + lockScreenSubjectCacheValid = true; + } + catch (Throwable ignored) {} + } + + if(lockScreenSubjectCacheValid) { + mLockScreenSubject.getBackground().setAlpha(DWOpacity); + + //this is the dimmed wallpaper coverage + mDimmingOverlay.setAlpha(Math.round(getFloatField(mScrimController, "mScrimBehindAlphaKeyguard")*240)); //A tad bit lower than max. show it a bit lighter than other stuff + + mLockScreenSubject.setVisibility(VISIBLE); + } + } + else + { + mLockScreenSubject.setVisibility(GONE); + } + } + + private void processPossibleChange(Object canvasEngine, float xOff, float yOff) { + if(mWallpaperBitmap == null || mWallpaperBitmap.isRecycled()) return; + + Rect displayBounds = ((Context) callMethod(canvasEngine, "getDisplayContext")).getSystemService(WindowManager.class) + .getCurrentWindowMetrics() + .getBounds(); + + float ratioW = 1f * displayBounds.width() / mWallpaperBitmap.getWidth(); + float ratioH = 1f * displayBounds.height() / mWallpaperBitmap.getHeight(); + + int desiredHeight = Math.round(Math.max(ratioH, ratioW) * mWallpaperBitmap.getHeight()); + int desiredWidth = Math.round(Math.max(ratioH, ratioW) * mWallpaperBitmap.getWidth()); + + int xPixelShift; + int yPixelShift; + + if(getWallpaperFlag(canvasEngine) != WallpaperManager.FLAG_LOCK) + { + xPixelShift = (desiredWidth - displayBounds.width()) / 2; + yPixelShift = (desiredHeight - displayBounds.height()) / 2; + } + else + { + xPixelShift = Math.round(xOff * desiredWidth); + yPixelShift = Math.round(yOff * desiredHeight); + + if(xPixelShift + displayBounds.width() > desiredWidth) + { + xPixelShift = desiredWidth - displayBounds.width(); + } + if (yPixelShift + displayBounds.height() > desiredHeight + ) { + yPixelShift = desiredHeight - displayBounds.height(); + } + } + + if(xPixelShift != mLastXShift || yPixelShift != mLastYShift) { + invalidateLSWSC(); + + mLastXShift = xPixelShift; + mLastYShift = yPixelShift; + + Bitmap scaledWallpaperBitmap = Bitmap.createScaledBitmap(mWallpaperBitmap, desiredWidth, desiredHeight, true); + + //crop to display bounds + scaledWallpaperBitmap = Bitmap.createBitmap(scaledWallpaperBitmap, xPixelShift, yPixelShift, displayBounds.width(), displayBounds.height()); + Bitmap finalScaledWallpaperBitmap = scaledWallpaperBitmap; + XPLauncher.enqueueProxyCommand(proxy -> proxy.extractSubject(finalScaledWallpaperBitmap, Constants.getLockScreenCachePath(mContext))); + } + + } + + private int getWallpaperFlag(Object canvasEngine) { + return (int) callMethod(canvasEngine, "getWallpaperFlags"); + } + + private void invalidateLSWSC() //invalidate lock screen wallpaper subject cache + { + mLastXShift = mLastYShift = -1; + + lockScreenSubjectCacheValid = false; + if(mLockScreenSubject != null) { + mLockScreenSubject.post(() -> mLockScreenSubject.setVisibility(GONE)); + } + try { + //noinspection ResultOfMethodCallIgnored + new File(Constants.getLockScreenCachePath(mContext)).delete(); + } + catch (Throwable ignored){} + } + + @Override + public boolean listensTo(String packageName) { + return listenPackage.equals(packageName) && !XPLauncher.isChildProcess; + } +} diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/KeyguardMods.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/KeyguardMods.java index 6b630b151..d282ee5bf 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/KeyguardMods.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/KeyguardMods.java @@ -8,7 +8,6 @@ import static de.robv.android.xposed.XposedHelpers.findClass; import static de.robv.android.xposed.XposedHelpers.findClassIfExists; import static de.robv.android.xposed.XposedHelpers.getBooleanField; -import static de.robv.android.xposed.XposedHelpers.getFloatField; import static de.robv.android.xposed.XposedHelpers.getObjectField; import static de.robv.android.xposed.XposedHelpers.setObjectField; import static sh.siava.pixelxpert.modpacks.XPrefs.Xprefs; @@ -20,31 +19,18 @@ import android.content.Context; import android.content.res.ColorStateList; import android.content.res.Resources; -import android.graphics.Bitmap; import android.graphics.Color; -import android.graphics.Rect; -import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; -import android.graphics.drawable.LayerDrawable; import android.os.Build; -import android.os.Handler; -import android.os.Looper; import android.util.TypedValue; -import android.view.PixelCopy; -import android.view.SurfaceHolder; import android.view.View; import android.view.ViewGroup; -import android.view.WindowManager; -import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import androidx.core.content.res.ResourcesCompat; -import java.io.File; -import java.io.FileInputStream; - import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.callbacks.XC_LoadPackage; import sh.siava.pixelxpert.R; @@ -125,14 +111,7 @@ public class KeyguardMods extends XposedModPack { private Object KeyguardIndicationController; //endregion - private static boolean lockScreenSubjectCacheValid = false; - private FrameLayout mLockScreenSubject; - private Object mQS; - private Object mScrimController; - private static boolean DWallpaperEnabled = false; - private static int DWOpacity = 192; - private Drawable mDimmingOverlay; public KeyguardMods(Context context) { super(context); @@ -165,8 +144,6 @@ public void updatePrefs(String... Key) { transparentBGcolor = Xprefs.getBoolean("KeyguardBottomButtonsTransparent", false); - DWallpaperEnabled = Xprefs.getBoolean("DWallpaperEnabled", false); - DWOpacity = Xprefs.getSliderInt("DWOpacity", 192); if (Key.length > 0) { switch (Key[0]) { @@ -212,102 +189,12 @@ public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Th Class FooterActionsInteractorImplClass = findClass("com.android.systemui.qs.footer.domain.interactor.FooterActionsInteractorImpl", lpparam.classLoader); Class CommandQueueClass = findClass("com.android.systemui.statusbar.CommandQueue", lpparam.classLoader); Class AmbientDisplayConfigurationClass = findClass("android.hardware.display.AmbientDisplayConfiguration", lpparam.classLoader); - Class QSImplClass = findClass("com.android.systemui.qs.QSImpl", lpparam.classLoader); - Class CanvasEngineClass = findClass("com.android.systemui.wallpapers.ImageWallpaper$CanvasEngine", lpparam.classLoader); Class AssistManagerClass = findClassIfExists("com.android.systemui.assist.AssistManager", lpparam.classLoader); if(AssistManagerClass == null) { AssistManagerClass = findClass("com.google.android.systemui.assist.AssistManagerGoogle", lpparam.classLoader); } - hookAllMethods(CentralSurfacesImplClass, "start", new XC_MethodHook() { - @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { - if(!DWallpaperEnabled) return; - - View scrimBehind = (View) getObjectField(mScrimController, "mScrimBehind"); - ViewGroup rootView = (ViewGroup) scrimBehind.getParent(); - - @SuppressLint("DiscouragedApi") - ViewGroup targetView = rootView.findViewById(mContext.getResources().getIdentifier("notification_container_parent", "id", mContext.getPackageName())); - - mLockScreenSubject = new FrameLayout(mContext); - FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(-1, -1); - mLockScreenSubject.setLayoutParams(lp); - - targetView.addView(mLockScreenSubject,1); - } - }); - hookAllConstructors(QSImplClass, new XC_MethodHook() { - @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { - mQS = param.thisObject; - } - }); - - - hookAllMethods(CanvasEngineClass, "drawFrameOnCanvas", new XC_MethodHook() { - @SuppressLint("NewApi") - @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { - if(!DWallpaperEnabled - || - ((int) callMethod(param.thisObject, "getWallpaperFlags") - & WallpaperManager.FLAG_LOCK) - != WallpaperManager.FLAG_LOCK) - { - return; //It's home screen wallpaper - } - - invalidateLSWSC(); - - SurfaceHolder wallpaperSurfaceHolder = (SurfaceHolder) getObjectField(param.thisObject, "mSurfaceHolder"); - - Rect surfaceBounds = wallpaperSurfaceHolder.getSurfaceFrame(); - - Bitmap wallpaperBitmap = Bitmap.createBitmap(surfaceBounds.width(), surfaceBounds.height(), Bitmap.Config.ARGB_8888); - - PixelCopy.request(wallpaperSurfaceHolder.getSurface(), wallpaperBitmap, copyResult -> { //stealing it from the actual screen - try { - Rect displayBounds = ((Context) callMethod(param.thisObject, "getDisplayContext")).getSystemService(WindowManager.class) - .getCurrentWindowMetrics() - .getBounds(); - - Bitmap resizedWallpaper = resizeAndCrop(wallpaperBitmap, displayBounds); - wallpaperBitmap.recycle(); - XPLauncher.enqueueProxyCommand(proxy -> { - proxy.extractSubject(resizedWallpaper, Constants.getLockScreenCachePath(mContext)); - resizedWallpaper.recycle(); - }); - } - catch (Throwable ignored) - {} - }, new Handler(Looper.myLooper())); - } - }); - - hookAllConstructors(ScrimControllerClass, new XC_MethodHook() { - @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { - mScrimController = param.thisObject; - } - }); - hookAllMethods(ScrimControllerClass, "applyAndDispatchState", new XC_MethodHook() { - @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { - setDepthWallpaper(); - } - }); - - hookAllMethods(QSImplClass, "setQsExpansion", new XC_MethodHook() { - @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - if((boolean) callMethod(param.thisObject, "isKeyguardState")) - { - setDepthWallpaper(); - } - } - }); hookAllMethods(AmbientDisplayConfigurationClass, "alwaysOnEnabled", new XC_MethodHook() { @Override @@ -573,6 +460,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { }); } + private void setLongPress(ImageView button, String type) { if(type.isEmpty()) { @@ -704,42 +592,6 @@ private void launchAssistant() { callMethod(mAssistUtils, "launchVoiceAssistFromKeyguard"); } - private void setDepthWallpaper() - { - if(DWallpaperEnabled - && getObjectField(mScrimController, "mState").toString().equals("KEYGUARD") - && (boolean) callMethod(mQS, "isFullyCollapsed")) { - - if(!lockScreenSubjectCacheValid && new File(Constants.getLockScreenCachePath(mContext)).exists()) - { - try (FileInputStream inputStream = new FileInputStream(Constants.getLockScreenCachePath(mContext))) - { - Drawable bitmapDrawable = BitmapDrawable.createFromStream(inputStream, ""); - bitmapDrawable.setAlpha(255); - - mDimmingOverlay = bitmapDrawable.getConstantState().newDrawable().mutate(); - mDimmingOverlay.setTint(Color.BLACK); - - mLockScreenSubject.setBackground(new LayerDrawable(new Drawable[]{bitmapDrawable, mDimmingOverlay})); - lockScreenSubjectCacheValid = true; - } - catch (Throwable ignored) {} - } - - if(lockScreenSubjectCacheValid) { - mLockScreenSubject.getBackground().setAlpha(DWOpacity); - - //this is the dimmed wallpaper coverage - mDimmingOverlay.setAlpha(Math.round(getFloatField(mScrimController, "mScrimBehindAlphaKeyguard")*240)); //A tad bit lower than max. show it a bit lighter than other stuff - - mLockScreenSubject.setVisibility(VISIBLE); - } - } - else - { - mLockScreenSubject.setVisibility(GONE); - } - } private void launchTVRemote() { XPLauncher.enqueueProxyCommand(proxy -> { @@ -799,37 +651,6 @@ private void setMiddleText() { }); } - private Bitmap resizeAndCrop(Bitmap wallpaperBitmap, Rect displayBounds) { - int desiredHeight = wallpaperBitmap.getHeight() > wallpaperBitmap.getWidth() - ? displayBounds.height() - : Math.round(wallpaperBitmap.getHeight() * (displayBounds.width() * 1f / wallpaperBitmap.getWidth())); - - int desiredWidth = wallpaperBitmap.getWidth() > wallpaperBitmap.getHeight() - ? displayBounds.width() - : Math.round(wallpaperBitmap.getWidth() * (displayBounds.height() * 1f / wallpaperBitmap.getHeight())); - - Bitmap scaledWallpaperBitmap = Bitmap.createScaledBitmap(wallpaperBitmap, desiredWidth, desiredHeight, true); - - int xPixelShift = (desiredWidth - displayBounds.width()) / 2; - int yPixelShift = (desiredHeight - displayBounds.height()) / 2; - - //crop to display bounds - scaledWallpaperBitmap = Bitmap.createBitmap(scaledWallpaperBitmap, xPixelShift, yPixelShift, displayBounds.width(), displayBounds.height()); - return scaledWallpaperBitmap; - } - - private void invalidateLSWSC() //invalidate lock screen wallpaper subject cache - { - lockScreenSubjectCacheValid = false; - if(mLockScreenSubject != null) { - instance.mLockScreenSubject.post(() -> instance.mLockScreenSubject.setVisibility(GONE)); - } - try { - //noinspection ResultOfMethodCallIgnored - new File(Constants.getLockScreenCachePath(mContext)).delete(); - } - catch (Throwable ignored){} - } public static String getPowerIndicationString() { From 361ddd33262d539824f4859dbab4a6005a32bcac Mon Sep 17 00:00:00 2001 From: Siavash Date: Fri, 12 Apr 2024 21:40:55 +0330 Subject: [PATCH 047/162] canary release --- .github/edit2MakeNewCanary | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/edit2MakeNewCanary b/.github/edit2MakeNewCanary index 65aeddb0b..04ad0604c 100644 --- a/.github/edit2MakeNewCanary +++ b/.github/edit2MakeNewCanary @@ -1 +1 @@ -Editing this file will trigger the build script for a new canary. \ No newline at end of file +Editing this file will trigger the build script for a new canary.. \ No newline at end of file From e03b3185fddc8268e173f225d0c8d3ed7c2ba2f6 Mon Sep 17 00:00:00 2001 From: GitHub Date: Fri, 12 Apr 2024 18:13:39 +0000 Subject: [PATCH 048/162] Version update: Release --- CanaryChangelog.md | 3 +++ MagiskModBase/module.prop | 4 ++-- MagiskModuleUpdate_Full.json | 4 ++-- MagiskModuleUpdate_Xposed.json | 4 ++-- app/build.gradle | 4 ++-- latestCanary.json | 4 ++-- 6 files changed, 13 insertions(+), 10 deletions(-) diff --git a/CanaryChangelog.md b/CanaryChangelog.md index a0f30e102..c57225fee 100644 --- a/CanaryChangelog.md +++ b/CanaryChangelog.md @@ -1,3 +1,6 @@ +**canary-345** +- Depth wallpaper: bug fixes + **canary-344** - Added option to enable depth effect on lockscreen wallpaper diff --git a/MagiskModBase/module.prop b/MagiskModBase/module.prop index 3a6d9d483..e53e7c370 100644 --- a/MagiskModBase/module.prop +++ b/MagiskModBase/module.prop @@ -1,7 +1,7 @@ id=PixelXpert name=Pixel Xpert -version=canary-344 -versionCode=344 +version=canary-345 +versionCode=345 author=Pixel Xpert Team description=Xposed based module for customizations on Pixel roms. Android 13+ updateJson=https://raw.githubusercontent.com/siavash79/PixelXpert/canary/MagiskModuleUpdate_Xposed.json diff --git a/MagiskModuleUpdate_Full.json b/MagiskModuleUpdate_Full.json index 4ba88d5b3..58005aa45 100644 --- a/MagiskModuleUpdate_Full.json +++ b/MagiskModuleUpdate_Full.json @@ -1,6 +1,6 @@ { - "version": "canary-344", - "versionCode": 344, + "version": "canary-345", + "versionCode": 345, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/MagiskModuleUpdate_Xposed.json b/MagiskModuleUpdate_Xposed.json index 4ba88d5b3..58005aa45 100644 --- a/MagiskModuleUpdate_Xposed.json +++ b/MagiskModuleUpdate_Xposed.json @@ -1,6 +1,6 @@ { - "version": "canary-344", - "versionCode": 344, + "version": "canary-345", + "versionCode": 345, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 5f90d7c6d..dc3f45cde 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "sh.siava.pixelxpert" minSdk 33 targetSdk 34 - versionCode 344 - versionName "canary-344" + versionCode 345 + versionName "canary-345" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/latestCanary.json b/latestCanary.json index 22c699f6d..242818368 100644 --- a/latestCanary.json +++ b/latestCanary.json @@ -1,6 +1,6 @@ { - "version": "canary-344", - "versionCode": 344, + "version": "canary-345", + "versionCode": 345, "zipUrl_Xposed": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "zipUrl_Full": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" From fa656817cbf21e5f36a5d8149058e19f338c62c7 Mon Sep 17 00:00:00 2001 From: Siavash Date: Sat, 13 Apr 2024 09:53:05 +0330 Subject: [PATCH 049/162] CHANGELOG: Depth wallpaper: fixed subject misalignment --- .github/edit2MakeNewCanary | 2 +- .../modpacks/systemui/DepthWallpaper.java | 134 ++++++++---------- .../utils/BitmapSubjectSegmenter.java | 6 +- 3 files changed, 64 insertions(+), 78 deletions(-) diff --git a/.github/edit2MakeNewCanary b/.github/edit2MakeNewCanary index 04ad0604c..65aeddb0b 100644 --- a/.github/edit2MakeNewCanary +++ b/.github/edit2MakeNewCanary @@ -1 +1 @@ -Editing this file will trigger the build script for a new canary.. \ No newline at end of file +Editing this file will trigger the build script for a new canary. \ No newline at end of file diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java index 0a192af51..8c4118ed4 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java @@ -38,16 +38,15 @@ public class DepthWallpaper extends XposedModPack { private static final String listenPackage = Constants.SYSTEM_UI_PACKAGE; private static boolean lockScreenSubjectCacheValid = false; - private FrameLayout mLockScreenSubject; private Object mQS; private Object mScrimController; - private static boolean DWallpaperEnabled = false; private static int DWOpacity = 192; - private Drawable mDimmingOverlay; - private int mLastXShift = -1, mLastYShift = -1; - private Bitmap mWallpaperBitmap; - + private FrameLayout mLockScreenSubject; + private Drawable mSubjectDimmingOverlay; + private FrameLayout mWallpaperBackground; + private FrameLayout mWallpaperBitmapContainer; + private FrameLayout mWallpaperDimmingOverlay; public DepthWallpaper(Context context) { super(context); @@ -77,6 +76,21 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { @SuppressLint("DiscouragedApi") ViewGroup targetView = rootView.findViewById(mContext.getResources().getIdentifier("notification_container_parent", "id", mContext.getPackageName())); + mWallpaperBackground = new FrameLayout(mContext); + mWallpaperDimmingOverlay = new FrameLayout(mContext); + mWallpaperBitmapContainer = new FrameLayout(mContext); + FrameLayout.LayoutParams lpw = new FrameLayout.LayoutParams(-1, -1); + + mWallpaperDimmingOverlay.setBackgroundColor(Color.BLACK); + mWallpaperDimmingOverlay.setLayoutParams(lpw); + mWallpaperBitmapContainer.setLayoutParams(lpw); + + mWallpaperBackground.addView(mWallpaperBitmapContainer); + mWallpaperBackground.addView(mWallpaperDimmingOverlay); + mWallpaperBackground.setLayoutParams(lpw); + + rootView.addView(mWallpaperBackground, 0); + mLockScreenSubject = new FrameLayout(mContext); FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(-1, -1); mLockScreenSubject.setLayoutParams(lp); @@ -91,15 +105,6 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { } }); - hookAllMethods(CanvasEngineClass, "onOffsetsChanged", new XC_MethodHook() { - @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - if(!isLockScreenWallpaper(param.thisObject)) return; - - processPossibleChange(param.thisObject, (float) param.args[0], (float) param.args[1]); - } - }); - hookAllMethods(CanvasEngineClass, "onSurfaceDestroyed", new XC_MethodHook() { //lockscreen wallpaper changed @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { @@ -130,7 +135,30 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { if(DWallpaperEnabled && isLockScreenWallpaper(param.thisObject)) { invalidateLSWSC(); - mWallpaperBitmap = Bitmap.createBitmap((Bitmap) param.args[0]); + Bitmap wallpaperBitmap = Bitmap.createBitmap((Bitmap) param.args[0]); + + Rect displayBounds = ((Context) callMethod(param.thisObject, "getDisplayContext")).getSystemService(WindowManager.class) + .getCurrentWindowMetrics() + .getBounds(); + + float ratioW = 1f * displayBounds.width() / wallpaperBitmap.getWidth(); + float ratioH = 1f * displayBounds.height() / wallpaperBitmap.getHeight(); + + int desiredHeight = Math.round(Math.max(ratioH, ratioW) * wallpaperBitmap.getHeight()); + int desiredWidth = Math.round(Math.max(ratioH, ratioW) * wallpaperBitmap.getWidth()); + + int xPixelShift = (desiredWidth - displayBounds.width()) / 2; + int yPixelShift = (desiredHeight - displayBounds.height()) / 2; + + Bitmap scaledWallpaperBitmap = Bitmap.createScaledBitmap(wallpaperBitmap, desiredWidth, desiredHeight, true); + + //crop to display bounds + scaledWallpaperBitmap = Bitmap.createBitmap(scaledWallpaperBitmap, xPixelShift, yPixelShift, displayBounds.width(), displayBounds.height()); + Bitmap finalScaledWallpaperBitmap = scaledWallpaperBitmap; + + mWallpaperBackground.post(() -> mWallpaperBitmapContainer.setBackground(new BitmapDrawable(mContext.getResources(), finalScaledWallpaperBitmap))); + + XPLauncher.enqueueProxyCommand(proxy -> proxy.extractSubject(finalScaledWallpaperBitmap, Constants.getLockScreenCachePath(mContext))); } } }); @@ -161,12 +189,13 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { private boolean isLockScreenWallpaper(Object canvasEngine) { - return ((int) callMethod(canvasEngine, "getWallpaperFlags") + return (getWallpaperFlag(canvasEngine) & WallpaperManager.FLAG_LOCK) == WallpaperManager.FLAG_LOCK; } private void setDepthWallpaper() { + //noinspection ConstantValue if(DWallpaperEnabled && getObjectField(mScrimController, "mState").toString().equals("KEYGUARD") && (boolean) callMethod(mQS, "isFullyCollapsed")) { @@ -178,10 +207,10 @@ && getObjectField(mScrimController, "mState").toString().equals("KEYGUARD") Drawable bitmapDrawable = BitmapDrawable.createFromStream(inputStream, ""); bitmapDrawable.setAlpha(255); - mDimmingOverlay = bitmapDrawable.getConstantState().newDrawable().mutate(); - mDimmingOverlay.setTint(Color.BLACK); + mSubjectDimmingOverlay = bitmapDrawable.getConstantState().newDrawable().mutate(); + mSubjectDimmingOverlay.setTint(Color.BLACK); - mLockScreenSubject.setBackground(new LayerDrawable(new Drawable[]{bitmapDrawable, mDimmingOverlay})); + mLockScreenSubject.setBackground(new LayerDrawable(new Drawable[]{bitmapDrawable, mSubjectDimmingOverlay})); lockScreenSubjectCacheValid = true; } catch (Throwable ignored) {} @@ -191,8 +220,10 @@ && getObjectField(mScrimController, "mState").toString().equals("KEYGUARD") mLockScreenSubject.getBackground().setAlpha(DWOpacity); //this is the dimmed wallpaper coverage - mDimmingOverlay.setAlpha(Math.round(getFloatField(mScrimController, "mScrimBehindAlphaKeyguard")*240)); //A tad bit lower than max. show it a bit lighter than other stuff + mSubjectDimmingOverlay.setAlpha(Math.round(getFloatField(mScrimController, "mScrimBehindAlphaKeyguard")*240)); //A tad bit lower than max. show it a bit lighter than other stuff + mWallpaperDimmingOverlay.setAlpha(getFloatField(mScrimController, "mScrimBehindAlphaKeyguard")); + mWallpaperBackground.setVisibility(VISIBLE); mLockScreenSubject.setVisibility(VISIBLE); } } @@ -202,69 +233,20 @@ && getObjectField(mScrimController, "mState").toString().equals("KEYGUARD") } } - private void processPossibleChange(Object canvasEngine, float xOff, float yOff) { - if(mWallpaperBitmap == null || mWallpaperBitmap.isRecycled()) return; - - Rect displayBounds = ((Context) callMethod(canvasEngine, "getDisplayContext")).getSystemService(WindowManager.class) - .getCurrentWindowMetrics() - .getBounds(); - - float ratioW = 1f * displayBounds.width() / mWallpaperBitmap.getWidth(); - float ratioH = 1f * displayBounds.height() / mWallpaperBitmap.getHeight(); - - int desiredHeight = Math.round(Math.max(ratioH, ratioW) * mWallpaperBitmap.getHeight()); - int desiredWidth = Math.round(Math.max(ratioH, ratioW) * mWallpaperBitmap.getWidth()); - - int xPixelShift; - int yPixelShift; - - if(getWallpaperFlag(canvasEngine) != WallpaperManager.FLAG_LOCK) - { - xPixelShift = (desiredWidth - displayBounds.width()) / 2; - yPixelShift = (desiredHeight - displayBounds.height()) / 2; - } - else - { - xPixelShift = Math.round(xOff * desiredWidth); - yPixelShift = Math.round(yOff * desiredHeight); - - if(xPixelShift + displayBounds.width() > desiredWidth) - { - xPixelShift = desiredWidth - displayBounds.width(); - } - if (yPixelShift + displayBounds.height() > desiredHeight - ) { - yPixelShift = desiredHeight - displayBounds.height(); - } - } - - if(xPixelShift != mLastXShift || yPixelShift != mLastYShift) { - invalidateLSWSC(); - - mLastXShift = xPixelShift; - mLastYShift = yPixelShift; - - Bitmap scaledWallpaperBitmap = Bitmap.createScaledBitmap(mWallpaperBitmap, desiredWidth, desiredHeight, true); - - //crop to display bounds - scaledWallpaperBitmap = Bitmap.createBitmap(scaledWallpaperBitmap, xPixelShift, yPixelShift, displayBounds.width(), displayBounds.height()); - Bitmap finalScaledWallpaperBitmap = scaledWallpaperBitmap; - XPLauncher.enqueueProxyCommand(proxy -> proxy.extractSubject(finalScaledWallpaperBitmap, Constants.getLockScreenCachePath(mContext))); - } - - } - private int getWallpaperFlag(Object canvasEngine) { return (int) callMethod(canvasEngine, "getWallpaperFlags"); } private void invalidateLSWSC() //invalidate lock screen wallpaper subject cache { - mLastXShift = mLastYShift = -1; - lockScreenSubjectCacheValid = false; if(mLockScreenSubject != null) { - mLockScreenSubject.post(() -> mLockScreenSubject.setVisibility(GONE)); + mLockScreenSubject.post(() -> { + mLockScreenSubject.setVisibility(GONE); + mLockScreenSubject.setBackground(null); + mWallpaperBackground.setVisibility(GONE); + mWallpaperBitmapContainer.setBackground(null); + }); } try { //noinspection ResultOfMethodCallIgnored diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/BitmapSubjectSegmenter.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/BitmapSubjectSegmenter.java index cda2e57a7..7c228dce2 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/BitmapSubjectSegmenter.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/BitmapSubjectSegmenter.java @@ -43,9 +43,13 @@ public void segmentSubject(Bitmap inputBitmap, SegmentResultListener listener) } } + inputBitmap.recycle(); listener.onSuccess(resultBitmap); }) - .addOnFailureListener(e -> listener.onFail()); + .addOnFailureListener(e -> { + inputBitmap.recycle(); + listener.onFail(); + }); } From 1f589f4b9b4f5501eb1c2a09ef75c806a2f1d48f Mon Sep 17 00:00:00 2001 From: GitHub Date: Sat, 13 Apr 2024 06:25:56 +0000 Subject: [PATCH 050/162] Version update: Release --- CanaryChangelog.md | 3 +++ MagiskModBase/module.prop | 4 ++-- MagiskModuleUpdate_Full.json | 4 ++-- MagiskModuleUpdate_Xposed.json | 4 ++-- app/build.gradle | 4 ++-- latestCanary.json | 4 ++-- 6 files changed, 13 insertions(+), 10 deletions(-) diff --git a/CanaryChangelog.md b/CanaryChangelog.md index c57225fee..3a33de10c 100644 --- a/CanaryChangelog.md +++ b/CanaryChangelog.md @@ -1,3 +1,6 @@ +**canary-346** +- Depth wallpaper: fixed subject misalignment + **canary-345** - Depth wallpaper: bug fixes diff --git a/MagiskModBase/module.prop b/MagiskModBase/module.prop index e53e7c370..993158917 100644 --- a/MagiskModBase/module.prop +++ b/MagiskModBase/module.prop @@ -1,7 +1,7 @@ id=PixelXpert name=Pixel Xpert -version=canary-345 -versionCode=345 +version=canary-346 +versionCode=346 author=Pixel Xpert Team description=Xposed based module for customizations on Pixel roms. Android 13+ updateJson=https://raw.githubusercontent.com/siavash79/PixelXpert/canary/MagiskModuleUpdate_Xposed.json diff --git a/MagiskModuleUpdate_Full.json b/MagiskModuleUpdate_Full.json index 58005aa45..37f1a9d73 100644 --- a/MagiskModuleUpdate_Full.json +++ b/MagiskModuleUpdate_Full.json @@ -1,6 +1,6 @@ { - "version": "canary-345", - "versionCode": 345, + "version": "canary-346", + "versionCode": 346, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/MagiskModuleUpdate_Xposed.json b/MagiskModuleUpdate_Xposed.json index 58005aa45..37f1a9d73 100644 --- a/MagiskModuleUpdate_Xposed.json +++ b/MagiskModuleUpdate_Xposed.json @@ -1,6 +1,6 @@ { - "version": "canary-345", - "versionCode": 345, + "version": "canary-346", + "versionCode": 346, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index dc3f45cde..13fb9ec7b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "sh.siava.pixelxpert" minSdk 33 targetSdk 34 - versionCode 345 - versionName "canary-345" + versionCode 346 + versionName "canary-346" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/latestCanary.json b/latestCanary.json index 242818368..ae255f06c 100644 --- a/latestCanary.json +++ b/latestCanary.json @@ -1,6 +1,6 @@ { - "version": "canary-345", - "versionCode": 345, + "version": "canary-346", + "versionCode": 346, "zipUrl_Xposed": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "zipUrl_Full": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" From 8ff1d2557ac8272938ee112ba2569a4676aafc11 Mon Sep 17 00:00:00 2001 From: GitHub Date: Sat, 13 Apr 2024 10:08:53 +0000 Subject: [PATCH 051/162] Version update: Release --- CanaryChangelog.md | 3 +++ MagiskModBase/module.prop | 4 ++-- MagiskModuleUpdate_Full.json | 4 ++-- MagiskModuleUpdate_Xposed.json | 4 ++-- app/build.gradle | 4 ++-- latestCanary.json | 4 ++-- 6 files changed, 13 insertions(+), 10 deletions(-) diff --git a/CanaryChangelog.md b/CanaryChangelog.md index 3a33de10c..1055f3f43 100644 --- a/CanaryChangelog.md +++ b/CanaryChangelog.md @@ -1,3 +1,6 @@ +**canary-347** +- Depth wallpaper: fixed screen obstruction during HUN + **canary-346** - Depth wallpaper: fixed subject misalignment diff --git a/MagiskModBase/module.prop b/MagiskModBase/module.prop index 993158917..261fe9d67 100644 --- a/MagiskModBase/module.prop +++ b/MagiskModBase/module.prop @@ -1,7 +1,7 @@ id=PixelXpert name=Pixel Xpert -version=canary-346 -versionCode=346 +version=canary-347 +versionCode=347 author=Pixel Xpert Team description=Xposed based module for customizations on Pixel roms. Android 13+ updateJson=https://raw.githubusercontent.com/siavash79/PixelXpert/canary/MagiskModuleUpdate_Xposed.json diff --git a/MagiskModuleUpdate_Full.json b/MagiskModuleUpdate_Full.json index 37f1a9d73..593188df3 100644 --- a/MagiskModuleUpdate_Full.json +++ b/MagiskModuleUpdate_Full.json @@ -1,6 +1,6 @@ { - "version": "canary-346", - "versionCode": 346, + "version": "canary-347", + "versionCode": 347, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/MagiskModuleUpdate_Xposed.json b/MagiskModuleUpdate_Xposed.json index 37f1a9d73..593188df3 100644 --- a/MagiskModuleUpdate_Xposed.json +++ b/MagiskModuleUpdate_Xposed.json @@ -1,6 +1,6 @@ { - "version": "canary-346", - "versionCode": 346, + "version": "canary-347", + "versionCode": 347, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 13fb9ec7b..c19ac78a1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "sh.siava.pixelxpert" minSdk 33 targetSdk 34 - versionCode 346 - versionName "canary-346" + versionCode 347 + versionName "canary-347" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/latestCanary.json b/latestCanary.json index ae255f06c..d119b3eee 100644 --- a/latestCanary.json +++ b/latestCanary.json @@ -1,6 +1,6 @@ { - "version": "canary-346", - "versionCode": 346, + "version": "canary-347", + "versionCode": 347, "zipUrl_Xposed": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "zipUrl_Full": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" From e2cb266194b8060bf83fd9036c33de99409e41f4 Mon Sep 17 00:00:00 2001 From: Siavash Date: Sat, 13 Apr 2024 16:47:36 +0330 Subject: [PATCH 052/162] Fixed null pointer exception in depth wallpaper --- .../modpacks/systemui/DepthWallpaper.java | 42 ++++++++++++------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java index 2fa858621..912ec4dee 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java @@ -76,25 +76,12 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { @SuppressLint("DiscouragedApi") ViewGroup targetView = rootView.findViewById(mContext.getResources().getIdentifier("notification_container_parent", "id", mContext.getPackageName())); - mWallpaperBackground = new FrameLayout(mContext); - mWallpaperDimmingOverlay = new FrameLayout(mContext); - mWallpaperBitmapContainer = new FrameLayout(mContext); - FrameLayout.LayoutParams lpw = new FrameLayout.LayoutParams(-1, -1); - - mWallpaperDimmingOverlay.setBackgroundColor(Color.BLACK); - mWallpaperDimmingOverlay.setLayoutParams(lpw); - mWallpaperBitmapContainer.setLayoutParams(lpw); - - mWallpaperBackground.addView(mWallpaperBitmapContainer); - mWallpaperBackground.addView(mWallpaperDimmingOverlay); - mWallpaperBackground.setLayoutParams(lpw); + if(mWallpaperBackground == null) { + createLayers(); + } rootView.addView(mWallpaperBackground, 0); - mLockScreenSubject = new FrameLayout(mContext); - FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(-1, -1); - mLockScreenSubject.setLayoutParams(lp); - targetView.addView(mLockScreenSubject,1); } }); @@ -156,6 +143,10 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { scaledWallpaperBitmap = Bitmap.createBitmap(scaledWallpaperBitmap, xPixelShift, yPixelShift, displayBounds.width(), displayBounds.height()); Bitmap finalScaledWallpaperBitmap = scaledWallpaperBitmap; + if(mWallpaperBackground == null) { + createLayers(); + } + mWallpaperBackground.post(() -> mWallpaperBitmapContainer.setBackground(new BitmapDrawable(mContext.getResources(), finalScaledWallpaperBitmap))); XPLauncher.enqueueProxyCommand(proxy -> proxy.extractSubject(finalScaledWallpaperBitmap, Constants.getLockScreenCachePath(mContext))); @@ -188,6 +179,25 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { }); } + private void createLayers() { + mWallpaperBackground = new FrameLayout(mContext); + mWallpaperDimmingOverlay = new FrameLayout(mContext); + mWallpaperBitmapContainer = new FrameLayout(mContext); + FrameLayout.LayoutParams lpw = new FrameLayout.LayoutParams(-1, -1); + + mWallpaperDimmingOverlay.setBackgroundColor(Color.BLACK); + mWallpaperDimmingOverlay.setLayoutParams(lpw); + mWallpaperBitmapContainer.setLayoutParams(lpw); + + mWallpaperBackground.addView(mWallpaperBitmapContainer); + mWallpaperBackground.addView(mWallpaperDimmingOverlay); + mWallpaperBackground.setLayoutParams(lpw); + + mLockScreenSubject = new FrameLayout(mContext); + FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(-1, -1); + mLockScreenSubject.setLayoutParams(lp); + } + private boolean isLockScreenWallpaper(Object canvasEngine) { return (getWallpaperFlag(canvasEngine) From 63f0b424f44c45b3b36c769c4c6fbd383f77c0d6 Mon Sep 17 00:00:00 2001 From: Crowdin Bot Date: Sun, 14 Apr 2024 00:43:40 +0000 Subject: [PATCH 053/162] New Crowdin translations by GitHub Action --- app/src/main/res/values-af-rZA/strings.xml | 7 ++++++ app/src/main/res/values-ar-rSA/strings.xml | 7 ++++++ app/src/main/res/values-cs-rCZ/strings.xml | 7 ++++++ app/src/main/res/values-da-rDK/strings.xml | 7 ++++++ app/src/main/res/values-de-rDE/strings.xml | 7 ++++++ app/src/main/res/values-el-rGR/strings.xml | 7 ++++++ app/src/main/res/values-es-rES/strings.xml | 7 ++++++ app/src/main/res/values-fa-rIR/strings.xml | 27 ++++++++++++++-------- app/src/main/res/values-fi-rFI/strings.xml | 7 ++++++ app/src/main/res/values-fr-rFR/strings.xml | 7 ++++++ app/src/main/res/values-hi-rIN/strings.xml | 7 ++++++ app/src/main/res/values-hu-rHU/strings.xml | 7 ++++++ app/src/main/res/values-it-rIT/strings.xml | 7 ++++++ app/src/main/res/values-iw-rIL/strings.xml | 7 ++++++ app/src/main/res/values-ja-rJP/strings.xml | 7 ++++++ app/src/main/res/values-ko-rKR/strings.xml | 7 ++++++ app/src/main/res/values-nl-rNL/strings.xml | 7 ++++++ app/src/main/res/values-no-rNO/strings.xml | 7 ++++++ app/src/main/res/values-pl-rPL/strings.xml | 7 ++++++ app/src/main/res/values-pt-rPT/strings.xml | 7 ++++++ app/src/main/res/values-ro-rRO/strings.xml | 7 ++++++ app/src/main/res/values-ru-rRU/strings.xml | 7 ++++++ app/src/main/res/values-sr-rSP/strings.xml | 7 ++++++ app/src/main/res/values-sv-rSE/strings.xml | 7 ++++++ app/src/main/res/values-tr-rTR/strings.xml | 7 ++++++ app/src/main/res/values-uk-rUA/strings.xml | 7 ++++++ app/src/main/res/values-vi-rVN/strings.xml | 7 ++++++ app/src/main/res/values-zh-rCN/strings.xml | 7 ++++++ app/src/main/res/values-zh-rTW/strings.xml | 7 ++++++ 29 files changed, 213 insertions(+), 10 deletions(-) diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml index 4e237e5ff..9d2172ca9 100644 --- a/app/src/main/res/values-af-rZA/strings.xml +++ b/app/src/main/res/values-af-rZA/strings.xml @@ -51,6 +51,9 @@ Onaktiwiteit uitteltyd Maksimum kliënte + Depth effect wallpaper + Dynamically integrate wallpaper\'s foreground with the clock + Wallpaper foreground opacity Deaktiveer die ontsluitwenk-animasie Sluit skerm opsies Verwyder gebruikeravatar (multigebruikermodus) @@ -377,6 +380,10 @@ Kennisgewing Toepassing sal nou toemaak. Jy kan dit weer oopmaak deur op die nuwe ikoon te tik OK + + Attention + Use a suitable lockscreen wallpaper where the foreground elements do not obstruct the entire clock on your lock screen, ensuring both visual appeal and functional clarity on your lock screen.\n\nNote: %s. + OK \'n Stelselherlaai word vereis om die instellings toe te pas diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index 8e5a18fe0..515698905 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -51,6 +51,9 @@ مهلة عدم النشاط الحد الأقصى للعملاء + Depth effect wallpaper + Dynamically integrate wallpaper\'s foreground with the clock + Wallpaper foreground opacity تعطيل حركة تلميح فتح القفل خيارات قفل الشاشة إزالة الصورة الرمزية للمستخدم (وضع المستخدم المتعدد) @@ -377,6 +380,10 @@ إشعار سيتم إغلاق التطبيق الآن. يمكنك فتحه مرة أخرى بالنقر على الرمز الجديد حسناً + + Attention + Use a suitable lockscreen wallpaper where the foreground elements do not obstruct the entire clock on your lock screen, ensuring both visual appeal and functional clarity on your lock screen.\n\nNote: %s. + OK مطلوب إعادة تشغيل النظام لتطبيق الإعدادات diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index 5d005c96f..14d0198bd 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -51,6 +51,9 @@ Časový limit nečinnosti vypršel Maximum klientů + Depth effect wallpaper + Dynamically integrate wallpaper\'s foreground with the clock + Wallpaper foreground opacity Zakázat animaci nápovědy pro odemknutí Možnosti uzamčení obrazovky Odebrat avatara uživatele (režim pro více uživatelů) @@ -377,6 +380,10 @@ Oznámení Aplikace se nyní uzavře. Můžete jej znovu otevřít klepnutím na novou ikonu OK + + Attention + Use a suitable lockscreen wallpaper where the foreground elements do not obstruct the entire clock on your lock screen, ensuring both visual appeal and functional clarity on your lock screen.\n\nNote: %s. + OK Aby se nastavení uplatnilo, je vyžadován restart systému diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml index c2d2c690c..8d9156a13 100644 --- a/app/src/main/res/values-da-rDK/strings.xml +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -51,6 +51,9 @@ Timeout for inaktivitet Maksimalt antal kunder + Depth effect wallpaper + Dynamically integrate wallpaper\'s foreground with the clock + Wallpaper foreground opacity Deaktiver oplåsningshint-animationen Indstillinger for låseskærm Fjern brugeravatar (multibrugertilstand) @@ -377,6 +380,10 @@ Varsel Appen lukker nu. Du kan åbne den igen ved at trykke på det nye ikon Okay + + Attention + Use a suitable lockscreen wallpaper where the foreground elements do not obstruct the entire clock on your lock screen, ensuring both visual appeal and functional clarity on your lock screen.\n\nNote: %s. + OK En systemgenstart er påkrævet, for at indstillingerne kan anvendes diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index fe2a63e4d..11de9024d 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -51,6 +51,9 @@ Zeitüberschreitung bei Inaktivität Maximale Anzahl von Clients + Depth effect wallpaper + Dynamically integrate wallpaper\'s foreground with the clock + Wallpaper foreground opacity Animation des Entsperrungshinweises deaktivieren Sperrbildschirm-Optionen Benutzer-Avatar entfernen (Mehrbenutzermodus) @@ -377,6 +380,10 @@ Beachten Die App wird jetzt geschlossen. Sie können es erneut öffnen, indem Sie auf das neue Symbol tippen OK + + Attention + Use a suitable lockscreen wallpaper where the foreground elements do not obstruct the entire clock on your lock screen, ensuring both visual appeal and functional clarity on your lock screen.\n\nNote: %s. + OK Damit die Einstellungen wirksam werden, ist ein Systemneustart erforderlich diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index 44f5460df..fa42173f2 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -51,6 +51,9 @@ Χρονικό όριο αδράνειας Μέγιστος αριθμός πελατών + Depth effect wallpaper + Dynamically integrate wallpaper\'s foreground with the clock + Wallpaper foreground opacity Απενεργοποιήστε το κινούμενο σχέδιο υποδείξεων ξεκλειδώματος Επιλογές κλειδώματος οθόνης Κατάργηση avatar χρήστη (λειτουργία πολλαπλών χρηστών) @@ -377,6 +380,10 @@ Ειδοποίηση Η εφαρμογή θα κλείσει τώρα. Μπορείτε να το ανοίξετε ξανά πατώντας στο νέο εικονίδιο Εντάξει + + Attention + Use a suitable lockscreen wallpaper where the foreground elements do not obstruct the entire clock on your lock screen, ensuring both visual appeal and functional clarity on your lock screen.\n\nNote: %s. + OK Απαιτείται επανεκκίνηση συστήματος για να εφαρμοστούν οι ρυθμίσεις diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 3f3888206..e6363d04f 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -51,6 +51,9 @@ Tiempo de inactividad Clientes máximos + Fondo de pantalla de efecto profundo + Integrar dinámicamente el fondo de pantalla con el reloj + Opacidad del fondo de pantalla Deshabilitar la animación de pantalla de desbloqueo Opciones de pantalla de bloqueo Eliminar avatar de usuario (modo multiusuario) @@ -377,6 +380,10 @@ Aviso La aplicación se cerrará ahora. Puedes abrirla de nuevo tocando el nuevo icono Ok + + Atención + Usa un fondo de pantalla de bloqueo adecuado donde los elementos de primer plano no obstruyen todo el reloj en tu pantalla de bloqueo, asegurando tanto el atractivo visual como la claridad funcional en la pantalla de bloqueo.\n\nNota: %s. + Ok Se requiere un reinicio del sistema para aplicar la configuración diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml index 02984b247..57ad5615e 100644 --- a/app/src/main/res/values-fa-rIR/strings.xml +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -51,6 +51,9 @@ مدت زمان غیر فعال بود حداکثر تعداد کاربران + Depth effect wallpaper + Dynamically integrate wallpaper\'s foreground with the clock + Wallpaper foreground opacity حذف انیمیشن راهنمایی باز کردن قفل تنظیمات قفل صفحه حذف نمایه کاربر (حالت چند کاربره) @@ -58,8 +61,8 @@ دایره اطراف نماد اثر انگشت فعال است دایره اطراف نماد اثر انگشت پنهان شد Remove foreground icon from under-display fingerprint - Fingerprint icon is active - Fingerprint icon will be hidden + نماد اثرانگشت فعال است + نماد اثرانگشت پنهان خواهد شد متن دلخواه در صفحه قفل متن دلخواه نام اپراتور (بالای صفحه) نام اپراتور بدون تغییر @@ -145,7 +148,7 @@ دانلود+‌ آپلود (ترکیبی) فقط دانلود فقط آپلود - Show in bits/s + نمایش در بیت‌ بر ثانیه تنظیمات نوار وضعیت باتری دو رنگ روشن (فقط با نماد عمودی کار می کند) @@ -164,16 +167,16 @@ ضخامت نمایش شارژ شدن نمایش شارژ سریع - Indicate power save + نشان دادن ذخیره باتری محدوده هشدار برای غیرفعال کردن رنگ‌ها، هر دو را روی 0 تنظیم کنید رنگ سطح بحرانی رنگ سطح هشدار رنگ شارژ رنگ شارژ سریع - Power Save color + رنگ ذخیره باتری تنظیم رنگ بر اساس سطح باتری - Colored battery percentage while charging + رنگی بودن درصد باتری هنگام شارژ امروز هفته جاری ماه جاری @@ -206,7 +209,7 @@ شدت توسط تنظیمات لرزش لمسی سیستم تعریف شده است در جهت پرتره در جهت گیری منظره - Miscellaneous + متفرقه Show charging info on QS panel تعداد ردیفهای تنظیمات سریع تعداد ستونهای تنظیمات سریع @@ -266,8 +269,8 @@ ایجاد خودکار نمادهای تک رنگ ناقص (فقط راه‌انداز پیکسل) مجدداً نمادهای مضمون را فعال کنید تا اعمال شوند مراحل صدای موزیک (0 تا 100%) - Modify display resolution - Before enabling this, make sure to reset all display size/dpi changes to default + تغییر رزولوشن صفحه نمایش + قبل از فعال کردن این، لطفاً تمام تنظیمات مربوط به اندازه/dpi صفحه نمایش را به حالت پیش‌فرض برگردانید ابعاد صفحه نمایش محدوده مجاز نور صفحه این محدوده خطی نیست: بعضی اوقات باید آزمون و خطا کنید @@ -282,7 +285,7 @@ [هنگامی که نمایشگر همیشه روشن خاموش است] ضربه زدن روی صفحه نمایشگر محیط را نشان می دهد برای نشان دادن نمایشگر محیطی انتخاب کنید [وقتی نمایشگر همیشه روشن خاموش است] انتخاب تلفن صفحه نمایش محیط را نشان می دهد - Force AOD while charging + مجبور کردن صفحه نمایش همیشه روشن هنگام شارژ Keep always on display enabled while device is charging وقتی که صفحه نمایش خاموش است… نمادهای با تم سفارشی @@ -377,6 +380,10 @@ اطلاع برنامه اکنون بسته خواهد شد. با ضربه زدن روی نماد جدید می توانید دوباره آن را باز کنید خوب + + Attention + Use a suitable lockscreen wallpaper where the foreground elements do not obstruct the entire clock on your lock screen, ensuring both visual appeal and functional clarity on your lock screen.\n\nNote: %s. + OK برای اعمال تنظیمات به راه اندازی مجدد سیستم نیاز است diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index 3a12e9171..9aa371ab3 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -51,6 +51,9 @@ Käyttämättömyyden aikakatkaisu Maksimi asiakkaita + Depth effect wallpaper + Dynamically integrate wallpaper\'s foreground with the clock + Wallpaper foreground opacity Poista lukituksen avausvihje animaatio käytöstä Lukitusnäytön asetukset Poista käyttäjän avatar (monen käyttäjän tila) @@ -377,6 +380,10 @@ Ilmoitus Sovellus sulkeutuu nyt. Voit avata sen uudelleen napauttamalla uutta kuvaketta OK + + Attention + Use a suitable lockscreen wallpaper where the foreground elements do not obstruct the entire clock on your lock screen, ensuring both visual appeal and functional clarity on your lock screen.\n\nNote: %s. + OK Järjestelmä on käynnistettävä uudelleen, jotta asetukset tulevat voimaan diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index dab36a220..bf9681af5 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -51,6 +51,9 @@ Délai d\'inactivité Clientèle maximale + Depth effect wallpaper + Dynamically integrate wallpaper\'s foreground with the clock + Wallpaper foreground opacity Désactiver l\'animation des indices de déverrouillage Options de l\'écran de verrouillage Retirer l’avatar d’utilisateur (mode utilisateurs multiples) @@ -377,6 +380,10 @@ Avis L\'application va se fermer maintenant. Vous pouvez l\'ouvrir à nouveau en appuyant sur la nouvelle icône D\'ACCORD + + Attention + Use a suitable lockscreen wallpaper where the foreground elements do not obstruct the entire clock on your lock screen, ensuring both visual appeal and functional clarity on your lock screen.\n\nNote: %s. + OK Un redémarrage du système est requis pour que les paramètres s\'appliquent diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index bd248376e..436c2686f 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -51,6 +51,9 @@ निष्क्रियता मध्यांतर अधिकतम ग्राहक + Depth effect wallpaper + Dynamically integrate wallpaper\'s foreground with the clock + Wallpaper foreground opacity अनलॉक संकेत एनीमेशन अक्षम करें लॉक स्क्रीन विकल्प उपयोगकर्ता अवतार हटाएं (बहु-उपयोगकर्ता मोड) @@ -377,6 +380,10 @@ सूचना ऐप अब बंद हो जाएगा. आप नए आइकन पर टैप करके इसे दोबारा खोल सकते हैं ठीक है + + Attention + Use a suitable lockscreen wallpaper where the foreground elements do not obstruct the entire clock on your lock screen, ensuring both visual appeal and functional clarity on your lock screen.\n\nNote: %s. + OK सेटिंग्स लागू करने के लिए सिस्टम रीबूट की आवश्यकता होती है diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index a24370345..500f27b2a 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -51,6 +51,9 @@ Inaktivitási időtúllépés Maximális ügyfélszám + Depth effect wallpaper + Dynamically integrate wallpaper\'s foreground with the clock + Wallpaper foreground opacity Tiltsa le a feloldó tipp animációt Lezárási képernyő beállításai Felhasználói avatar eltávolítása (többfelhasználós mód) @@ -377,6 +380,10 @@ Értesítés Az alkalmazás most bezárul. Az új ikon megérintésével újra megnyithatja rendben + + Attention + Use a suitable lockscreen wallpaper where the foreground elements do not obstruct the entire clock on your lock screen, ensuring both visual appeal and functional clarity on your lock screen.\n\nNote: %s. + OK A beállítások érvényesítéséhez a rendszer újraindítása szükséges diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index 48a4bcd17..a1986c2a9 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -51,6 +51,9 @@ Timeout inattività Numero massimo client + Sfondo effetto profondità + Integra dinamicamente il primo piano dello sfondo con l\'orologio + Opacità primo piano dello sfondo Disabilita animazione suggerimento di sblocco Opzioni schermata di blocco Rimuovi avatar utente (modalità multiutente) @@ -377,6 +380,10 @@ Avviso L\'app verrà chiusa ora. Puoi aprirlo di nuovo toccando la nuova icona OK + + Attenzione + Usa uno sfondo adatto alla schermata di blocco in cui gli elementi di primo piano non ostacolano l\'intero orologio sulla schermata di blocco, garantendo sia il fascino visivo che la chiarezza funzionale sulla schermata di blocco.\n\nNota: %s. + OK Per applicare le impostazioni è necessario il riavvio del sistema diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index f029192d6..992d71abf 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -51,6 +51,9 @@ זמן קצוב לחוסר פעילות מקסימום לקוחות + Depth effect wallpaper + Dynamically integrate wallpaper\'s foreground with the clock + Wallpaper foreground opacity השבת את הנפשת הרמז לביטול הנעילה אפשרויות מסך נעילה הסרת דמות משתמש (מצב ריבוי משתמשים) @@ -377,6 +380,10 @@ הודעה האפליקציה תיסגר כעת. אתה יכול לפתוח אותו שוב על ידי הקשה על הסמל החדש בסדר + + Attention + Use a suitable lockscreen wallpaper where the foreground elements do not obstruct the entire clock on your lock screen, ensuring both visual appeal and functional clarity on your lock screen.\n\nNote: %s. + OK נדרש אתחול המערכת כדי שההגדרות יחולו diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 2d9d30a4e..6ece61214 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -51,6 +51,9 @@ 非アクティブタイムアウト 最大クライアント数 + Depth effect wallpaper + Dynamically integrate wallpaper\'s foreground with the clock + Wallpaper foreground opacity ロック解除ヒントのアニメーションを無効にする ロック画面のオプション ユーザーアバター表示を削除 (マルチユーザーモード) @@ -377,6 +380,10 @@ 知らせ アプリは今すぐ終了します。新しいアイコンをタップすると、再度開くことができます わかりました + + Attention + Use a suitable lockscreen wallpaper where the foreground elements do not obstruct the entire clock on your lock screen, ensuring both visual appeal and functional clarity on your lock screen.\n\nNote: %s. + OK 設定を適用するにはシステムの再起動が必要です diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index 613dff52c..eec25b072 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -51,6 +51,9 @@ 비활성 상태 시간 제한 최대 사용자 + Depth effect wallpaper + Dynamically integrate wallpaper\'s foreground with the clock + Wallpaper foreground opacity 잠금해제 힌트 애니메이션 비활성화 잠금화면 설정 사용자 아바타 삭제 (멀티 사용자 모드) @@ -377,6 +380,10 @@ 알림 앱이 종료될 예정입니다. 새로운 아이콘을 탭하여 다시 실행할 수 있습니다. 확인 + + Attention + Use a suitable lockscreen wallpaper where the foreground elements do not obstruct the entire clock on your lock screen, ensuring both visual appeal and functional clarity on your lock screen.\n\nNote: %s. + OK 설정을 적용하려면 시스템을 재부팅해야 합니다. diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index 570d89a26..477d8fcd1 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -51,6 +51,9 @@ Time-out voor inactiviteit Maximale klanten + Depth effect wallpaper + Dynamically integrate wallpaper\'s foreground with the clock + Wallpaper foreground opacity Schakel de ontgrendelingshintanimatie uit Opties voor vergrendelscherm Gebruikersavatar verwijderen (modus voor meerdere gebruikers) @@ -377,6 +380,10 @@ Kennisgeving De app wordt nu afgesloten. Je kunt het opnieuw openen door op het nieuwe pictogram te tikken OK + + Attention + Use a suitable lockscreen wallpaper where the foreground elements do not obstruct the entire clock on your lock screen, ensuring both visual appeal and functional clarity on your lock screen.\n\nNote: %s. + OK Een herstart van het systeem is vereist om de instellingen toe te passen diff --git a/app/src/main/res/values-no-rNO/strings.xml b/app/src/main/res/values-no-rNO/strings.xml index 42e6a0bc0..c063e6e81 100644 --- a/app/src/main/res/values-no-rNO/strings.xml +++ b/app/src/main/res/values-no-rNO/strings.xml @@ -51,6 +51,9 @@ Tidsavbrudd for inaktivitet Maksimalt antall kunder + Depth effect wallpaper + Dynamically integrate wallpaper\'s foreground with the clock + Wallpaper foreground opacity Deaktiver opplåsningshintanimasjonen Alternativer for låseskjerm Fjern brukeravatar (flerbrukermodus) @@ -377,6 +380,10 @@ Legge merke til Appen lukkes nå. Du kan åpne den igjen ved å trykke på det nye ikonet OK + + Attention + Use a suitable lockscreen wallpaper where the foreground elements do not obstruct the entire clock on your lock screen, ensuring both visual appeal and functional clarity on your lock screen.\n\nNote: %s. + OK En omstart av systemet kreves for at innstillingene skal gjelde diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index 4a911e69d..5f88fb34d 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -51,6 +51,9 @@ Limit czasu bezczynności Maksymalna liczba klientów + Depth effect wallpaper + Dynamically integrate wallpaper\'s foreground with the clock + Wallpaper foreground opacity Wyłącz animację podpowiedzi odblokowania Opcje ekranu blokady Usuń awatar użytkownika (tryb wielu użytkowników) @@ -377,6 +380,10 @@ Ogłoszenie Aplikacja zostanie teraz zamknięta. Możesz go otworzyć ponownie, dotykając nowej ikony OK + + Attention + Use a suitable lockscreen wallpaper where the foreground elements do not obstruct the entire clock on your lock screen, ensuring both visual appeal and functional clarity on your lock screen.\n\nNote: %s. + OK Aby ustawienia zostały zastosowane, wymagane jest ponowne uruchomienie systemu diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index ad828598e..40879da8e 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -51,6 +51,9 @@ Tempo limite de inatividade Nr. máximo de clientes + Depth effect wallpaper + Dynamically integrate wallpaper\'s foreground with the clock + Wallpaper foreground opacity Desativar animação da dica de desbloqueio Opções do ecrã de bloqueio Remover avatar do utilizador (modo multi-utilizador) @@ -377,6 +380,10 @@ Aviso A app irá encerrar. Toque no novo ícone para voltar a abrir OK + + Attention + Use a suitable lockscreen wallpaper where the foreground elements do not obstruct the entire clock on your lock screen, ensuring both visual appeal and functional clarity on your lock screen.\n\nNote: %s. + OK É necessário reiniciar o sistema para aplicar as definições diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 40375e240..e204bdbdb 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -51,6 +51,9 @@ Timeout inactivitate Număr maxim de clienți + Fundal cu efect de adâncime + Integrare dinamică a imaginii de fundal cu ceasul + Opacitatea fundalului în prim-plan Dezactivează animația de indiciu a deblocării Opțiuni pentru ecranul de blocare Eliminare avatar utilizator (mod utilizatori multipli) @@ -377,6 +380,10 @@ Înștiințare Aplicația se va închide acum. O poți deschide din nou atingând noua pictogramă Bine + + Atenție + Utilizează o imagine de fundal a ecranului de blocare adecvată în cazul în care elementele din prim-plan nu obstrucționează întregul ceas pe ecranul de blocare, asigurând atractivități vizuale și a clarități funcționale pe ecranul de blocare.\n\nNotă: %s. + OK Este necesară o repornire a sistemului pentru ca setările să fie aplicate diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 074f41bdc..683806773 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -51,6 +51,9 @@ Таймаут бездействия Максимальное количество клиентов + Depth effect wallpaper + Dynamically integrate wallpaper\'s foreground with the clock + Wallpaper foreground opacity Отключить анимацию подсказки разблокировки Опции экрана блокировки Удалить аватар пользователя (многопользовательский режим) @@ -377,6 +380,10 @@ Примечание Приложение будет закрыто. Вы можете открыть его снова, нажав на новый значок ОК + + Attention + Use a suitable lockscreen wallpaper where the foreground elements do not obstruct the entire clock on your lock screen, ensuring both visual appeal and functional clarity on your lock screen.\n\nNote: %s. + OK Для применения настроек требуется перезагрузка системы diff --git a/app/src/main/res/values-sr-rSP/strings.xml b/app/src/main/res/values-sr-rSP/strings.xml index ad0380f8d..c0e00a365 100644 --- a/app/src/main/res/values-sr-rSP/strings.xml +++ b/app/src/main/res/values-sr-rSP/strings.xml @@ -51,6 +51,9 @@ Временско ограничење неактивности Максималан број клијената + Depth effect wallpaper + Dynamically integrate wallpaper\'s foreground with the clock + Wallpaper foreground opacity Онемогући анимацију савета за откључавање Опције закључаног екрана Уклони аватар корисника (режим за више корисника) @@ -377,6 +380,10 @@ Упозорење Апликација ће се затворити. Можете је поново покренути додиром на нову икону. У реду + + Attention + Use a suitable lockscreen wallpaper where the foreground elements do not obstruct the entire clock on your lock screen, ensuring both visual appeal and functional clarity on your lock screen.\n\nNote: %s. + OK Потребно је поновно покретање система да би промене ступиле на снагу diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index db50119c9..ef20ca008 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -51,6 +51,9 @@ Timeout för inaktivitet Maximalt antal kunder + Depth effect wallpaper + Dynamically integrate wallpaper\'s foreground with the clock + Wallpaper foreground opacity Inaktivera upplåsningstipsanimeringen Alternativ för låsskärm Ta bort användaravatar (fleranvändarläge) @@ -377,6 +380,10 @@ Lägga märke till Appen stängs nu. Du kan öppna den igen genom att trycka på den nya ikonen OK + + Attention + Use a suitable lockscreen wallpaper where the foreground elements do not obstruct the entire clock on your lock screen, ensuring both visual appeal and functional clarity on your lock screen.\n\nNote: %s. + OK En omstart av systemet krävs för att inställningarna ska gälla diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index 3a8adc791..9ef0bb978 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -51,6 +51,9 @@ Hareketsizlik zaman aşımı Maksimum istemciler + Derinlik efektli duvar kağıdı + Duvar kağıdının ön planını saatle dinamik olarak entegre et + Duvar kağıdı ön plan opaklığı Kilit açma ipucu animasyonunu devre dışı bırak Kilit ekranı seçenekleri Kullanıcı avatarını kaldır (çoklu kullanıcı modu) @@ -377,6 +380,10 @@ Uyarı Uygulama şimdi kapanacaktır. Yeni simgeye dokunarak tekrar açabilirsiniz TAMAM + + Dikkat + Kilit ekranı duvar kağıdınızı seçerken, ön plandaki unsurların kilit ekranınızdaki saati tamamen engellemediğinden emin olun. Böylece kilit ekranınızda hem görsel çekicilik hem de işlevsel netlik sağlanır.\n\nNot: %s. + Tamam Ayarların uygulanması için sistemin yeniden başlatılması gerekir diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index ce7289c27..50afed3b0 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -51,6 +51,9 @@ Тайм-аут бездіяльності Максимум клієнтів + Depth effect wallpaper + Dynamically integrate wallpaper\'s foreground with the clock + Wallpaper foreground opacity Вимкніть анімацію підказки розблокування Параметри блокування екрана Видалити аватар користувача (багатокористувацький режим) @@ -377,6 +380,10 @@ Повідомлення Програма зараз закриється. Ви можете відкрити його знову, торкнувшись нового значка в порядку + + Attention + Use a suitable lockscreen wallpaper where the foreground elements do not obstruct the entire clock on your lock screen, ensuring both visual appeal and functional clarity on your lock screen.\n\nNote: %s. + OK Для застосування налаштувань потрібно перезавантажити систему diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index 3f22bc00b..1df6e51fc 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -51,6 +51,9 @@ Thời gian không hoạt động Lượng client tối đa + Depth effect wallpaper + Dynamically integrate wallpaper\'s foreground with the clock + Wallpaper foreground opacity Tắt hoạt ảnh gợi ý mở khóa Tùy chọn màn hình khóa Xóa hình đại diện người dùng (chế độ nhiều người dùng) @@ -377,6 +380,10 @@ Chú ý Ứng dụng sẽ đóng ngay bây giờ. Bạn có thể mở lại bằng cách nhấn vào biểu tượng mới ĐƯỢC RỒI + + Attention + Use a suitable lockscreen wallpaper where the foreground elements do not obstruct the entire clock on your lock screen, ensuring both visual appeal and functional clarity on your lock screen.\n\nNote: %s. + OK Cần phải khởi động lại hệ thống để áp dụng cài đặt diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 700da4955..88d13e823 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -51,6 +51,9 @@ 自动关闭时间 最大连接数 + Depth effect wallpaper + Dynamically integrate wallpaper\'s foreground with the clock + Wallpaper foreground opacity 禁用解锁提示动画 锁屏选项 隐藏用户头像 (多用户模式) @@ -377,6 +380,10 @@ 通知 应用现在将关闭。您可以通过点击新图标重新打开它 好的 + + Attention + Use a suitable lockscreen wallpaper where the foreground elements do not obstruct the entire clock on your lock screen, ensuring both visual appeal and functional clarity on your lock screen.\n\nNote: %s. + OK 需要重新启动系统才能应用设置 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 0df50dc78..8f386c793 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -51,6 +51,9 @@ 自動關閉時間 最大接入數 + Depth effect wallpaper + Dynamically integrate wallpaper\'s foreground with the clock + Wallpaper foreground opacity Disable the unlock hint animation 自定鎖定畫面 隱藏使用者頭像(多使用者模式) @@ -377,6 +380,10 @@ Notice App will close now. You can open it again by tapping on the new icon OK + + Attention + Use a suitable lockscreen wallpaper where the foreground elements do not obstruct the entire clock on your lock screen, ensuring both visual appeal and functional clarity on your lock screen.\n\nNote: %s. + OK 需要重新啟動系統才能套用設定 From a47e11223ff041b079bb1e49af1ec110bd3a7131 Mon Sep 17 00:00:00 2001 From: Siavash Date: Tue, 16 Apr 2024 10:18:31 +0330 Subject: [PATCH 054/162] Depth Wallpaper: Added bitmap cache to increase performance and reduce MLKit calls --- .../siava/pixelxpert/modpacks/Constants.java | 8 ++- .../modpacks/systemui/DepthWallpaper.java | 55 +++++++++++++++++-- 2 files changed, 57 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/Constants.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/Constants.java index 0e38af0b0..44abeda0f 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/Constants.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/Constants.java @@ -33,8 +33,14 @@ public final class Constants { public static final List PREF_UPDATE_EXCLUSIONS = Arrays.asList(BootLoopProtector.LOAD_TIME_KEY_KEY, BootLoopProtector.PACKAGE_STRIKE_KEY_KEY); - public static String getLockScreenCachePath(Context context) + public static String getLockScreenSubjectCachePath(Context context) { return context.getCacheDir().getAbsolutePath() + "/lswt.png"; } + + public static String getLockScreenBitmapCachePath(Context context) + { + return context.getCacheDir().getAbsolutePath() + "/lsw.jpg"; + } + } diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java index 912ec4dee..c6d982f05 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java @@ -24,8 +24,11 @@ import android.view.WindowManager; import android.widget.FrameLayout; +import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.util.Arrays; import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.callbacks.XC_LoadPackage; @@ -115,15 +118,17 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { } } }); + hookAllMethods(CanvasEngineClass, "drawFrameOnCanvas", new XC_MethodHook() { @SuppressLint("NewApi") @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { if(DWallpaperEnabled && isLockScreenWallpaper(param.thisObject)) { - invalidateLSWSC(); Bitmap wallpaperBitmap = Bitmap.createBitmap((Bitmap) param.args[0]); + boolean cacheIsValid = assertCache(wallpaperBitmap); + Rect displayBounds = ((Context) callMethod(param.thisObject, "getDisplayContext")).getSystemService(WindowManager.class) .getCurrentWindowMetrics() .getBounds(); @@ -149,7 +154,10 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { mWallpaperBackground.post(() -> mWallpaperBitmapContainer.setBackground(new BitmapDrawable(mContext.getResources(), finalScaledWallpaperBitmap))); - XPLauncher.enqueueProxyCommand(proxy -> proxy.extractSubject(finalScaledWallpaperBitmap, Constants.getLockScreenCachePath(mContext))); + if(!cacheIsValid) + { + XPLauncher.enqueueProxyCommand(proxy -> proxy.extractSubject(finalScaledWallpaperBitmap, Constants.getLockScreenSubjectCachePath(mContext))); + } } } }); @@ -179,6 +187,43 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { }); } + private boolean assertCache(Bitmap wallpaperBitmap) { + + boolean cacheIsValid = false; + try + { + File wallpaperCacheFile = new File(Constants.getLockScreenBitmapCachePath(mContext)); + + ByteArrayOutputStream compressedBitmap = new ByteArrayOutputStream(); + wallpaperBitmap.compress(Bitmap.CompressFormat.JPEG, 100, compressedBitmap); + if(wallpaperCacheFile.exists()) + { + FileInputStream cacheStream = new FileInputStream(wallpaperCacheFile); + + if(Arrays.equals(cacheStream.readAllBytes(), compressedBitmap.toByteArray())) + { + cacheIsValid = true; + } + else + { + FileOutputStream newCacheStream = new FileOutputStream(wallpaperCacheFile); + compressedBitmap.writeTo(newCacheStream); + newCacheStream.close(); + } + } + compressedBitmap.close(); + } + catch (Throwable ignored) + {} + + if(!cacheIsValid) + { + invalidateLSWSC(); + } + + return cacheIsValid; + } + private void createLayers() { mWallpaperBackground = new FrameLayout(mContext); mWallpaperDimmingOverlay = new FrameLayout(mContext); @@ -212,9 +257,9 @@ private void setDepthWallpaper() && state.equals("KEYGUARD") && (boolean) callMethod(mQS, "isFullyCollapsed")) { - if(!lockScreenSubjectCacheValid && new File(Constants.getLockScreenCachePath(mContext)).exists()) + if(!lockScreenSubjectCacheValid && new File(Constants.getLockScreenSubjectCachePath(mContext)).exists()) { - try (FileInputStream inputStream = new FileInputStream(Constants.getLockScreenCachePath(mContext))) + try (FileInputStream inputStream = new FileInputStream(Constants.getLockScreenSubjectCachePath(mContext))) { Drawable bitmapDrawable = BitmapDrawable.createFromStream(inputStream, ""); bitmapDrawable.setAlpha(255); @@ -265,7 +310,7 @@ private void invalidateLSWSC() //invalidate lock screen wallpaper subject cache } try { //noinspection ResultOfMethodCallIgnored - new File(Constants.getLockScreenCachePath(mContext)).delete(); + new File(Constants.getLockScreenSubjectCachePath(mContext)).delete(); } catch (Throwable ignored){} } From 7ce9ae4574aae822c5e0b08da24367a2824f0c6c Mon Sep 17 00:00:00 2001 From: Siavash Date: Tue, 16 Apr 2024 10:18:31 +0330 Subject: [PATCH 055/162] Depth Wallpaper: Added bitmap cache to increase performance and reduce MLKit calls --- .../siava/pixelxpert/modpacks/Constants.java | 8 ++- .../modpacks/systemui/DepthWallpaper.java | 56 +++++++++++++++++-- 2 files changed, 58 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/Constants.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/Constants.java index 0e38af0b0..44abeda0f 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/Constants.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/Constants.java @@ -33,8 +33,14 @@ public final class Constants { public static final List PREF_UPDATE_EXCLUSIONS = Arrays.asList(BootLoopProtector.LOAD_TIME_KEY_KEY, BootLoopProtector.PACKAGE_STRIKE_KEY_KEY); - public static String getLockScreenCachePath(Context context) + public static String getLockScreenSubjectCachePath(Context context) { return context.getCacheDir().getAbsolutePath() + "/lswt.png"; } + + public static String getLockScreenBitmapCachePath(Context context) + { + return context.getCacheDir().getAbsolutePath() + "/lsw.jpg"; + } + } diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java index 912ec4dee..f2b14cd32 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java @@ -24,8 +24,11 @@ import android.view.WindowManager; import android.widget.FrameLayout; +import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.util.Arrays; import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.callbacks.XC_LoadPackage; @@ -115,15 +118,17 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { } } }); + hookAllMethods(CanvasEngineClass, "drawFrameOnCanvas", new XC_MethodHook() { @SuppressLint("NewApi") @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { if(DWallpaperEnabled && isLockScreenWallpaper(param.thisObject)) { - invalidateLSWSC(); Bitmap wallpaperBitmap = Bitmap.createBitmap((Bitmap) param.args[0]); + boolean cacheIsValid = assertCache(wallpaperBitmap); + Rect displayBounds = ((Context) callMethod(param.thisObject, "getDisplayContext")).getSystemService(WindowManager.class) .getCurrentWindowMetrics() .getBounds(); @@ -149,7 +154,10 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { mWallpaperBackground.post(() -> mWallpaperBitmapContainer.setBackground(new BitmapDrawable(mContext.getResources(), finalScaledWallpaperBitmap))); - XPLauncher.enqueueProxyCommand(proxy -> proxy.extractSubject(finalScaledWallpaperBitmap, Constants.getLockScreenCachePath(mContext))); + if(!cacheIsValid) + { + XPLauncher.enqueueProxyCommand(proxy -> proxy.extractSubject(finalScaledWallpaperBitmap, Constants.getLockScreenSubjectCachePath(mContext))); + } } } }); @@ -179,6 +187,44 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { }); } + private boolean assertCache(Bitmap wallpaperBitmap) { + + boolean cacheIsValid = false; + try + { + File wallpaperCacheFile = new File(Constants.getLockScreenBitmapCachePath(mContext)); + + ByteArrayOutputStream compressedBitmap = new ByteArrayOutputStream(); + wallpaperBitmap.compress(Bitmap.CompressFormat.JPEG, 100, compressedBitmap); + if(wallpaperCacheFile.exists()) + { + FileInputStream cacheStream = new FileInputStream(wallpaperCacheFile); + + if(Arrays.equals(cacheStream.readAllBytes(), compressedBitmap.toByteArray())) + { + cacheIsValid = true; + } + else + { + FileOutputStream newCacheStream = new FileOutputStream(wallpaperCacheFile); + compressedBitmap.writeTo(newCacheStream); + newCacheStream.close(); + } + cacheStream.close(); + } + compressedBitmap.close(); + } + catch (Throwable ignored) + {} + + if(!cacheIsValid) + { + invalidateLSWSC(); + } + + return cacheIsValid; + } + private void createLayers() { mWallpaperBackground = new FrameLayout(mContext); mWallpaperDimmingOverlay = new FrameLayout(mContext); @@ -212,9 +258,9 @@ private void setDepthWallpaper() && state.equals("KEYGUARD") && (boolean) callMethod(mQS, "isFullyCollapsed")) { - if(!lockScreenSubjectCacheValid && new File(Constants.getLockScreenCachePath(mContext)).exists()) + if(!lockScreenSubjectCacheValid && new File(Constants.getLockScreenSubjectCachePath(mContext)).exists()) { - try (FileInputStream inputStream = new FileInputStream(Constants.getLockScreenCachePath(mContext))) + try (FileInputStream inputStream = new FileInputStream(Constants.getLockScreenSubjectCachePath(mContext))) { Drawable bitmapDrawable = BitmapDrawable.createFromStream(inputStream, ""); bitmapDrawable.setAlpha(255); @@ -265,7 +311,7 @@ private void invalidateLSWSC() //invalidate lock screen wallpaper subject cache } try { //noinspection ResultOfMethodCallIgnored - new File(Constants.getLockScreenCachePath(mContext)).delete(); + new File(Constants.getLockScreenSubjectCachePath(mContext)).delete(); } catch (Throwable ignored){} } From 5ed3b8c38083b6fefd4b5deaf58b0650fa1566b7 Mon Sep 17 00:00:00 2001 From: Siavash Date: Tue, 16 Apr 2024 13:25:13 +0330 Subject: [PATCH 056/162] CHANGELOG: Depth Wallpaper: bugfixes and performance improvement --- .github/edit2MakeNewCanary | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/edit2MakeNewCanary b/.github/edit2MakeNewCanary index 04ad0604c..65aeddb0b 100644 --- a/.github/edit2MakeNewCanary +++ b/.github/edit2MakeNewCanary @@ -1 +1 @@ -Editing this file will trigger the build script for a new canary.. \ No newline at end of file +Editing this file will trigger the build script for a new canary. \ No newline at end of file From 79f6f457994894231f67138f54bd6b65518baeae Mon Sep 17 00:00:00 2001 From: GitHub Date: Tue, 16 Apr 2024 09:57:35 +0000 Subject: [PATCH 057/162] Version update: Release --- CanaryChangelog.md | 3 +++ MagiskModBase/module.prop | 4 ++-- MagiskModuleUpdate_Full.json | 4 ++-- MagiskModuleUpdate_Xposed.json | 4 ++-- app/build.gradle | 4 ++-- latestCanary.json | 4 ++-- 6 files changed, 13 insertions(+), 10 deletions(-) diff --git a/CanaryChangelog.md b/CanaryChangelog.md index 1055f3f43..483ea7ea1 100644 --- a/CanaryChangelog.md +++ b/CanaryChangelog.md @@ -1,3 +1,6 @@ +**canary-348** +- Depth Wallpaper: bugfixes and performance improvement + **canary-347** - Depth wallpaper: fixed screen obstruction during HUN diff --git a/MagiskModBase/module.prop b/MagiskModBase/module.prop index 261fe9d67..5df6878e8 100644 --- a/MagiskModBase/module.prop +++ b/MagiskModBase/module.prop @@ -1,7 +1,7 @@ id=PixelXpert name=Pixel Xpert -version=canary-347 -versionCode=347 +version=canary-348 +versionCode=348 author=Pixel Xpert Team description=Xposed based module for customizations on Pixel roms. Android 13+ updateJson=https://raw.githubusercontent.com/siavash79/PixelXpert/canary/MagiskModuleUpdate_Xposed.json diff --git a/MagiskModuleUpdate_Full.json b/MagiskModuleUpdate_Full.json index 593188df3..e2f6d757b 100644 --- a/MagiskModuleUpdate_Full.json +++ b/MagiskModuleUpdate_Full.json @@ -1,6 +1,6 @@ { - "version": "canary-347", - "versionCode": 347, + "version": "canary-348", + "versionCode": 348, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/MagiskModuleUpdate_Xposed.json b/MagiskModuleUpdate_Xposed.json index 593188df3..e2f6d757b 100644 --- a/MagiskModuleUpdate_Xposed.json +++ b/MagiskModuleUpdate_Xposed.json @@ -1,6 +1,6 @@ { - "version": "canary-347", - "versionCode": 347, + "version": "canary-348", + "versionCode": 348, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index c19ac78a1..56af37fb3 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "sh.siava.pixelxpert" minSdk 33 targetSdk 34 - versionCode 347 - versionName "canary-347" + versionCode 348 + versionName "canary-348" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/latestCanary.json b/latestCanary.json index d119b3eee..6d8144999 100644 --- a/latestCanary.json +++ b/latestCanary.json @@ -1,6 +1,6 @@ { - "version": "canary-347", - "versionCode": 347, + "version": "canary-348", + "versionCode": 348, "zipUrl_Xposed": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "zipUrl_Full": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" From aedf536819061d4d1d35eb92f9bf520cf72395cd Mon Sep 17 00:00:00 2001 From: Siavash Date: Tue, 16 Apr 2024 16:49:34 +0330 Subject: [PATCH 058/162] CHANGELOG: A15ap31: Fixed forced themed icons on pixel launcher --- .github/edit2MakeNewCanary | 2 +- .../modpacks/launcher/FeatureFlags.java | 23 ++- .../utils/GoogleMonochromeIconFactory.java | 189 ++++++++++++++++++ 3 files changed, 202 insertions(+), 12 deletions(-) create mode 100644 app/src/main/java/sh/siava/pixelxpert/modpacks/utils/GoogleMonochromeIconFactory.java diff --git a/.github/edit2MakeNewCanary b/.github/edit2MakeNewCanary index 65aeddb0b..04ad0604c 100644 --- a/.github/edit2MakeNewCanary +++ b/.github/edit2MakeNewCanary @@ -1 +1 @@ -Editing this file will trigger the build script for a new canary. \ No newline at end of file +Editing this file will trigger the build script for a new canary.. \ No newline at end of file diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/FeatureFlags.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/FeatureFlags.java index 31df7363a..244b661b9 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/FeatureFlags.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/FeatureFlags.java @@ -1,24 +1,26 @@ package sh.siava.pixelxpert.modpacks.launcher; import static de.robv.android.xposed.XposedBridge.hookAllMethods; -import static de.robv.android.xposed.XposedHelpers.callMethod; import static de.robv.android.xposed.XposedHelpers.findClass; +import static de.robv.android.xposed.XposedHelpers.getAdditionalInstanceField; import static de.robv.android.xposed.XposedHelpers.getIntField; -import static de.robv.android.xposed.XposedHelpers.getObjectField; -import static de.robv.android.xposed.XposedHelpers.setObjectField; +import static de.robv.android.xposed.XposedHelpers.setAdditionalInstanceField; import static sh.siava.pixelxpert.modpacks.XPrefs.Xprefs; import android.content.Context; import android.graphics.drawable.AdaptiveIconDrawable; +import android.graphics.drawable.Drawable; import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.callbacks.XC_LoadPackage; import sh.siava.pixelxpert.modpacks.Constants; import sh.siava.pixelxpert.modpacks.XposedModPack; +import sh.siava.pixelxpert.modpacks.utils.GoogleMonochromeIconFactory; @SuppressWarnings("RedundantThrows") public class FeatureFlags extends XposedModPack { private static final String listenPackage = Constants.LAUNCHER_PACKAGE; + private static final String FACTORY_FIELD_NAME = "mMonochromeIconFactoryPX"; private static boolean ForceThemedLauncherIcons = false; @@ -39,9 +41,9 @@ public boolean listensTo(String packageName) { @Override public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { try { - Class FeatureFlags = findClass("com.android.launcher3.config.FeatureFlags", lpparam.classLoader); +// Class FeatureFlags = findClass("com.android.launcher3.config.FeatureFlags", lpparam.classLoader); Class LauncherIconsClass = findClass("com.android.launcher3.icons.LauncherIcons", lpparam.classLoader); - + Class ClippedMonoDrawableClass = findClass("com.android.launcher3.icons.BaseIconFactory$ClippedMonoDrawable", lpparam.classLoader); hookAllMethods(LauncherIconsClass, "getMonochromeDrawable", new XC_MethodHook() { //flag doesn't work on A14B3 for some reason @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { @@ -52,15 +54,14 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { if(!(param.args[0] instanceof AdaptiveIconDrawable) || ((AdaptiveIconDrawable) param.args[0]).getMonochrome() == null) { //at this point it's clear that we don't have a monochrome icon - Object mMonochromeIconFactory = getObjectField(param.thisObject, "mMonochromeIconFactory"); - if(mMonochromeIconFactory == null) + GoogleMonochromeIconFactory mGoogleMonochromeIconFactory = (GoogleMonochromeIconFactory) getAdditionalInstanceField(param.thisObject, FACTORY_FIELD_NAME); + if(mGoogleMonochromeIconFactory == null) { - Class MonochromeIconFactoryClass = findClass("com.android.launcher3.icons.MonochromeIconFactory", lpparam.classLoader); int mIconBitmapSize = getIntField(param.thisObject, "mIconBitmapSize"); - mMonochromeIconFactory = MonochromeIconFactoryClass.getConstructors()[0].newInstance(mIconBitmapSize); - setObjectField(param.thisObject, "mMonochromeIconFactory", mMonochromeIconFactory); + mGoogleMonochromeIconFactory = new GoogleMonochromeIconFactory(ClippedMonoDrawableClass, mIconBitmapSize); + setAdditionalInstanceField(param.thisObject, FACTORY_FIELD_NAME, mGoogleMonochromeIconFactory); } - param.setResult(callMethod(mMonochromeIconFactory, "wrap", param.args[0])); + param.setResult(mGoogleMonochromeIconFactory.wrap((Drawable) param.args[0])); } } catch (Throwable ignored){} diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/GoogleMonochromeIconFactory.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/GoogleMonochromeIconFactory.java new file mode 100644 index 000000000..69ec78fdf --- /dev/null +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/GoogleMonochromeIconFactory.java @@ -0,0 +1,189 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package sh.siava.pixelxpert.modpacks.utils; + +import static android.graphics.Paint.FILTER_BITMAP_FLAG; + +import android.graphics.Bitmap; +import android.graphics.Bitmap.Config; +import android.graphics.BlendMode; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.ColorFilter; +import android.graphics.ColorMatrix; +import android.graphics.ColorMatrixColorFilter; +import android.graphics.Paint; +import android.graphics.PixelFormat; +import android.graphics.Rect; +import android.graphics.drawable.AdaptiveIconDrawable; +import android.graphics.drawable.Drawable; + +import androidx.annotation.WorkerThread; + +import java.nio.ByteBuffer; + +/** + * Utility class to generate monochrome icons version for a given drawable. + */ +public class GoogleMonochromeIconFactory extends Drawable { + Class mClippedMonoDrawableClass; + + private final Bitmap mFlatBitmap; + private final Canvas mFlatCanvas; + private final Paint mCopyPaint; + + private final Bitmap mAlphaBitmap; + private final Canvas mAlphaCanvas; + private final byte[] mPixels; + + private final int mBitmapSize; + private final int mEdgePixelLength; + + private final Paint mDrawPaint; + private final Rect mSrcRect; + + public GoogleMonochromeIconFactory(Class ClippedMonoDrawableClass, int iconBitmapSize) { + mClippedMonoDrawableClass = ClippedMonoDrawableClass; + + float extraFactor = AdaptiveIconDrawable.getExtraInsetFraction(); + float viewPortScale = 1 / (1 + 2 * extraFactor); + mBitmapSize = Math.round(iconBitmapSize * 2 * viewPortScale); + mPixels = new byte[mBitmapSize * mBitmapSize]; + mEdgePixelLength = mBitmapSize * (mBitmapSize - iconBitmapSize) / 2; + + mFlatBitmap = Bitmap.createBitmap(mBitmapSize, mBitmapSize, Config.ARGB_8888); + mFlatCanvas = new Canvas(mFlatBitmap); + + mAlphaBitmap = Bitmap.createBitmap(mBitmapSize, mBitmapSize, Config.ALPHA_8); + mAlphaCanvas = new Canvas(mAlphaBitmap); + + mDrawPaint = new Paint(FILTER_BITMAP_FLAG); + mDrawPaint.setColor(Color.WHITE); + mSrcRect = new Rect(0, 0, mBitmapSize, mBitmapSize); + + mCopyPaint = new Paint(FILTER_BITMAP_FLAG); + mCopyPaint.setBlendMode(BlendMode.SRC); + + // Crate a color matrix which converts the icon to grayscale and then uses the average + // of RGB components as the alpha component. + ColorMatrix satMatrix = new ColorMatrix(); + satMatrix.setSaturation(0); + float[] vals = satMatrix.getArray(); + vals[15] = vals[16] = vals[17] = .3333f; + vals[18] = vals[19] = 0; + mCopyPaint.setColorFilter(new ColorMatrixColorFilter(vals)); + } + + private void drawDrawable(Drawable drawable) { + if (drawable != null) { + drawable.setBounds(0, 0, mBitmapSize, mBitmapSize); + drawable.draw(mFlatCanvas); + } + } + + /** + * Creates a monochrome version of the provided drawable + */ + @WorkerThread + public Drawable wrap(Drawable icon) { + try + { + if (icon instanceof AdaptiveIconDrawable) { + AdaptiveIconDrawable aid = (AdaptiveIconDrawable) icon; + mFlatCanvas.drawColor(Color.BLACK); + drawDrawable(aid.getBackground()); + drawDrawable(aid.getForeground()); + generateMono(); + return (Drawable) mClippedMonoDrawableClass.getConstructors()[0].newInstance(this); + } + } + catch (Throwable ignored){} + + try { + mFlatCanvas.drawColor(Color.WHITE); + drawDrawable(icon); + generateMono(); + return (Drawable) mClippedMonoDrawableClass.getConstructors()[0].newInstance(this); + } + catch (Throwable ignored) + { // WTF?! + return null; + } + } + + @WorkerThread + private void generateMono() { + mAlphaCanvas.drawBitmap(mFlatBitmap, 0, 0, mCopyPaint); + + // Scale the end points: + ByteBuffer buffer = ByteBuffer.wrap(mPixels); + buffer.rewind(); + mAlphaBitmap.copyPixelsToBuffer(buffer); + + int min = 0xFF; + int max = 0; + for (byte b : mPixels) { + min = Math.min(min, b & 0xFF); + max = Math.max(max, b & 0xFF); + } + + if (min < max) { + // rescale pixels to increase contrast + float range = max - min; + + // In order to check if the colors should be flipped, we just take the average color + // of top and bottom edge which should correspond to be background color. If the edge + // colors have more opacity, we flip the colors; + int sum = 0; + for (int i = 0; i < mEdgePixelLength; i++) { + sum += (mPixels[i] & 0xFF); + sum += (mPixels[mPixels.length - 1 - i] & 0xFF); + } + float edgeAverage = sum / (mEdgePixelLength * 2f); + float edgeMapped = (edgeAverage - min) / range; + boolean flipColor = edgeMapped > .5f; + + for (int i = 0; i < mPixels.length; i++) { + int p = mPixels[i] & 0xFF; + int p2 = Math.round((p - min) * 0xFF / range); + mPixels[i] = flipColor ? (byte) (255 - p2) : (byte) (p2); + } + buffer.rewind(); + mAlphaBitmap.copyPixelsFromBuffer(buffer); + } + } + + @Override + public void draw(Canvas canvas) { + canvas.drawBitmap(mAlphaBitmap, mSrcRect, getBounds(), mDrawPaint); + } + + @Override + public int getOpacity() { + return PixelFormat.TRANSLUCENT; + } + + @Override + public void setAlpha(int i) { + mDrawPaint.setAlpha(i); + } + + @Override + public void setColorFilter(ColorFilter colorFilter) { + mDrawPaint.setColorFilter(colorFilter); + } +} \ No newline at end of file From 7c639f24c0ca09d66ed4cdd5f4198c774541ce1c Mon Sep 17 00:00:00 2001 From: GitHub Date: Tue, 16 Apr 2024 13:22:51 +0000 Subject: [PATCH 059/162] Version update: Release --- CanaryChangelog.md | 3 +++ MagiskModBase/module.prop | 4 ++-- MagiskModuleUpdate_Full.json | 4 ++-- MagiskModuleUpdate_Xposed.json | 4 ++-- app/build.gradle | 4 ++-- latestCanary.json | 4 ++-- 6 files changed, 13 insertions(+), 10 deletions(-) diff --git a/CanaryChangelog.md b/CanaryChangelog.md index 483ea7ea1..db53d6f9c 100644 --- a/CanaryChangelog.md +++ b/CanaryChangelog.md @@ -1,3 +1,6 @@ +**canary-349** +- A15ap31: Fixed forced themed icons on pixel launcher + **canary-348** - Depth Wallpaper: bugfixes and performance improvement diff --git a/MagiskModBase/module.prop b/MagiskModBase/module.prop index 5df6878e8..315294197 100644 --- a/MagiskModBase/module.prop +++ b/MagiskModBase/module.prop @@ -1,7 +1,7 @@ id=PixelXpert name=Pixel Xpert -version=canary-348 -versionCode=348 +version=canary-349 +versionCode=349 author=Pixel Xpert Team description=Xposed based module for customizations on Pixel roms. Android 13+ updateJson=https://raw.githubusercontent.com/siavash79/PixelXpert/canary/MagiskModuleUpdate_Xposed.json diff --git a/MagiskModuleUpdate_Full.json b/MagiskModuleUpdate_Full.json index e2f6d757b..b20207073 100644 --- a/MagiskModuleUpdate_Full.json +++ b/MagiskModuleUpdate_Full.json @@ -1,6 +1,6 @@ { - "version": "canary-348", - "versionCode": 348, + "version": "canary-349", + "versionCode": 349, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/MagiskModuleUpdate_Xposed.json b/MagiskModuleUpdate_Xposed.json index e2f6d757b..b20207073 100644 --- a/MagiskModuleUpdate_Xposed.json +++ b/MagiskModuleUpdate_Xposed.json @@ -1,6 +1,6 @@ { - "version": "canary-348", - "versionCode": 348, + "version": "canary-349", + "versionCode": 349, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 56af37fb3..522e09a91 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "sh.siava.pixelxpert" minSdk 33 targetSdk 34 - versionCode 348 - versionName "canary-348" + versionCode 349 + versionName "canary-349" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/latestCanary.json b/latestCanary.json index 6d8144999..67d1095fe 100644 --- a/latestCanary.json +++ b/latestCanary.json @@ -1,6 +1,6 @@ { - "version": "canary-348", - "versionCode": 348, + "version": "canary-349", + "versionCode": 349, "zipUrl_Xposed": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "zipUrl_Full": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" From f7b5517b3669a2676153a0b64c38d35e1c8a1919 Mon Sep 17 00:00:00 2001 From: Siavash Date: Wed, 17 Apr 2024 09:34:06 +0330 Subject: [PATCH 060/162] CHANGELOG: Experimental: unlocked depth wallpaper for Android 13 --- app/src/main/AndroidManifest.xml | 4 ++++ .../sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java | 1 - .../main/java/sh/siava/pixelxpert/utils/PreferenceHelper.java | 1 - 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index aa6240079..9605b6a77 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -102,6 +102,10 @@ android:exported="true" tools:ignore="ExportedContentProvider" /> + + diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java index f2b14cd32..4b043821a 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java @@ -120,7 +120,6 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { }); hookAllMethods(CanvasEngineClass, "drawFrameOnCanvas", new XC_MethodHook() { - @SuppressLint("NewApi") @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { if(DWallpaperEnabled && isLockScreenWallpaper(param.thisObject)) diff --git a/app/src/main/java/sh/siava/pixelxpert/utils/PreferenceHelper.java b/app/src/main/java/sh/siava/pixelxpert/utils/PreferenceHelper.java index 398c6eb27..04054ddbb 100644 --- a/app/src/main/java/sh/siava/pixelxpert/utils/PreferenceHelper.java +++ b/app/src/main/java/sh/siava/pixelxpert/utils/PreferenceHelper.java @@ -60,7 +60,6 @@ public static boolean isVisible(String key) { case "DisableLockScreenPill": case "ForceThemedLauncherIcons": case "DisableOngoingNotifDismiss": - case "DWallpaperEnabled": return Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE; case "enablePowerMenuTheme": From aeb754eb4543afc6050f13fd974026a965a19123 Mon Sep 17 00:00:00 2001 From: Siavash Date: Wed, 17 Apr 2024 10:11:57 +0330 Subject: [PATCH 061/162] Added mlkit model downloader codes. just in case --- app/build.gradle | 1 + .../utils/BitmapSubjectSegmenter.java | 26 ++++++++++++++++++- .../pixelxpert/service/RootProviderProxy.java | 2 +- settings.gradle | 7 +++++ 4 files changed, 34 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 522e09a91..df559ead3 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -128,4 +128,5 @@ dependencies { //Google Subject Segmentation - MLKit implementation 'com.google.android.gms:play-services-mlkit-subject-segmentation:16.0.0-beta1' + implementation 'com.google.android.gms:play-services-base:18.4.0' } \ No newline at end of file diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/BitmapSubjectSegmenter.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/BitmapSubjectSegmenter.java index 7c228dce2..c6c21a484 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/BitmapSubjectSegmenter.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/BitmapSubjectSegmenter.java @@ -1,8 +1,12 @@ package sh.siava.pixelxpert.modpacks.utils; +import android.content.Context; import android.graphics.Bitmap; import android.graphics.Color; +import com.google.android.gms.common.moduleinstall.ModuleInstall; +import com.google.android.gms.common.moduleinstall.ModuleInstallClient; +import com.google.android.gms.common.moduleinstall.ModuleInstallRequest; import com.google.mlkit.vision.common.InputImage; import com.google.mlkit.vision.segmentation.subject.SubjectSegmentation; import com.google.mlkit.vision.segmentation.subject.SubjectSegmenter; @@ -12,12 +16,32 @@ public class BitmapSubjectSegmenter { SubjectSegmenter mSegmenter; - public BitmapSubjectSegmenter() + public BitmapSubjectSegmenter(Context context) { mSegmenter = SubjectSegmentation.getClient( new SubjectSegmenterOptions.Builder() .enableForegroundConfidenceMask() .build()); + + downloadModelIfNeeded(context); + } + + public void downloadModelIfNeeded(Context context) + { + ModuleInstallClient moduleInstallClient = ModuleInstall.getClient(context); + + moduleInstallClient + .areModulesAvailable(mSegmenter) + .addOnSuccessListener( + response -> { + if (!response.areModulesAvailable()) { + moduleInstallClient + .installModules( + ModuleInstallRequest.newBuilder() + .addApi(mSegmenter) + .build()); + } + }); } public void segmentSubject(Bitmap inputBitmap, SegmentResultListener listener) diff --git a/app/src/main/java/sh/siava/pixelxpert/service/RootProviderProxy.java b/app/src/main/java/sh/siava/pixelxpert/service/RootProviderProxy.java index 6a7ffdfc5..f27604869 100644 --- a/app/src/main/java/sh/siava/pixelxpert/service/RootProviderProxy.java +++ b/app/src/main/java/sh/siava/pixelxpert/service/RootProviderProxy.java @@ -67,7 +67,7 @@ public void extractSubject(Bitmap input, String resultPath) throws RemoteExcepti ensureEnvironment(); try { - new BitmapSubjectSegmenter().segmentSubject(input, new BitmapSubjectSegmenter.SegmentResultListener() { + new BitmapSubjectSegmenter(getApplicationContext()).segmentSubject(input, new BitmapSubjectSegmenter.SegmentResultListener() { @Override public void onSuccess(Bitmap result) { try { diff --git a/settings.gradle b/settings.gradle index b1d93786e..e1fd414c2 100644 --- a/settings.gradle +++ b/settings.gradle @@ -3,3 +3,10 @@ include ':app' include ':RangeSliderPreference' project(':RangeSliderPreference').projectDir = new File(rootDir, 'Submodules/RangeSliderPreference/') + +dependencyResolutionManagement { + repositories { + google() + mavenCentral() + } +} \ No newline at end of file From 0b8be5a14cce288e11eedaebe8a8a56c0c704a39 Mon Sep 17 00:00:00 2001 From: Siavash Date: Thu, 18 Apr 2024 10:33:13 +0330 Subject: [PATCH 062/162] Update edit2MakeNewCanary --- .github/edit2MakeNewCanary | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/edit2MakeNewCanary b/.github/edit2MakeNewCanary index 04ad0604c..65aeddb0b 100644 --- a/.github/edit2MakeNewCanary +++ b/.github/edit2MakeNewCanary @@ -1 +1 @@ -Editing this file will trigger the build script for a new canary.. \ No newline at end of file +Editing this file will trigger the build script for a new canary. \ No newline at end of file From fc9ea1d30521d5284302d66c1924517f73a8bdd3 Mon Sep 17 00:00:00 2001 From: GitHub Date: Thu, 18 Apr 2024 07:05:34 +0000 Subject: [PATCH 063/162] Version update: Release --- CanaryChangelog.md | 3 +++ MagiskModBase/module.prop | 4 ++-- MagiskModuleUpdate_Full.json | 4 ++-- MagiskModuleUpdate_Xposed.json | 4 ++-- app/build.gradle | 4 ++-- latestCanary.json | 4 ++-- 6 files changed, 13 insertions(+), 10 deletions(-) diff --git a/CanaryChangelog.md b/CanaryChangelog.md index db53d6f9c..08d83104b 100644 --- a/CanaryChangelog.md +++ b/CanaryChangelog.md @@ -1,3 +1,6 @@ +**canary-350** +- Experimental: unlocked depth wallpaper for Android 13 + **canary-349** - A15ap31: Fixed forced themed icons on pixel launcher diff --git a/MagiskModBase/module.prop b/MagiskModBase/module.prop index 315294197..65dd3b253 100644 --- a/MagiskModBase/module.prop +++ b/MagiskModBase/module.prop @@ -1,7 +1,7 @@ id=PixelXpert name=Pixel Xpert -version=canary-349 -versionCode=349 +version=canary-350 +versionCode=350 author=Pixel Xpert Team description=Xposed based module for customizations on Pixel roms. Android 13+ updateJson=https://raw.githubusercontent.com/siavash79/PixelXpert/canary/MagiskModuleUpdate_Xposed.json diff --git a/MagiskModuleUpdate_Full.json b/MagiskModuleUpdate_Full.json index b20207073..e0c5fed44 100644 --- a/MagiskModuleUpdate_Full.json +++ b/MagiskModuleUpdate_Full.json @@ -1,6 +1,6 @@ { - "version": "canary-349", - "versionCode": 349, + "version": "canary-350", + "versionCode": 350, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/MagiskModuleUpdate_Xposed.json b/MagiskModuleUpdate_Xposed.json index b20207073..e0c5fed44 100644 --- a/MagiskModuleUpdate_Xposed.json +++ b/MagiskModuleUpdate_Xposed.json @@ -1,6 +1,6 @@ { - "version": "canary-349", - "versionCode": 349, + "version": "canary-350", + "versionCode": 350, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index df559ead3..441a185c0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "sh.siava.pixelxpert" minSdk 33 targetSdk 34 - versionCode 349 - versionName "canary-349" + versionCode 350 + versionName "canary-350" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/latestCanary.json b/latestCanary.json index 67d1095fe..f207a8332 100644 --- a/latestCanary.json +++ b/latestCanary.json @@ -1,6 +1,6 @@ { - "version": "canary-349", - "versionCode": 349, + "version": "canary-350", + "versionCode": 350, "zipUrl_Xposed": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "zipUrl_Full": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" From 1310884d067393f0a93f19fdbeca344e5208c5ba Mon Sep 17 00:00:00 2001 From: Siavash Date: Sat, 20 Apr 2024 08:53:21 +0330 Subject: [PATCH 064/162] CHANGELOG: Added: option to remove PixelXpert shortcut from phone settings --- .../modpacks/settings/PXSettingsLauncher.java | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/settings/PXSettingsLauncher.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/settings/PXSettingsLauncher.java index 6848ca93a..81b944293 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/settings/PXSettingsLauncher.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/settings/PXSettingsLauncher.java @@ -4,6 +4,7 @@ import static de.robv.android.xposed.XposedHelpers.callMethod; import static de.robv.android.xposed.XposedHelpers.findClass; import static de.robv.android.xposed.XposedHelpers.getObjectField; +import static sh.siava.pixelxpert.modpacks.XPrefs.Xprefs; import android.content.Context; import android.content.Intent; @@ -23,13 +24,17 @@ public class PXSettingsLauncher extends XposedModPack { private static final String listenPackage = Constants.SETTINGS_PACKAGE; + private static boolean PXInSettings = true; + public PXSettingsLauncher(Context context) { super(context); } @Override - public void updatePrefs(String... Key) {} + public void updatePrefs(String... Key) { + PXInSettings = Xprefs.getBoolean("PXInSettings", true); + } @Override public boolean listensTo(String packageName) { @@ -57,16 +62,18 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { hookAllMethods(TopLevelSettingsClass, "onCreateAdapter", new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - Object PXPreference = HomepagePreferenceClass.getConstructor(Context.class).newInstance(mContext); + if (PXInSettings) { + Object PXPreference = HomepagePreferenceClass.getConstructor(Context.class).newInstance(mContext); - callMethod(PXPreference, "setIcon", - ResourcesCompat.getDrawable(ResourceManager.modRes, - R.drawable.ic_notification_foreground, - mContext.getTheme())); - callMethod(PXPreference, "setTitle", ResourceManager.modRes.getString(R.string.app_name)); - callMethod(PXPreference, "setOrder", 9999); + callMethod(PXPreference, "setIcon", + ResourcesCompat.getDrawable(ResourceManager.modRes, + R.drawable.ic_notification_foreground, + mContext.getTheme())); + callMethod(PXPreference, "setTitle", ResourceManager.modRes.getString(R.string.app_name)); + callMethod(PXPreference, "setOrder", 9999); - callMethod(param.args[0], "addPreference", PXPreference); + callMethod(param.args[0], "addPreference", PXPreference); + } } }); } From 44c973f15f4b1a56697bdc8c5872bcf787f8a2fd Mon Sep 17 00:00:00 2001 From: DrDisagree Date: Sat, 20 Apr 2024 15:44:25 +0600 Subject: [PATCH 065/162] UI: Add PX to settings items --- app/src/main/res/values/strings.xml | 1 + app/src/main/res/xml/misc_prefs.xml | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8ff04e9bf..bfd6ea91a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -327,6 +327,7 @@ Keep always on display enabled while device is charging While screen is off… Custom themed icons + Add PixelXpert to settings items Custom icons disabled Custom icons enabled Long press Volume buttons to skip music diff --git a/app/src/main/res/xml/misc_prefs.xml b/app/src/main/res/xml/misc_prefs.xml index 8898beb76..6ed049622 100644 --- a/app/src/main/res/xml/misc_prefs.xml +++ b/app/src/main/res/xml/misc_prefs.xml @@ -16,6 +16,14 @@ android:title="@string/custom_themed_icons_title" app:iconSpaceReserved="false" /> + + Date: Sat, 20 Apr 2024 14:19:31 +0330 Subject: [PATCH 066/162] canary release --- .github/edit2MakeNewCanary | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/edit2MakeNewCanary b/.github/edit2MakeNewCanary index 65aeddb0b..04ad0604c 100644 --- a/.github/edit2MakeNewCanary +++ b/.github/edit2MakeNewCanary @@ -1 +1 @@ -Editing this file will trigger the build script for a new canary. \ No newline at end of file +Editing this file will trigger the build script for a new canary.. \ No newline at end of file From ca46c3147c90466dae2fda7c7aa3d818bf34057a Mon Sep 17 00:00:00 2001 From: GitHub Date: Sat, 20 Apr 2024 10:52:11 +0000 Subject: [PATCH 067/162] Version update: Release --- CanaryChangelog.md | 3 +++ MagiskModBase/module.prop | 4 ++-- MagiskModuleUpdate_Full.json | 4 ++-- MagiskModuleUpdate_Xposed.json | 4 ++-- app/build.gradle | 4 ++-- latestCanary.json | 4 ++-- 6 files changed, 13 insertions(+), 10 deletions(-) diff --git a/CanaryChangelog.md b/CanaryChangelog.md index 08d83104b..586edaee5 100644 --- a/CanaryChangelog.md +++ b/CanaryChangelog.md @@ -1,3 +1,6 @@ +**canary-351** +- Added: option to remove PixelXpert shortcut from phone settings + **canary-350** - Experimental: unlocked depth wallpaper for Android 13 diff --git a/MagiskModBase/module.prop b/MagiskModBase/module.prop index 65dd3b253..b4d048b31 100644 --- a/MagiskModBase/module.prop +++ b/MagiskModBase/module.prop @@ -1,7 +1,7 @@ id=PixelXpert name=Pixel Xpert -version=canary-350 -versionCode=350 +version=canary-351 +versionCode=351 author=Pixel Xpert Team description=Xposed based module for customizations on Pixel roms. Android 13+ updateJson=https://raw.githubusercontent.com/siavash79/PixelXpert/canary/MagiskModuleUpdate_Xposed.json diff --git a/MagiskModuleUpdate_Full.json b/MagiskModuleUpdate_Full.json index e0c5fed44..758007b65 100644 --- a/MagiskModuleUpdate_Full.json +++ b/MagiskModuleUpdate_Full.json @@ -1,6 +1,6 @@ { - "version": "canary-350", - "versionCode": 350, + "version": "canary-351", + "versionCode": 351, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/MagiskModuleUpdate_Xposed.json b/MagiskModuleUpdate_Xposed.json index e0c5fed44..758007b65 100644 --- a/MagiskModuleUpdate_Xposed.json +++ b/MagiskModuleUpdate_Xposed.json @@ -1,6 +1,6 @@ { - "version": "canary-350", - "versionCode": 350, + "version": "canary-351", + "versionCode": 351, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 441a185c0..aa8a13700 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "sh.siava.pixelxpert" minSdk 33 targetSdk 34 - versionCode 350 - versionName "canary-350" + versionCode 351 + versionName "canary-351" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/latestCanary.json b/latestCanary.json index f207a8332..a15b8a465 100644 --- a/latestCanary.json +++ b/latestCanary.json @@ -1,6 +1,6 @@ { - "version": "canary-350", - "versionCode": 350, + "version": "canary-351", + "versionCode": 351, "zipUrl_Xposed": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "zipUrl_Full": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" From 31fc17a73b334df5172fee89909abbe53d659cfd Mon Sep 17 00:00:00 2001 From: Crowdin Bot Date: Sun, 21 Apr 2024 00:47:38 +0000 Subject: [PATCH 068/162] New Crowdin translations by GitHub Action --- app/src/main/res/values-af-rZA/strings.xml | 1 + app/src/main/res/values-ar-rSA/strings.xml | 1 + app/src/main/res/values-cs-rCZ/strings.xml | 1 + app/src/main/res/values-da-rDK/strings.xml | 1 + app/src/main/res/values-de-rDE/strings.xml | 1 + app/src/main/res/values-el-rGR/strings.xml | 1 + app/src/main/res/values-es-rES/strings.xml | 1 + app/src/main/res/values-fa-rIR/strings.xml | 1 + app/src/main/res/values-fi-rFI/strings.xml | 1 + app/src/main/res/values-fr-rFR/strings.xml | 1 + app/src/main/res/values-hi-rIN/strings.xml | 1 + app/src/main/res/values-hu-rHU/strings.xml | 15 ++++++++------- app/src/main/res/values-it-rIT/strings.xml | 1 + app/src/main/res/values-iw-rIL/strings.xml | 1 + app/src/main/res/values-ja-rJP/strings.xml | 1 + app/src/main/res/values-ko-rKR/strings.xml | 1 + app/src/main/res/values-nl-rNL/strings.xml | 1 + app/src/main/res/values-no-rNO/strings.xml | 1 + app/src/main/res/values-pl-rPL/strings.xml | 1 + app/src/main/res/values-pt-rPT/strings.xml | 1 + app/src/main/res/values-ro-rRO/strings.xml | 1 + app/src/main/res/values-ru-rRU/strings.xml | 1 + app/src/main/res/values-sr-rSP/strings.xml | 1 + app/src/main/res/values-sv-rSE/strings.xml | 1 + app/src/main/res/values-tr-rTR/strings.xml | 1 + app/src/main/res/values-uk-rUA/strings.xml | 1 + app/src/main/res/values-vi-rVN/strings.xml | 1 + app/src/main/res/values-zh-rCN/strings.xml | 1 + app/src/main/res/values-zh-rTW/strings.xml | 18 +++++++++++++----- 29 files changed, 48 insertions(+), 12 deletions(-) diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml index 9d2172ca9..1c1433803 100644 --- a/app/src/main/res/values-af-rZA/strings.xml +++ b/app/src/main/res/values-af-rZA/strings.xml @@ -289,6 +289,7 @@ Keep always on display enabled while device is charging Terwyl skerm af is… Pasgemaakte tema-ikone + Add PixelXpert to settings items Gepasmaakte ikone gedeaktiveer Gepasmaakte ikone geaktiveer Druk lank op Volume-knoppies om musiek oor te slaan diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index 515698905..3755f0961 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -289,6 +289,7 @@ إظهار الوقت والمعلومات دائما أثناء شحن الجهاز أثناء إيقاف الشاشة… الأيقونات المخصصة للموضوع + Add PixelXpert to settings items الرموز المخصصة معطلة تم تمكين الأيقونات المخصصة اضغط مطولاً على أزرار الصوت لتخطي الموسيقى diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index 14d0198bd..b7a134e5c 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -289,6 +289,7 @@ Keep always on display enabled while device is charging Když je obrazovka vypnutá… Vlastní tématické ikony + Add PixelXpert to settings items Vlastní ikony jsou zakázány Vlastní ikony povoleny Dlouhým stisknutím tlačítek hlasitosti přeskočíte hudbu diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml index 8d9156a13..578029681 100644 --- a/app/src/main/res/values-da-rDK/strings.xml +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -289,6 +289,7 @@ Keep always on display enabled while device is charging Mens skærmen er slukket… Brugerdefinerede temaikoner + Add PixelXpert to settings items Brugerdefinerede ikoner deaktiveret Brugerdefinerede ikoner aktiveret Tryk længe på lydstyrkeknapperne for at springe musik over diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index 11de9024d..8fbf27e7b 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -289,6 +289,7 @@ AOD während des Ladevorgangs aktiviert lassen Während der Bildschirm aus ist… Benutzerdefiniertes Symbolthema + Add PixelXpert to settings items Benutzerdefinierte Symbole deaktiviert Benutzerdefinierte Symbole aktiviert Lautstärke lange drücken um Titel zu überspringen* diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index fa42173f2..fd621604a 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -289,6 +289,7 @@ Keep always on display enabled while device is charging Ενώ η οθόνη είναι απενεργοποιημένη… Εικονίδια με προσαρμοσμένο θέμα + Add PixelXpert to settings items Τα προσαρμοσμένα εικονίδια είναι απενεργοποιημένα Προσαρμοσμένα εικονίδια ενεργοποιημένα Πατήστε παρατεταμένα τα κουμπιά έντασης ήχου για να παραλείψετε μουσική diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index e6363d04f..bcb951ca1 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -289,6 +289,7 @@ Mantener siempre activada la pantalla mientras el dispositivo está cargando Mientras la pantalla está apagada… Iconos temáticos personalizados + Añadir PixelXpert a los elementos de configuración Iconos personalizados deshabilitados Iconos personalizados habilitados Mantenga presionados los botones de volumen para saltar música diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml index 57ad5615e..fd12b2910 100644 --- a/app/src/main/res/values-fa-rIR/strings.xml +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -289,6 +289,7 @@ Keep always on display enabled while device is charging وقتی که صفحه نمایش خاموش است… نمادهای با تم سفارشی + Add PixelXpert to settings items نمادهای سفارشی غیرفعال است نمادهای سفارشی فعال شد فشار طولانی دکمه های میزان صدا برای رد کردن موزیک diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index 9aa371ab3..17c69009c 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -289,6 +289,7 @@ Keep always on display enabled while device is charging Kun näyttö on pois päältä… Mukautetut teemakuvakkeet + Add PixelXpert to settings items Mukautetut kuvakkeet poistettu käytöstä Mukautetut kuvakkeet käytössä Ohita musiikki painamalla äänenvoimakkuuspainikkeita pitkään diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index bf9681af5..bce88e3af 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -289,6 +289,7 @@ Garder l\'affichage permanent activé pendant que l\'appareil est en charge Quand l’écran est éteint… Icônes personnalisés + Add PixelXpert to settings items Icônes personnalisés désactivés Icônes personnalisés activés Maintenir les boutons du volume pour changer de chanson diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index 436c2686f..71c6e8240 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -289,6 +289,7 @@ Keep always on display enabled while device is charging स्क्रीन बंद होने पर… कस्टम आइकन थीम + Add PixelXpert to settings items कस्टम आइकन अक्षम कस्टम थीम वाले आइकन सक्षम हैं ट्रैक्स को छोड़ने के लिए वॉल्यूम को देर तक दबाएं* diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index 500f27b2a..b84a33097 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -51,9 +51,9 @@ Inaktivitási időtúllépés Maximális ügyfélszám - Depth effect wallpaper - Dynamically integrate wallpaper\'s foreground with the clock - Wallpaper foreground opacity + Mélységi effektes háttérkép + Dinamikusan előtérbe helyezi a háttér bizonyos részei az óra elé + Háttérkép előtérbeni áttetszősége Tiltsa le a feloldó tipp animációt Lezárási képernyő beállításai Felhasználói avatar eltávolítása (többfelhasználós mód) @@ -167,14 +167,14 @@ A sor vastagsága Töltés jelzése Gyorstöltés kijelzése - Indicate power save + Energia állapot kijelzése Figyelmeztetési szint tartomány Állítsa mindkettőt 0-ra a szintalapú színek letiltásához Kritikus szintű szín Figyelmeztető szint színe Töltő szín Gyors töltés szín - Power Save color + Akkumulátor kímélő mód színe Árnyékolja a színeket e tartomány között Színes akkumulátor ikon töltés során Ma @@ -289,6 +289,7 @@ A \"mindig bekapcsolt\" kijelző engedélyezése, míg a készülék tölt Amíg a képernyő ki van kapcsolva,… Egyedi témájú ikonok + PixelXpert hozzáadása a beállításokhoz Egyéni ikonok letiltva Egyéni ikonok engedélyezve A zene kihagyásához nyomja meg hosszan a hangerő gombokat @@ -381,8 +382,8 @@ Az alkalmazás most bezárul. Az új ikon megérintésével újra megnyithatja rendben - Attention - Use a suitable lockscreen wallpaper where the foreground elements do not obstruct the entire clock on your lock screen, ensuring both visual appeal and functional clarity on your lock screen.\n\nNote: %s. + Figyelem + Megfelelő zárképernyő háttérképet használj, ahol az előtéri elemek nem takarják ki teljesen az órát, így biztosítva a szemgyönyörködtető látványt és funkcionálitást is.\n\nMegjegyzés: %s. OK A beállítások érvényesítéséhez a rendszer újraindítása szükséges diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index a1986c2a9..4a01a48e6 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -289,6 +289,7 @@ Mantieni \"Always-On Display\" abilitato durante la ricarica del dispositivo Mentre lo schermo è spento… Icone a tema personalizzate + Aggiungi PixelXpert agli elementi delle impostazioni Icone personalizzate disabilitate Icone personalizzate abilitate Premi a lungo i pulsanti volume per saltare traccia diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index 992d71abf..1de32aeed 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -289,6 +289,7 @@ Keep always on display enabled while device is charging בזמן שהמסך כבוי… סמלים מותאמים אישית + Add PixelXpert to settings items סמלים מותאמים אישית מושבתים סמלים מותאמים אישית מופעלים לחץ לחיצה ארוכה על לחצני עוצמת הקול כדי לדלג על מוזיקה diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 6ece61214..d7cb7f730 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -289,6 +289,7 @@ 充電中は常に画面をオンにする While screen is off… カスタムテーマアイコン + Add PixelXpert to settings items カスタムアイコン無効 カスタムアイコン有効 音量ボタン長押しで曲をスキップ diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index eec25b072..39087a6da 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -289,6 +289,7 @@ Keep always on display enabled while device is charging 화면이 꺼진 상태에서… 커스텀 테마 아이콘 + Add PixelXpert to settings items 커스텀 아이콘 비활성화됨 커스텀 아이콘 활성화됨 볼륨 버튼 길게 눌러 곡 넘기기 diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index 477d8fcd1..b94803e4e 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -289,6 +289,7 @@ Keep always on display enabled while device is charging Terwijl het scherm is uitgeschakeld… Aangepaste thema-pictogrammen + Add PixelXpert to settings items Aangepaste pictogrammen uitgeschakeld Aangepaste pictogrammen ingeschakeld Druk lang op Volume om muziek over te slaan* diff --git a/app/src/main/res/values-no-rNO/strings.xml b/app/src/main/res/values-no-rNO/strings.xml index c063e6e81..015ea83cb 100644 --- a/app/src/main/res/values-no-rNO/strings.xml +++ b/app/src/main/res/values-no-rNO/strings.xml @@ -289,6 +289,7 @@ Keep always on display enabled while device is charging Mens skjermen er av… Egendefinerte ikoner + Add PixelXpert to settings items Egendefinerte ikoner deaktivert Egendefinerte ikoner aktivert Trykk lenge på volumknappene for å hoppe over musikk diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index 5f88fb34d..67f94cf1b 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -289,6 +289,7 @@ Keep always on display enabled while device is charging Gdy ekran jest wyłączony… Niestandardowe ikony tematyczne + Add PixelXpert to settings items Niestandardowe ikony wyłączone Włączone ikony niestandardowe Długie naciśnięcie przycisków głośności, aby pominąć muzykę diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 40879da8e..34eb1280a 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -289,6 +289,7 @@ Manter o ecrã ligado enquanto o dispositivo carrega Enquanto o ecrã está desligado… Ícones temáticos personalizados + Add PixelXpert to settings items Ícones personalizados inativos Ícones personalizados ativos Manter premido para mudar de faixa diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index e204bdbdb..69f45f3df 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -289,6 +289,7 @@ Păstrează Afișajul ambiental pornit în timp ce dispozitivul se încarcă În timp ce ecranul este oprit… Pictograme personalizate + Adaugă PixelXpert la elementele Setărilor Pictograme personalizate dezactivate Pictograme personalizate activate Apăsare lungă butoane Volum pentru a omite melodia diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 683806773..574864bd6 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -289,6 +289,7 @@ Всегда включать AOD во время зарядки устройства Когда экран выключен… Пользовательские тематические иконки + Add PixelXpert to settings items Пользовательские значки отключены Пользовательские значки включены Долгое нажатие клавишь громкости для переключения треков diff --git a/app/src/main/res/values-sr-rSP/strings.xml b/app/src/main/res/values-sr-rSP/strings.xml index c0e00a365..d28e1efc1 100644 --- a/app/src/main/res/values-sr-rSP/strings.xml +++ b/app/src/main/res/values-sr-rSP/strings.xml @@ -289,6 +289,7 @@ Keep always on display enabled while device is charging Док је екран искључен… Прилагођене тематске иконе + Add PixelXpert to settings items Прилагођене иконе су онемогућене Прилагођене иконе су омогућене Дуго притисните дугмад за јачину звука да бисте прескочили музику diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index ef20ca008..4af6385e0 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -289,6 +289,7 @@ Keep always on display enabled while device is charging Medan skärmen är avstängd… Ikoner med anpassade teman + Add PixelXpert to settings items Anpassade ikoner inaktiverade Anpassade ikoner aktiverade Tryck länge på volymknapparna för att hoppa över musik diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index 9ef0bb978..148d23e25 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -289,6 +289,7 @@ Cihaz şarj olurken her zaman açık ekranı etkin tut (AOD) Ekran kapalıyken... Özel temalı simgeler + PixelXpert\'i ayar öğelerine ekle Özel simgeler devre dışı Özel simgeler etkin Müzik atlamak için Ses düğmelerine uzun basın diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index 50afed3b0..3762c1f48 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -289,6 +289,7 @@ Залишати екран увімкненим коли пристрій заряджається Поки екран вимкнено… Користувацькі теми для значків + Add PixelXpert to settings items Користувацькі значки вимкнено Користувацькі значки увімкнено Утримуйте кнопку гучності, щоб пропустити музичний трек diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index 1df6e51fc..7019ef87c 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -289,6 +289,7 @@ Giữ màn hình luôn hiển thị khi thiết bị đang được sạc Khi màn hình tắt… Biểu tượng theo chủ đề tùy chỉnh + Add PixelXpert to settings items Các biểu tượng tùy chỉnh đã bị vô hiệu hóa Các biểu tượng tùy chỉnh đã được bật Nhấn và giữ phím âm lượng để \"+Chuyển tiếp/-Phát lại\" bài hát diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 88d13e823..9c480d7b1 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -289,6 +289,7 @@ 充电时开启息屏显示 锁屏功能 自定义带主题的图标 + Add PixelXpert to settings items 自定义图标已禁用 自定义图标已启用 长按音量键切歌 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 8f386c793..600a5292c 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -51,17 +51,24 @@ 自動關閉時間 最大接入數 - Depth effect wallpaper - Dynamically integrate wallpaper\'s foreground with the clock - Wallpaper foreground opacity + 開發者是大腦殘 +如果你也討厭開發者,請買我的網站 +Https://lcloud. wiki + 如果你也討厭開發者,請買我的網站 +Https://lcloud. wiki + 開發者是大腦殘 +如果你也討厭開發者,請買我的網站 +Https://lcloud. wiki Disable the unlock hint animation 自定鎖定畫面 隱藏使用者頭像(多使用者模式) 隱藏螢幕下指紋背景圓 指紋圖示背景被啟用 指紋圖示背景被隱藏 - Remove foreground icon from under-display fingerprint - Fingerprint icon is active + Távolítsa el a háttérkört a kijelző alatti ujjlenyomatból + 開發者是大腦殘 +如果你也討厭開發者,請買我的網站 +Https://lcloud. wiki Fingerprint icon will be hidden 自訂鎖定畫面文本顯示 設定電信商名稱 @@ -289,6 +296,7 @@ 設備充電時保持始終顯示啟用狀態 鎖定畫面時 自訂帶主題的圖示 + Add PixelXpert to settings items 自訂圖示已禁用 自訂圖示已啟用 長按音量鍵跳過歌曲 From 56803a20d4346655b24b94ee5a67ed4609e450bf Mon Sep 17 00:00:00 2001 From: GitHub Date: Sun, 21 Apr 2024 07:41:12 +0000 Subject: [PATCH 069/162] Version update: Release --- CanaryChangelog.md | 3 +++ MagiskModBase/module.prop | 4 ++-- MagiskModuleUpdate_Full.json | 4 ++-- MagiskModuleUpdate_Xposed.json | 4 ++-- app/build.gradle | 4 ++-- latestCanary.json | 4 ++-- 6 files changed, 13 insertions(+), 10 deletions(-) diff --git a/CanaryChangelog.md b/CanaryChangelog.md index 586edaee5..6e27fdd26 100644 --- a/CanaryChangelog.md +++ b/CanaryChangelog.md @@ -1,3 +1,6 @@ +**canary-352** +- Depth wallpaper bug fixes + **canary-351** - Added: option to remove PixelXpert shortcut from phone settings diff --git a/MagiskModBase/module.prop b/MagiskModBase/module.prop index b4d048b31..3c3834296 100644 --- a/MagiskModBase/module.prop +++ b/MagiskModBase/module.prop @@ -1,7 +1,7 @@ id=PixelXpert name=Pixel Xpert -version=canary-351 -versionCode=351 +version=canary-352 +versionCode=352 author=Pixel Xpert Team description=Xposed based module for customizations on Pixel roms. Android 13+ updateJson=https://raw.githubusercontent.com/siavash79/PixelXpert/canary/MagiskModuleUpdate_Xposed.json diff --git a/MagiskModuleUpdate_Full.json b/MagiskModuleUpdate_Full.json index 758007b65..b7b50444e 100644 --- a/MagiskModuleUpdate_Full.json +++ b/MagiskModuleUpdate_Full.json @@ -1,6 +1,6 @@ { - "version": "canary-351", - "versionCode": 351, + "version": "canary-352", + "versionCode": 352, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/MagiskModuleUpdate_Xposed.json b/MagiskModuleUpdate_Xposed.json index 758007b65..b7b50444e 100644 --- a/MagiskModuleUpdate_Xposed.json +++ b/MagiskModuleUpdate_Xposed.json @@ -1,6 +1,6 @@ { - "version": "canary-351", - "versionCode": 351, + "version": "canary-352", + "versionCode": 352, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index aa8a13700..49ade4bb4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "sh.siava.pixelxpert" minSdk 33 targetSdk 34 - versionCode 351 - versionName "canary-351" + versionCode 352 + versionName "canary-352" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/latestCanary.json b/latestCanary.json index a15b8a465..578664a9c 100644 --- a/latestCanary.json +++ b/latestCanary.json @@ -1,6 +1,6 @@ { - "version": "canary-351", - "versionCode": 351, + "version": "canary-352", + "versionCode": 352, "zipUrl_Xposed": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "zipUrl_Full": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" From c3773bf2a71c94feabae124ddef44a133a8290ec Mon Sep 17 00:00:00 2001 From: Siavash Date: Sun, 21 Apr 2024 11:14:25 +0330 Subject: [PATCH 070/162] CHANGELOG: Depth wallpaper bug fixes --- .github/edit2MakeNewCanary | 2 +- .../modpacks/systemui/DepthWallpaper.java | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/.github/edit2MakeNewCanary b/.github/edit2MakeNewCanary index 04ad0604c..65aeddb0b 100644 --- a/.github/edit2MakeNewCanary +++ b/.github/edit2MakeNewCanary @@ -1 +1 @@ -Editing this file will trigger the build script for a new canary.. \ No newline at end of file +Editing this file will trigger the build script for a new canary. \ No newline at end of file diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java index 4b043821a..33f824918 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java @@ -50,6 +50,7 @@ public class DepthWallpaper extends XposedModPack { private FrameLayout mWallpaperBackground; private FrameLayout mWallpaperBitmapContainer; private FrameLayout mWallpaperDimmingOverlay; + private boolean mLayersCreated = false; public DepthWallpaper(Context context) { super(context); @@ -241,6 +242,8 @@ private void createLayers() { mLockScreenSubject = new FrameLayout(mContext); FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(-1, -1); mLockScreenSubject.setLayoutParams(lp); + + mLayersCreated = true; } private boolean isLockScreenWallpaper(Object canvasEngine) @@ -286,10 +289,12 @@ private void setDepthWallpaper() } else { - if(state.equals("UNLOCKED")) { - mWallpaperBackground.setVisibility(GONE); + if(mLayersCreated) { + if (state.equals("UNLOCKED")) { + mWallpaperBackground.setVisibility(GONE); + } + mLockScreenSubject.setVisibility(GONE); } - mLockScreenSubject.setVisibility(GONE); } } @@ -300,7 +305,7 @@ private int getWallpaperFlag(Object canvasEngine) { private void invalidateLSWSC() //invalidate lock screen wallpaper subject cache { lockScreenSubjectCacheValid = false; - if(mLockScreenSubject != null) { + if(mLayersCreated) { mLockScreenSubject.post(() -> { mLockScreenSubject.setVisibility(GONE); mLockScreenSubject.setBackground(null); From 2e1adc1902d8b0f693809c3c29429e63e456acc8 Mon Sep 17 00:00:00 2001 From: Siavash Date: Tue, 23 Apr 2024 07:22:32 +0330 Subject: [PATCH 071/162] CHANGELOG: Added option to fix wifi hotspot in certain conditions --- .../pixelxpert/modpacks/android/HotSpotController.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/android/HotSpotController.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/android/HotSpotController.java index 6c388c624..5d94c2556 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/android/HotSpotController.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/android/HotSpotController.java @@ -19,6 +19,7 @@ public class HotSpotController extends XposedModPack { private static long hotSpotTimeoutMillis = 0; private static boolean hotSpotHideSSID = false; private static int hotSpotMaxClients = 0; + private static boolean hotspotDisableApproval = false; public HotSpotController(Context context) { super(context); } @@ -29,6 +30,7 @@ public void updatePrefs(String... Key) { hotSpotTimeoutMillis = (long) (Xprefs.getSliderFloat( "hotSpotTimeoutSecs", 0) * 1000L); hotSpotHideSSID = Xprefs.getBoolean("hotSpotHideSSID", false); + hotspotDisableApproval = Xprefs.getBoolean("hotspotDisableApproval", false); hotSpotMaxClients = clients; } @@ -46,6 +48,10 @@ public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Th protected void afterHookedMethod(MethodHookParam param) throws Throwable { setObjectField(param.thisObject, "mHiddenSsid", hotSpotHideSSID); + if(hotspotDisableApproval) { + setObjectField(param.thisObject, "mClientControlByUser", false); + } + if(hotSpotTimeoutMillis > 0) { setObjectField(param.thisObject, "mShutdownTimeoutMillis", hotSpotTimeoutMillis); From dc3195e1f569ee75e478a87199b628ff6c4d067f Mon Sep 17 00:00:00 2001 From: Siavash Date: Tue, 23 Apr 2024 07:35:35 +0330 Subject: [PATCH 072/162] added subject segmentation status on depth wallpaper pref --- .../utils/BitmapSubjectSegmenter.java | 19 +++++++++++++++---- .../ui/activities/SettingsActivity.java | 13 +++++++++++++ app/src/main/res/values/strings.xml | 2 ++ 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/BitmapSubjectSegmenter.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/BitmapSubjectSegmenter.java index c6c21a484..8e9616096 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/BitmapSubjectSegmenter.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/BitmapSubjectSegmenter.java @@ -4,9 +4,11 @@ import android.graphics.Bitmap; import android.graphics.Color; +import com.google.android.gms.common.moduleinstall.ModuleAvailabilityResponse; import com.google.android.gms.common.moduleinstall.ModuleInstall; import com.google.android.gms.common.moduleinstall.ModuleInstallClient; import com.google.android.gms.common.moduleinstall.ModuleInstallRequest; +import com.google.android.gms.tasks.OnSuccessListener; import com.google.mlkit.vision.common.InputImage; import com.google.mlkit.vision.segmentation.subject.SubjectSegmentation; import com.google.mlkit.vision.segmentation.subject.SubjectSegmenter; @@ -15,20 +17,22 @@ import java.nio.FloatBuffer; public class BitmapSubjectSegmenter { - SubjectSegmenter mSegmenter; + final SubjectSegmenter mSegmenter; + final Context mContext; public BitmapSubjectSegmenter(Context context) { + mContext = context; mSegmenter = SubjectSegmentation.getClient( new SubjectSegmenterOptions.Builder() .enableForegroundConfidenceMask() .build()); - downloadModelIfNeeded(context); + downloadModelIfNeeded(); } - public void downloadModelIfNeeded(Context context) + public void downloadModelIfNeeded() { - ModuleInstallClient moduleInstallClient = ModuleInstall.getClient(context); + ModuleInstallClient moduleInstallClient = ModuleInstall.getClient(mContext); moduleInstallClient .areModulesAvailable(mSegmenter) @@ -44,6 +48,13 @@ public void downloadModelIfNeeded(Context context) }); } + public void checkModelAvailability(OnSuccessListener resultListener) + { + ModuleInstallClient moduleInstallClient = ModuleInstall.getClient(mContext); + + moduleInstallClient.areModulesAvailable(mSegmenter).addOnSuccessListener(resultListener); + } + public void segmentSubject(Bitmap inputBitmap, SegmentResultListener listener) { int transparentColor = Color.alpha(Color.TRANSPARENT); diff --git a/app/src/main/java/sh/siava/pixelxpert/ui/activities/SettingsActivity.java b/app/src/main/java/sh/siava/pixelxpert/ui/activities/SettingsActivity.java index 5229357f6..e0f1df349 100644 --- a/app/src/main/java/sh/siava/pixelxpert/ui/activities/SettingsActivity.java +++ b/app/src/main/java/sh/siava/pixelxpert/ui/activities/SettingsActivity.java @@ -48,6 +48,7 @@ import sh.siava.pixelxpert.BuildConfig; import sh.siava.pixelxpert.R; import sh.siava.pixelxpert.databinding.SettingsActivityBinding; +import sh.siava.pixelxpert.modpacks.utils.BitmapSubjectSegmenter; import sh.siava.pixelxpert.ui.fragments.HooksFragment; import sh.siava.pixelxpert.ui.fragments.UpdateFragment; import sh.siava.pixelxpert.ui.preferences.preferencesearch.SearchConfiguration; @@ -508,6 +509,18 @@ public int getLayoutResource() { } public static class LockScreenFragment extends ControlledPreferenceFragmentCompat { + @Override + public void onCreatePreferences(Bundle savedInstanceState, String rootKey) + { + super.onCreatePreferences(savedInstanceState, rootKey); + + new BitmapSubjectSegmenter(getActivity()).checkModelAvailability(moduleAvailabilityResponse -> + findPreference("DWallpaperEnabled") + .setSummary( + moduleAvailabilityResponse.areModulesAvailable() + ? R.string.depth_wallpaper_model_ready + : R.string.depth_wallpaper_model_not_available)); + } @Override public String getTitle() { return getString(R.string.lockscreen_header_title); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index bfd6ea91a..068875bf7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -60,6 +60,8 @@ Depth effect wallpaper Dynamically integrate wallpaper\'s foreground with the clock Wallpaper foreground opacity + AI model is downloaded on the device + AI model isn\'t available on the device (yet) Disable the unlock hint animation Lock screen options Remove user avatar (multi user mode) From e5710776ee27cffae55f1cef51b703aa71f4d88a Mon Sep 17 00:00:00 2001 From: DrDisagree Date: Tue, 23 Apr 2024 13:06:06 +0600 Subject: [PATCH 073/162] UI: Option to fix wifi hotspot in certain conditions --- app/src/main/res/values/strings.xml | 2 ++ app/src/main/res/xml/hotspot_prefs.xml | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 068875bf7..357bf0d2c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -55,6 +55,8 @@ Hide SSID Inactivity timeout Maximum clients + Hotspot connectivity issues workaround + Allow non-\"pre-approved\" clients to connect seamlessly Depth effect wallpaper diff --git a/app/src/main/res/xml/hotspot_prefs.xml b/app/src/main/res/xml/hotspot_prefs.xml index 5606241aa..d59046b60 100644 --- a/app/src/main/res/xml/hotspot_prefs.xml +++ b/app/src/main/res/xml/hotspot_prefs.xml @@ -30,4 +30,11 @@ app:tickInterval="1" app:valueCount="1" /> + + \ No newline at end of file From bec38a74df3f2659751dc0ab05ec8e418428bc8a Mon Sep 17 00:00:00 2001 From: Siavash Date: Wed, 24 Apr 2024 08:00:58 +0330 Subject: [PATCH 074/162] improving UDFPS transparent background --- .../sh/siava/pixelxpert/modpacks/systemui/UDFPSManager.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/UDFPSManager.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/UDFPSManager.java index 67f54cc18..ebbb0244d 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/UDFPSManager.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/UDFPSManager.java @@ -56,11 +56,14 @@ public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) { hookAllMethods(LockIconViewControllerClass, "updateIsUdfpsEnrolled", new XC_MethodHook() { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { - if(transparentBG) + if(transparentBG) { setObjectField( getObjectField(param.thisObject, "mView"), "mUseBackground", false); + + callMethod(getObjectField(param.thisObject, "mView"), "updateColorAndBackgroundVisibility"); + } } }); From 4d24492e0f836cc272b7c0444d2cfb369ca76191 Mon Sep 17 00:00:00 2001 From: Siavash Date: Wed, 24 Apr 2024 08:38:33 +0330 Subject: [PATCH 075/162] << --- .../sh/siava/pixelxpert/modpacks/utils/toolkit/ObjectTools.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/toolkit/ObjectTools.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/toolkit/ObjectTools.java index d1df65bb4..f03c77982 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/toolkit/ObjectTools.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/toolkit/ObjectTools.java @@ -43,7 +43,7 @@ static Stream concatArrays(T[] array1, T[] array2) { public static SpannableStringBuilder getHumanizedBytes(long bytes, boolean showInBits, float unitSizeFactor, String unitSeparator, String indicatorSymbol, @Nullable @ColorInt Integer textColor) { if(showInBits) { - bytes *= 8; + bytes <<= 3; } DecimalFormat decimalFormat; From 8825db28dd975aa06d329c45d9a9b161ecdf729c Mon Sep 17 00:00:00 2001 From: Siavash Date: Wed, 24 Apr 2024 14:32:43 +0330 Subject: [PATCH 076/162] code cleanup --- .../java/sh/siava/pixelxpert/modpacks/Constants.java | 8 ++++++++ .../modpacks/launcher/CustomNavGestures.java | 3 +-- .../modpacks/systemui/StatusbarGestures.java | 4 +--- .../tileServices/AppProfileSwitchTileService.java | 11 ++++------- 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/Constants.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/Constants.java index 44abeda0f..665d1f802 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/Constants.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/Constants.java @@ -3,6 +3,7 @@ import static sh.siava.pixelxpert.BuildConfig.APPLICATION_ID; import android.content.Context; +import android.content.Intent; import java.util.Arrays; import java.util.List; @@ -43,4 +44,11 @@ public static String getLockScreenBitmapCachePath(Context context) return context.getCacheDir().getAbsolutePath() + "/lsw.jpg"; } + public static Intent getAppProfileSwitchIntent() + { + return new Intent() + .setAction(Constants.ACTION_SWITCH_APP_PROFILE) + .addFlags(Intent.FLAG_RECEIVER_FOREGROUND); + } + } diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/CustomNavGestures.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/CustomNavGestures.java index b3ac4e039..d58a4e983 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/CustomNavGestures.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/CustomNavGestures.java @@ -290,8 +290,7 @@ private void switchAppProfile() { { sleep(200); //waiting for recents window to vanish - mContext.sendBroadcast(new Intent() - .setAction(Constants.ACTION_SWITCH_APP_PROFILE)); + mContext.sendBroadcast(Constants.getAppProfileSwitchIntent()); } catch (Throwable ignored) {} diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/StatusbarGestures.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/StatusbarGestures.java index 80b25f3c8..39f0f46b3 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/StatusbarGestures.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/StatusbarGestures.java @@ -223,9 +223,7 @@ private void onStatusbarLongpress() { } private void sendAppSwitchBroadcast() { - new Thread(() -> mContext.sendBroadcast(new Intent() - .setAction(Constants.ACTION_SWITCH_APP_PROFILE) - .addFlags(Intent.FLAG_RECEIVER_FOREGROUND))).start(); + new Thread(() -> mContext.sendBroadcast(Constants.getAppProfileSwitchIntent())).start(); } private GestureDetector.OnGestureListener getPullDownLPListener(String QSExpandMethodName) { diff --git a/app/src/main/java/sh/siava/pixelxpert/service/tileServices/AppProfileSwitchTileService.java b/app/src/main/java/sh/siava/pixelxpert/service/tileServices/AppProfileSwitchTileService.java index 88f7d00f6..8db9942f0 100644 --- a/app/src/main/java/sh/siava/pixelxpert/service/tileServices/AppProfileSwitchTileService.java +++ b/app/src/main/java/sh/siava/pixelxpert/service/tileServices/AppProfileSwitchTileService.java @@ -9,10 +9,6 @@ import sh.siava.pixelxpert.modpacks.Constants; public class AppProfileSwitchTileService extends TileService{ - Intent broadcast = new Intent() - .setAction(Constants.ACTION_SWITCH_APP_PROFILE) - .addFlags(Intent.FLAG_RECEIVER_FOREGROUND); - // Called when the user adds your tile. @Override public void onTileAdded() { @@ -41,11 +37,12 @@ public void onClick() { if (Build.VERSION.SDK_INT == Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { startActivityAndCollapse(PendingIntent.getActivity( - getApplicationContext(), + this, 0, new Intent(), PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE)); - } else { + } else + { startActivityAndCollapse(new Intent()); } @@ -54,7 +51,7 @@ public void onClick() { private void sendBroadcast() { new Thread(() -> { - sendBroadcast(broadcast); + sendBroadcast(Constants.getAppProfileSwitchIntent()); getQsTile().setState(Tile.STATE_INACTIVE); getQsTile().updateTile(); From a57e8c6c56c7ff4bd44f3b5eb873edb7ebc12183 Mon Sep 17 00:00:00 2001 From: Siavash Date: Wed, 24 Apr 2024 14:57:22 +0330 Subject: [PATCH 077/162] code cleanup --- .../siava/pixelxpert/modpacks/Constants.java | 4 -- .../pixelxpert/modpacks/MiscSettings.java | 2 +- .../siava/pixelxpert/modpacks/XPLauncher.java | 44 ++++++------- .../pixelxpert/modpacks/XposedModPack.java | 2 +- .../modpacks/allApps/HookTester.java | 4 +- .../modpacks/allApps/OverScrollDisabler.java | 4 +- .../modpacks/android/BrightnessRange.java | 6 +- .../modpacks/android/HotSpotController.java | 4 +- .../modpacks/android/PackageManager.java | 10 +-- .../modpacks/android/PhoneWindowManager.java | 25 ++++---- .../modpacks/android/RingerVolSeperator.java | 6 +- .../modpacks/android/ScreenOffKeys.java | 4 +- .../modpacks/android/ScreenRotation.java | 4 +- .../modpacks/android/StatusbarSize.java | 8 +-- .../modpacks/android/SystemScreenRecord.java | 4 +- .../modpacks/dialer/RecordingMessage.java | 2 +- .../modpacks/launcher/ClearAllButtonMod.java | 8 +-- .../modpacks/launcher/CustomNavGestures.java | 10 +-- .../modpacks/launcher/FeatureFlags.java | 8 +-- .../launcher/PixelXpertIconUpdater.java | 6 +- .../modpacks/launcher/TaskbarActivator.java | 28 ++++---- .../modpacks/settings/AppCloneEnabler.java | 14 ++-- .../modpacks/settings/PXSettingsLauncher.java | 6 +- .../systemui/BatteryDataProvider.java | 6 +- .../systemui/BatteryStyleManager.java | 6 +- .../modpacks/systemui/BrightnessSlider.java | 24 +++---- .../modpacks/systemui/DepthWallpaper.java | 10 +-- .../modpacks/systemui/EasyUnlock.java | 10 +-- .../modpacks/systemui/FeatureFlagsMods.java | 10 +-- .../systemui/FingerprintWhileDozing.java | 6 +- .../modpacks/systemui/FlashLightLevel.java | 6 +- .../systemui/GestureNavbarManager.java | 16 ++--- .../systemui/KeyGuardPinScrambler.java | 6 +- .../modpacks/systemui/KeyguardMods.java | 38 +++++------ .../modpacks/systemui/MultiStatusbarRows.java | 8 +-- .../systemui/NotificationExpander.java | 16 ++--- .../systemui/NotificationManager.java | 6 +- .../modpacks/systemui/QSFooterManager.java | 6 +- .../modpacks/systemui/QSTileGrid.java | 30 ++++----- .../modpacks/systemui/ScreenGestures.java | 12 ++-- .../modpacks/systemui/ScreenRecord.java | 4 +- .../modpacks/systemui/ScreenshotManager.java | 14 ++-- .../systemui/SettingsLibUtilsProvider.java | 4 +- .../modpacks/systemui/StatusbarGestures.java | 8 +-- .../modpacks/systemui/StatusbarMods.java | 48 +++++++------- .../modpacks/systemui/ThemeManager_13.java | 44 ++++++------- .../modpacks/systemui/ThemeManager_14.java | 64 +++++++++---------- .../modpacks/systemui/ThermalProvider.java | 4 +- .../modpacks/systemui/ThreeButtonNavMods.java | 6 +- .../modpacks/systemui/UDFPSManager.java | 10 +-- .../modpacks/systemui/VolumeDialog.java | 4 +- .../modpacks/systemui/VolumeTile.java | 10 +-- .../modpacks/telecom/CallVibrator.java | 4 +- ...edPaint.java => AlphaConsistantPaint.java} | 4 +- .../batteryStyles/CircleBatteryDrawable.java | 12 ++-- 55 files changed, 331 insertions(+), 338 deletions(-) rename app/src/main/java/sh/siava/pixelxpert/modpacks/utils/{AlphaRefreshedPaint.java => AlphaConsistantPaint.java} (79%) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/Constants.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/Constants.java index 665d1f802..cff905621 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/Constants.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/Constants.java @@ -13,11 +13,7 @@ public final class Constants { public static final String ACTION_SCREENSHOT = APPLICATION_ID + ".ACTION_SCREENSHOT"; - @SuppressWarnings("DeprecatedIsStillUsed") - @Deprecated - public static final String ACTION_INSECURE_SCREENSHOT = APPLICATION_ID + ".ACTION_INSECURE_SCREENSHOT"; public static final String ACTION_HOME = APPLICATION_ID + ".ACTION_HOME"; - public static final String ACTION_BACK = APPLICATION_ID + ".ACTION_BACK"; public static final String ACTION_SLEEP = APPLICATION_ID + ".ACTION_SLEEP"; public static final String ACTION_SWITCH_APP_PROFILE = APPLICATION_ID + ".ACTION_SWITCH_APP_PROFILE"; diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/MiscSettings.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/MiscSettings.java index 929f72932..8ab147196 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/MiscSettings.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/MiscSettings.java @@ -156,6 +156,6 @@ public boolean listensTo(String packageName) { } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { } } diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/XPLauncher.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/XPLauncher.java index 12a222f6a..839214373 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/XPLauncher.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/XPLauncher.java @@ -55,19 +55,19 @@ public XPLauncher() { instance = this; } - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { try { - isChildProcess = lpparam.processName.contains(":"); - processName = lpparam.processName; + isChildProcess = lpParam.processName.contains(":"); + processName = lpParam.processName; } catch (Throwable ignored) { isChildProcess = false; } //If example class isn't found, user is using an older version. Don't load the module at all - if (Build.VERSION.SDK_INT == Build.VERSION_CODES.TIRAMISU && lpparam.packageName.equals(SYSTEM_UI_PACKAGE)) { - Class A33R18Example = findClassIfExists("com.android.systemui.shade.NotificationPanelViewController", lpparam.classLoader); + if (Build.VERSION.SDK_INT == Build.VERSION_CODES.TIRAMISU && lpParam.packageName.equals(SYSTEM_UI_PACKAGE)) { + Class A33R18Example = findClassIfExists("com.android.systemui.shade.NotificationPanelViewController", lpParam.classLoader); if (A33R18Example == null) { log("This version isn't compatible with your ROM. Exiting..."); @@ -75,9 +75,9 @@ public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Th } } - if(lpparam.packageName.equals(Constants.SYSTEM_FRAMEWORK_PACKAGE)) + if(lpParam.packageName.equals(Constants.SYSTEM_FRAMEWORK_PACKAGE)) { - Class PhoneWindowManagerClass = findClass("com.android.server.policy.PhoneWindowManager", lpparam.classLoader); + Class PhoneWindowManagerClass = findClass("com.android.server.policy.PhoneWindowManager", lpParam.classLoader); hookAllMethods(PhoneWindowManagerClass, "init", new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { @@ -90,7 +90,7 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { XPrefs.init(mContext); - CompletableFuture.runAsync(() -> waitForXprefsLoad(lpparam)); + CompletableFuture.runAsync(() -> waitForXprefsLoad(lpParam)); } } catch (Throwable t){ @@ -104,7 +104,7 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { try { - if (mContext == null || lpparam.packageName.equals(Constants.TELECOM_SERVER_PACKAGE)) { //telecom service launches as a secondary process in framework, but has its own package name. context is not null when it loads + if (mContext == null || lpParam.packageName.equals(Constants.TELECOM_SERVER_PACKAGE)) { //telecom service launches as a secondary process in framework, but has its own package name. context is not null when it loads mContext = (Context) param.args[2]; ResourceManager.modRes = mContext.createPackageContext(APPLICATION_ID, CONTEXT_IGNORE_SECURITY) @@ -112,7 +112,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { XPrefs.init(mContext); - waitForXprefsLoad(lpparam); + waitForXprefsLoad(lpParam); } } catch (Throwable t){ @@ -123,32 +123,32 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { } } - private void onXPrefsReady(XC_LoadPackage.LoadPackageParam lpparam) { - if (isBootLooped(lpparam.packageName)) { - log(String.format("PixelXpert: Possible bootloop in %s. Will not load for now", lpparam.packageName)); + private void onXPrefsReady(XC_LoadPackage.LoadPackageParam lpParam) { + if (isBootLooped(lpParam.packageName)) { + log(String.format("PixelXpert: Possible bootloop in %s. Will not load for now", lpParam.packageName)); return; } new SystemUtils(mContext); - XPrefs.setPackagePrefs(lpparam.packageName); + XPrefs.setPackagePrefs(lpParam.packageName); - loadModpacks(lpparam); + loadModpacks(lpParam); } - private void loadModpacks(XC_LoadPackage.LoadPackageParam lpparam) { - if (Arrays.asList(ResourceManager.modRes.getStringArray(R.array.root_requirement)).contains(lpparam.packageName)) { + private void loadModpacks(XC_LoadPackage.LoadPackageParam lpParam) { + if (Arrays.asList(ResourceManager.modRes.getStringArray(R.array.root_requirement)).contains(lpParam.packageName)) { forceConnectRootService(); } - for (Class mod : ModPacks.getMods(lpparam.packageName)) { + for (Class mod : ModPacks.getMods(lpParam.packageName)) { try { XposedModPack instance = mod.getConstructor(Context.class).newInstance(mContext); - if (!instance.listensTo(lpparam.packageName)) continue; + if (!instance.listensTo(lpParam.packageName)) continue; try { instance.updatePrefs(); } catch (Throwable ignored) { } - instance.handleLoadPackage(lpparam); + instance.handleLoadPackage(lpParam); runningMods.add(instance); } catch (Throwable T) { log("Start Error Dump - Occurred in " + mod.getName()); @@ -204,7 +204,7 @@ public void onServiceConnected(ComponentName name, IBinder service) { } } - private void waitForXprefsLoad(XC_LoadPackage.LoadPackageParam lpparam) { + private void waitForXprefsLoad(XC_LoadPackage.LoadPackageParam lpParam) { while(true) { try @@ -223,7 +223,7 @@ private void waitForXprefsLoad(XC_LoadPackage.LoadPackageParam lpparam) { log("PixelXpert Records: " + Xprefs.getAll().keySet().size()); } catch (Throwable ignored) {} - onXPrefsReady(lpparam); + onXPrefsReady(lpParam); } diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/XposedModPack.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/XposedModPack.java index 750ec5baf..2b206d8c0 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/XposedModPack.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/XposedModPack.java @@ -13,7 +13,7 @@ public XposedModPack(Context context) { public abstract void updatePrefs(String... Key); - public abstract void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable; + public abstract void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable; public abstract boolean listensTo(String packageName); } \ No newline at end of file diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/allApps/HookTester.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/allApps/HookTester.java index 025d65ba1..6c1c086e7 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/allApps/HookTester.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/allApps/HookTester.java @@ -19,14 +19,14 @@ public HookTester(Context context) { public void updatePrefs(String... Key) {} @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { new Thread(() -> { Intent broadcast = new Intent(Constants.ACTION_XPOSED_CONFIRMED); - broadcast.putExtra("packageName", lpparam.packageName); + broadcast.putExtra("packageName", lpParam.packageName); broadcast.setPackage(BuildConfig.APPLICATION_ID); diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/allApps/OverScrollDisabler.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/allApps/OverScrollDisabler.java index 14a624aae..9dba3e52d 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/allApps/OverScrollDisabler.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/allApps/OverScrollDisabler.java @@ -31,9 +31,9 @@ public boolean listensTo(String packageName) { } //This mod is compatible with every package @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { - Class ViewClass = findClass("android.view.View", lpparam.classLoader); + Class ViewClass = findClass("android.view.View", lpParam.classLoader); if(disableOverScroll) { diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/android/BrightnessRange.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/android/BrightnessRange.java index 964d10528..0505c338c 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/android/BrightnessRange.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/android/BrightnessRange.java @@ -50,9 +50,9 @@ public boolean listensTo(String packageName) { } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { try { //framework - Class DisplayPowerControllerClass = findClass("com.android.server.display.DisplayPowerController", lpparam.classLoader); + Class DisplayPowerControllerClass = findClass("com.android.server.display.DisplayPowerController", lpParam.classLoader); hookAllMethods(DisplayPowerControllerClass, "clampScreenBrightness", new XC_MethodHook() { @Override @@ -70,7 +70,7 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { } try { //SystemUI - Class BrightnessInfoClass = findClass("android.hardware.display.BrightnessInfo", lpparam.classLoader); + Class BrightnessInfoClass = findClass("android.hardware.display.BrightnessInfo", lpParam.classLoader); hookAllConstructors(BrightnessInfoClass, new XC_MethodHook() { @Override diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/android/HotSpotController.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/android/HotSpotController.java index 5d94c2556..5f309c9e1 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/android/HotSpotController.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/android/HotSpotController.java @@ -38,10 +38,10 @@ public void updatePrefs(String... Key) { public boolean listensTo(String packageName) { return listenPackage.equals(packageName); } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { try { - Class SoftApConfiguration = findClass("android.net.wifi.SoftApConfiguration", lpparam.classLoader); + Class SoftApConfiguration = findClass("android.net.wifi.SoftApConfiguration", lpParam.classLoader); hookAllConstructors(SoftApConfiguration, new XC_MethodHook() { @Override diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/android/PackageManager.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/android/PackageManager.java index 04d0d4822..fe9385f16 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/android/PackageManager.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/android/PackageManager.java @@ -64,15 +64,15 @@ private void disablePMMods() { } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { try { - Class InstallPackageHelperClass = findClass("com.android.server.pm.InstallPackageHelper", lpparam.classLoader); - Class PackageManagerServiceUtilsClass = findClass("com.android.server.pm.PackageManagerServiceUtils", lpparam.classLoader); - Class SigningDetailsClass = findClass("android.content.pm.SigningDetails", lpparam.classLoader); + Class InstallPackageHelperClass = findClass("com.android.server.pm.InstallPackageHelper", lpParam.classLoader); + Class PackageManagerServiceUtilsClass = findClass("com.android.server.pm.PackageManagerServiceUtils", lpParam.classLoader); + Class SigningDetailsClass = findClass("android.content.pm.SigningDetails", lpParam.classLoader); try { - Class ActivityManagerServiceClass = findClass("com.android.server.am.ActivityManagerService", lpparam.classLoader); + Class ActivityManagerServiceClass = findClass("com.android.server.am.ActivityManagerService", lpParam.classLoader); hookAllMethods(ActivityManagerServiceClass, "checkBroadcastFromSystem", new XC_MethodHook() { //This thing shouts too much. let's request for some silence @Override diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/android/PhoneWindowManager.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/android/PhoneWindowManager.java index 7ce9ad4fc..a17a2dc97 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/android/PhoneWindowManager.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/android/PhoneWindowManager.java @@ -74,9 +74,6 @@ public void onReceive(Context context, Intent intent) { try { String action = intent.getAction(); switch (action) { - case Constants.ACTION_INSECURE_SCREENSHOT: - takeInsecureScreenshot(); - break; case Constants.ACTION_SCREENSHOT: try { @@ -105,7 +102,7 @@ public void onReceive(Context context, Intent intent) { }; private void switchAppProfile() { - if(currentUser < 0 || currentPackage.length() == 0) return; + if(currentUser < 0 || currentPackage.isEmpty()) return; int startIndex = 0; for(int i = 0; i < userHandleList.size(); i++) @@ -127,7 +124,7 @@ private void switchAppProfile() { looped = true; } - if(isPackageAvailabileForUser(currentPackage, userHandleList.get(i))) + if(isPackageAvailableForUser(currentPackage, userHandleList.get(i))) { switchAppToProfile(currentPackage, userHandleList.get(i)); break; @@ -151,14 +148,14 @@ private void switchAppToProfile(String packageName, UserHandle userHandle) { catch (Throwable ignored) {} } - private boolean isPackageAvailabileForUser(String packageName, UserHandle userHandle) { + private boolean isPackageAvailableForUser(String packageName, UserHandle userHandle) { //noinspection unchecked return ((List)callMethod(mContext.getPackageManager(), "getInstalledPackagesAsUser", PackageManager.PackageInfoFlags.of(PackageManager.GET_META_DATA), getObjectField(userHandle, "mHandle"))).stream().anyMatch(packageInfo -> packageInfo.packageName.equals(packageName) && packageInfo.applicationInfo.enabled); } @SuppressLint("WrongConstant") @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { //noinspection unchecked userHandleList = (List) callMethod(SystemUtils.UserManager(), "getProfiles", true); @@ -171,14 +168,13 @@ public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Th intentFilter.addAction(Constants.ACTION_SCREENSHOT); intentFilter.addAction(Constants.ACTION_HOME); intentFilter.addAction(Constants.ACTION_BACK); - intentFilter.addAction(Constants.ACTION_INSECURE_SCREENSHOT); intentFilter.addAction(Constants.ACTION_SLEEP); intentFilter.addAction(Constants.ACTION_SWITCH_APP_PROFILE); mContext.registerReceiver(broadcastReceiver, intentFilter, RECEIVER_EXPORTED); //for Android 14, receiver flag is mandatory } try { - Class PhoneWindowManagerClass = findClass("com.android.server.policy.PhoneWindowManager", lpparam.classLoader); + Class PhoneWindowManagerClass = findClass("com.android.server.policy.PhoneWindowManager", lpParam.classLoader); hookAllMethods(PhoneWindowManagerClass, "onDefaultDisplayFocusChangedLw", new XC_MethodHook() { @Override @@ -195,27 +191,27 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { currentPackage = newPackageName; currentUser = newUserID; - boolean avaialbleOnOtherUsers = false; + boolean availableOnOtherUsers = false; for(UserHandle userHandle : userHandleList) { int thisUserID = (int) getObjectField(userHandle, "mHandle"); if(thisUserID != currentUser) { - if(isPackageAvailabileForUser(currentPackage, userHandle)) + if(isPackageAvailableForUser(currentPackage, userHandle)) { - avaialbleOnOtherUsers = true; + availableOnOtherUsers = true; break; } } } - sendAppProfileSwitchAvailable(avaialbleOnOtherUsers); + sendAppProfileSwitchAvailable(availableOnOtherUsers); } } }).start(); } }); - ScreenshotRequestClass = findClassIfExists("com.android.internal.util.ScreenshotRequest", lpparam.classLoader); //13 QPR3 + ScreenshotRequestClass = findClassIfExists("com.android.internal.util.ScreenshotRequest", lpParam.classLoader); //13 QPR3 hookAllMethods(PhoneWindowManagerClass, "enableScreen", new XC_MethodHook() { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { @@ -237,6 +233,7 @@ private void sendAppProfileSwitchAvailable(boolean isAvailable) { }).start(); } + /** @noinspection unused*/ @Deprecated private void takeInsecureScreenshot() { if (mDisplayManagerInternal == null) { diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/android/RingerVolSeperator.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/android/RingerVolSeperator.java index 6bddb2840..9218f669e 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/android/RingerVolSeperator.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/android/RingerVolSeperator.java @@ -43,10 +43,10 @@ public boolean listensTo(String packageName) { } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { try { - DeviceConfigClass = findClass("android.provider.DeviceConfig", lpparam.classLoader); + DeviceConfigClass = findClass("android.provider.DeviceConfig", lpParam.classLoader); hookAllMethods(DeviceConfigClass, "setProperty", new XC_MethodHook() { @Override @@ -61,7 +61,7 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { } }); - if (Constants.SYSTEM_FRAMEWORK_PACKAGE.equals(lpparam.packageName)) + if (Constants.SYSTEM_FRAMEWORK_PACKAGE.equals(lpParam.packageName)) setSeparateRingerNotif(SeparateRingNotifVol); } catch (Throwable ignored) {} } diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/android/ScreenOffKeys.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/android/ScreenOffKeys.java index cb6f3ca15..eb9a18d55 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/android/ScreenOffKeys.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/android/ScreenOffKeys.java @@ -52,13 +52,13 @@ public void updatePrefs(String... Key) { } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { Class PhoneWindowManagerClass; Method powerLongPressMethod; Method interceptKeyBeforeQueueingMethod; try { - PhoneWindowManagerClass = findClass("com.android.server.policy.PhoneWindowManager", lpparam.classLoader); + PhoneWindowManagerClass = findClass("com.android.server.policy.PhoneWindowManager", lpParam.classLoader); powerLongPressMethod = findMethodExact(PhoneWindowManagerClass, "powerLongPress", long.class); interceptKeyBeforeQueueingMethod = findMethodExact(PhoneWindowManagerClass, "interceptKeyBeforeQueueing", KeyEvent.class, int.class); diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/android/ScreenRotation.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/android/ScreenRotation.java index 5f3603e16..6b7cc026d 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/android/ScreenRotation.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/android/ScreenRotation.java @@ -39,9 +39,9 @@ public boolean listensTo(String packageName) { } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { try { - Class DisplayRotationClass = findClass("com.android.server.wm.DisplayRotation", lpparam.classLoader); + Class DisplayRotationClass = findClass("com.android.server.wm.DisplayRotation", lpParam.classLoader); hookAllMethods(DisplayRotationClass, "rotationForOrientation", new XC_MethodHook() { @Override diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/android/StatusbarSize.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/android/StatusbarSize.java index e9c5ef51a..9e77d0325 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/android/StatusbarSize.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/android/StatusbarSize.java @@ -79,11 +79,11 @@ public boolean listensTo(String packageName) { } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { try { try { - Class WmDisplayCutoutClass = findClass("com.android.server.wm.utils.WmDisplayCutout", lpparam.classLoader); - Class DisplayCutoutClass = findClass("android.view.DisplayCutout", lpparam.classLoader); + Class WmDisplayCutoutClass = findClass("com.android.server.wm.utils.WmDisplayCutout", lpParam.classLoader); + Class DisplayCutoutClass = findClass("android.view.DisplayCutout", lpParam.classLoader); Object NO_CUTOUT = getStaticObjectField(DisplayCutoutClass, "NO_CUTOUT"); @@ -131,7 +131,7 @@ protected void beforeHookedMethod(MethodHookParam param) { }; try { - Class SystemBarUtilsClass = findClass("com.android.internal.policy.SystemBarUtils", lpparam.classLoader); + Class SystemBarUtilsClass = findClass("com.android.internal.policy.SystemBarUtils", lpParam.classLoader); hookAllMethods(SystemBarUtilsClass, "getStatusBarHeight", resizedResultHook); hookAllMethods(SystemBarUtilsClass, "getStatusBarHeightForRotation", resizedResultHook); diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/android/SystemScreenRecord.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/android/SystemScreenRecord.java index 7ce413bb9..a37378108 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/android/SystemScreenRecord.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/android/SystemScreenRecord.java @@ -29,10 +29,10 @@ public void updatePrefs(String... Key) { } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { try { - Class DisplayManagerServiceClass = findClass("com.android.server.display.DisplayManagerService", lpparam.classLoader); + Class DisplayManagerServiceClass = findClass("com.android.server.display.DisplayManagerService", lpParam.classLoader); hookAllMethods(DisplayManagerServiceClass, "canProjectSecureVideo", new XC_MethodHook() { //Granting the required permission to systemui @Override diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/dialer/RecordingMessage.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/dialer/RecordingMessage.java index 80f124bf5..e59cb9585 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/dialer/RecordingMessage.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/dialer/RecordingMessage.java @@ -40,7 +40,7 @@ public boolean listensTo(String packageName) { @SuppressLint("DiscouragedApi") @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { int call_recording_starting_voice = mContext.getResources().getIdentifier("call_recording_starting_voice", "string", mContext.getPackageName()); int call_recording_ending_voice = mContext.getResources().getIdentifier("call_recording_ending_voice", "string", mContext.getPackageName()); diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/ClearAllButtonMod.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/ClearAllButtonMod.java index a4bc035c9..389c723e3 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/ClearAllButtonMod.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/ClearAllButtonMod.java @@ -59,11 +59,11 @@ public boolean listensTo(String packageName) { } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { - if (!lpparam.packageName.equals(listenPackage)) return; + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { + if (!lpParam.packageName.equals(listenPackage)) return; - Class OverviewActionsViewClass = findClass("com.android.quickstep.views.OverviewActionsView", lpparam.classLoader); - Class RecentsViewClass = findClass("com.android.quickstep.views.RecentsView", lpparam.classLoader); + Class OverviewActionsViewClass = findClass("com.android.quickstep.views.OverviewActionsView", lpParam.classLoader); + Class RecentsViewClass = findClass("com.android.quickstep.views.RecentsView", lpParam.classLoader); Method dismissAllTasksMethod = findMethodBestMatch(RecentsViewClass, "dismissAllTasks", View.class); hookAllConstructors(RecentsViewClass, new XC_MethodHook() { diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/CustomNavGestures.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/CustomNavGestures.java index d58a4e983..f2e1e2fb2 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/CustomNavGestures.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/CustomNavGestures.java @@ -93,11 +93,11 @@ public boolean listensTo(String packageName) { } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { - Class OtherActivityInputConsumerClass = findClass("com.android.quickstep.inputconsumers.OtherActivityInputConsumer", lpparam.classLoader); //When apps are open - Class OverviewInputConsumerClass = findClass("com.android.quickstep.inputconsumers.OverviewInputConsumer", lpparam.classLoader); //When on Home screen and Recents - Class SystemUiProxyClass = findClass("com.android.quickstep.SystemUiProxy", lpparam.classLoader); - Class RecentTasksListClass = findClass("com.android.quickstep.RecentTasksList", lpparam.classLoader); + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { + Class OtherActivityInputConsumerClass = findClass("com.android.quickstep.inputconsumers.OtherActivityInputConsumer", lpParam.classLoader); //When apps are open + Class OverviewInputConsumerClass = findClass("com.android.quickstep.inputconsumers.OverviewInputConsumer", lpParam.classLoader); //When on Home screen and Recents + Class SystemUiProxyClass = findClass("com.android.quickstep.SystemUiProxy", lpParam.classLoader); + Class RecentTasksListClass = findClass("com.android.quickstep.RecentTasksList", lpParam.classLoader); Rect displayBounds = SystemUtils.WindowManager().getMaximumWindowMetrics().getBounds(); displayW = Math.min(displayBounds.width(), displayBounds.height()); diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/FeatureFlags.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/FeatureFlags.java index 244b661b9..e02aecde4 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/FeatureFlags.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/FeatureFlags.java @@ -39,11 +39,11 @@ public boolean listensTo(String packageName) { } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { try { -// Class FeatureFlags = findClass("com.android.launcher3.config.FeatureFlags", lpparam.classLoader); - Class LauncherIconsClass = findClass("com.android.launcher3.icons.LauncherIcons", lpparam.classLoader); - Class ClippedMonoDrawableClass = findClass("com.android.launcher3.icons.BaseIconFactory$ClippedMonoDrawable", lpparam.classLoader); +// Class FeatureFlags = findClass("com.android.launcher3.config.FeatureFlags", lpParam.classLoader); + Class LauncherIconsClass = findClass("com.android.launcher3.icons.LauncherIcons", lpParam.classLoader); + Class ClippedMonoDrawableClass = findClass("com.android.launcher3.icons.BaseIconFactory$ClippedMonoDrawable", lpParam.classLoader); hookAllMethods(LauncherIconsClass, "getMonochromeDrawable", new XC_MethodHook() { //flag doesn't work on A14B3 for some reason @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/PixelXpertIconUpdater.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/PixelXpertIconUpdater.java index 3a3684f42..26b90f030 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/PixelXpertIconUpdater.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/PixelXpertIconUpdater.java @@ -32,9 +32,9 @@ public boolean listensTo(String packageName) { } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { - Class LauncherModelClass = findClass("com.android.launcher3.LauncherModel", lpparam.classLoader); - Class BaseDraggingActivityClass = findClass("com.android.launcher3.BaseDraggingActivity", lpparam.classLoader); + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { + Class LauncherModelClass = findClass("com.android.launcher3.LauncherModel", lpParam.classLoader); + Class BaseDraggingActivityClass = findClass("com.android.launcher3.BaseDraggingActivity", lpParam.classLoader); hookAllMethods(BaseDraggingActivityClass, "onResume", new XC_MethodHook() { @Override diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/TaskbarActivator.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/TaskbarActivator.java index a987cf221..a544cf2d0 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/TaskbarActivator.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/TaskbarActivator.java @@ -107,20 +107,20 @@ public boolean listensTo(String packageName) { } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { - - Class RecentTasksListClass = findClass("com.android.quickstep.RecentTasksList", lpparam.classLoader); - Class AppInfoClass = findClass("com.android.launcher3.model.data.AppInfo", lpparam.classLoader); - Class TaskbarViewClass = findClass("com.android.launcher3.taskbar.TaskbarView", lpparam.classLoader); - Class ItemInfoClass = findClass("com.android.launcher3.model.data.ItemInfo", lpparam.classLoader); - Class TaskbarModelCallbacksClass = findClass("com.android.launcher3.taskbar.TaskbarModelCallbacks", lpparam.classLoader); - Class DeviceProfileClass = findClass("com.android.launcher3.DeviceProfile", lpparam.classLoader); - Class ActivityManagerWrapperClass = findClass("com.android.systemui.shared.system.ActivityManagerWrapper", lpparam.classLoader); - Class TaskbarActivityContextClass = findClass("com.android.launcher3.taskbar.TaskbarActivityContext", lpparam.classLoader); - Class LauncherModelClass = findClass("com.android.launcher3.LauncherModel", lpparam.classLoader); - Class BaseDraggingActivityClass = findClass("com.android.launcher3.BaseDraggingActivity", lpparam.classLoader); - Class DisplayControllerClass = findClass("com.android.launcher3.util.DisplayController", lpparam.classLoader); - Class DisplayControllerInfoClass = findClass("com.android.launcher3.util.DisplayController$Info", lpparam.classLoader); + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { + + Class RecentTasksListClass = findClass("com.android.quickstep.RecentTasksList", lpParam.classLoader); + Class AppInfoClass = findClass("com.android.launcher3.model.data.AppInfo", lpParam.classLoader); + Class TaskbarViewClass = findClass("com.android.launcher3.taskbar.TaskbarView", lpParam.classLoader); + Class ItemInfoClass = findClass("com.android.launcher3.model.data.ItemInfo", lpParam.classLoader); + Class TaskbarModelCallbacksClass = findClass("com.android.launcher3.taskbar.TaskbarModelCallbacks", lpParam.classLoader); + Class DeviceProfileClass = findClass("com.android.launcher3.DeviceProfile", lpParam.classLoader); + Class ActivityManagerWrapperClass = findClass("com.android.systemui.shared.system.ActivityManagerWrapper", lpParam.classLoader); + Class TaskbarActivityContextClass = findClass("com.android.launcher3.taskbar.TaskbarActivityContext", lpParam.classLoader); + Class LauncherModelClass = findClass("com.android.launcher3.LauncherModel", lpParam.classLoader); + Class BaseDraggingActivityClass = findClass("com.android.launcher3.BaseDraggingActivity", lpParam.classLoader); + Class DisplayControllerClass = findClass("com.android.launcher3.util.DisplayController", lpParam.classLoader); + Class DisplayControllerInfoClass = findClass("com.android.launcher3.util.DisplayController$Info", lpParam.classLoader); Method commitItemsToUIMethod = findMethodExact(TaskbarModelCallbacksClass, "commitItemsToUI"); hookAllMethods(DisplayControllerInfoClass, "isTablet", new XC_MethodHook() { diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/settings/AppCloneEnabler.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/settings/AppCloneEnabler.java index e3c68dd62..81bb15c3f 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/settings/AppCloneEnabler.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/settings/AppCloneEnabler.java @@ -48,12 +48,12 @@ public boolean listensTo(String packageName) { @SuppressLint("ResourceType") @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { - Class ClonedAppsPreferenceControllerClass = findClass("com.android.settings.applications.ClonedAppsPreferenceController", lpparam.classLoader); - Class AppStateClonedAppsBridgeClass = findClass("com.android.settings.applications.AppStateClonedAppsBridge", lpparam.classLoader); - Class ManageApplicationsClass = findClass("com.android.settings.applications.manageapplications.ManageApplications", lpparam.classLoader); - UtilsClass = findClass("com.android.settings.Utils", lpparam.classLoader); + Class ClonedAppsPreferenceControllerClass = findClass("com.android.settings.applications.ClonedAppsPreferenceController", lpParam.classLoader); + Class AppStateClonedAppsBridgeClass = findClass("com.android.settings.applications.AppStateClonedAppsBridge", lpParam.classLoader); + Class ManageApplicationsClass = findClass("com.android.settings.applications.manageapplications.ManageApplications", lpParam.classLoader); + UtilsClass = findClass("com.android.settings.Utils", lpParam.classLoader); hookAllMethods(ManageApplicationsClass, "updateOptionsMenu", new XC_MethodHook() { @Override @@ -68,7 +68,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { /* Private Space - Class FlagsClass = findClass("android.os.Flags", lpparam.classLoader); + Class FlagsClass = findClass("android.os.Flags", lpParam.classLoader); hookAllMethods(FlagsClass, "allowPrivateProfile", new XC_MethodHook() { @Override @@ -119,7 +119,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { }); //the way to manually clone the app -/* Class CloneBackendClass = findClass("com.android.settings.applications.manageapplications.CloneBackend", lpparam.classLoader); +/* Class CloneBackendClass = findClass("com.android.settings.applications.manageapplications.CloneBackend", lpParam.classLoader); Object cb = callStaticMethod(CloneBackendClass, "getInstance", mContext); callMethod(cb, "installCloneApp", "com.whatsapp");*/ diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/settings/PXSettingsLauncher.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/settings/PXSettingsLauncher.java index 81b944293..ceb7a5bbe 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/settings/PXSettingsLauncher.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/settings/PXSettingsLauncher.java @@ -42,9 +42,9 @@ public boolean listensTo(String packageName) { } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { - Class HomepagePreferenceClass = findClass("com.android.settings.widget.HomepagePreference", lpparam.classLoader); - Class TopLevelSettingsClass = findClass("com.android.settings.homepage.TopLevelSettings", lpparam.classLoader); + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { + Class HomepagePreferenceClass = findClass("com.android.settings.widget.HomepagePreference", lpParam.classLoader); + Class TopLevelSettingsClass = findClass("com.android.settings.homepage.TopLevelSettings", lpParam.classLoader); hookAllMethods(TopLevelSettingsClass, "onPreferenceTreeClick", new XC_MethodHook() { @Override diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BatteryDataProvider.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BatteryDataProvider.java index c30ca5aad..58e94b4fd 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BatteryDataProvider.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BatteryDataProvider.java @@ -51,9 +51,9 @@ public BatteryDataProvider(Context context) { public void updatePrefs(String... Key) {} @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { - Class BatteryStatusClass = findClass("com.android.settingslib.fuelgauge.BatteryStatus", lpparam.classLoader); - Class BatteryControllerImplClass = findClass("com.android.systemui.statusbar.policy.BatteryControllerImpl", lpparam.classLoader); + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { + Class BatteryStatusClass = findClass("com.android.settingslib.fuelgauge.BatteryStatus", lpParam.classLoader); + Class BatteryControllerImplClass = findClass("com.android.systemui.statusbar.policy.BatteryControllerImpl", lpParam.classLoader); //once an intent is received, it's either battery level change, powersave change, or demo mode. we don't expect demo // intents normally. So it's safe to assume we'll need to update battery anyway diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BatteryStyleManager.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BatteryStyleManager.java index 9792c4401..fe430a54c 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BatteryStyleManager.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BatteryStyleManager.java @@ -141,17 +141,17 @@ private static void updateBatteryViewValues(View view, boolean forcePercentageCo } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) { + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) { BatteryDataProvider.registerInfoCallback(() -> refreshAllBatteryIcons(false)); - findAndHookConstructor("com.android.settingslib.graph.ThemedBatteryDrawable", lpparam.classLoader, Context.class, int.class, new XC_MethodHook() { + findAndHookConstructor("com.android.settingslib.graph.ThemedBatteryDrawable", lpParam.classLoader, Context.class, int.class, new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { frameColor = (int) param.args[1]; } }); - Class BatteryMeterViewClass = findClassIfExists("com.android.systemui.battery.BatteryMeterView", lpparam.classLoader); + Class BatteryMeterViewClass = findClassIfExists("com.android.systemui.battery.BatteryMeterView", lpParam.classLoader); View.OnAttachStateChangeListener listener = new View.OnAttachStateChangeListener() { @Override diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BrightnessSlider.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BrightnessSlider.java index bbd5b4ef9..8bafe8367 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BrightnessSlider.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BrightnessSlider.java @@ -112,20 +112,20 @@ public boolean listensTo(String packageName) { } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { - if (!BrightnessHookEnabled || !listenPackage.equals(lpparam.packageName)) //master switch + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { + if (!BrightnessHookEnabled || !listenPackage.equals(lpParam.packageName)) //master switch return; - Class QSPanelControllerClass = findClass("com.android.systemui.qs.QSPanelController", lpparam.classLoader); - Class BrightnessMirrorHandlerClass = findClass("com.android.systemui.settings.brightness.BrightnessMirrorHandler", lpparam.classLoader); - Class QuickQSPanelControllerClass = findClass("com.android.systemui.qs.QuickQSPanelController", lpparam.classLoader); - Class QSPanelControllerBaseClass = findClass("com.android.systemui.qs.QSPanelControllerBase", lpparam.classLoader); - Class CentralSurfacesImplClass = findClassIfExists("com.android.systemui.statusbar.phone.CentralSurfacesImpl", lpparam.classLoader); - Class QSPanelClass = findClass("com.android.systemui.qs.QSPanel", lpparam.classLoader); - Class BrightnessSliderControllerClass = findClass("com.android.systemui.settings.brightness.BrightnessSliderController", lpparam.classLoader); - Class BrightnessSliderViewClass = findClass("com.android.systemui.settings.brightness.BrightnessSliderView", lpparam.classLoader); - DejankUtilsClass = findClass("com.android.systemui.DejankUtils", lpparam.classLoader); - BrightnessControllerClass = findClass("com.android.systemui.settings.brightness.BrightnessController", lpparam.classLoader); + Class QSPanelControllerClass = findClass("com.android.systemui.qs.QSPanelController", lpParam.classLoader); + Class BrightnessMirrorHandlerClass = findClass("com.android.systemui.settings.brightness.BrightnessMirrorHandler", lpParam.classLoader); + Class QuickQSPanelControllerClass = findClass("com.android.systemui.qs.QuickQSPanelController", lpParam.classLoader); + Class QSPanelControllerBaseClass = findClass("com.android.systemui.qs.QSPanelControllerBase", lpParam.classLoader); + Class CentralSurfacesImplClass = findClassIfExists("com.android.systemui.statusbar.phone.CentralSurfacesImpl", lpParam.classLoader); + Class QSPanelClass = findClass("com.android.systemui.qs.QSPanel", lpParam.classLoader); + Class BrightnessSliderControllerClass = findClass("com.android.systemui.settings.brightness.BrightnessSliderController", lpParam.classLoader); + Class BrightnessSliderViewClass = findClass("com.android.systemui.settings.brightness.BrightnessSliderView", lpParam.classLoader); + DejankUtilsClass = findClass("com.android.systemui.DejankUtils", lpParam.classLoader); + BrightnessControllerClass = findClass("com.android.systemui.settings.brightness.BrightnessController", lpParam.classLoader); hookAllMethods(BrightnessSliderViewClass, "dispatchTouchEvent", new XC_MethodHook() { //responding to QQS slider touch event @Override diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java index 33f824918..d8ed5c01d 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java @@ -63,11 +63,11 @@ public void updatePrefs(String... Key) { } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { - Class QSImplClass = findClass("com.android.systemui.qs.QSImpl", lpparam.classLoader); - Class CanvasEngineClass = findClass("com.android.systemui.wallpapers.ImageWallpaper$CanvasEngine", lpparam.classLoader); - Class CentralSurfacesImplClass = findClass("com.android.systemui.statusbar.phone.CentralSurfacesImpl", lpparam.classLoader); - Class ScrimControllerClass = findClass("com.android.systemui.statusbar.phone.ScrimController", lpparam.classLoader); + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { + Class QSImplClass = findClass("com.android.systemui.qs.QSImpl", lpParam.classLoader); + Class CanvasEngineClass = findClass("com.android.systemui.wallpapers.ImageWallpaper$CanvasEngine", lpParam.classLoader); + Class CentralSurfacesImplClass = findClass("com.android.systemui.statusbar.phone.CentralSurfacesImpl", lpParam.classLoader); + Class ScrimControllerClass = findClass("com.android.systemui.statusbar.phone.ScrimController", lpParam.classLoader); hookAllMethods(CentralSurfacesImplClass, "start", new XC_MethodHook() { @Override diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/EasyUnlock.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/EasyUnlock.java index 3220cbfa9..62819908f 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/EasyUnlock.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/EasyUnlock.java @@ -41,12 +41,12 @@ public void updatePrefs(String... Key) { } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { - if (!lpparam.packageName.equals(listenPackage)) return; + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { + if (!lpParam.packageName.equals(listenPackage)) return; - Class KeyguardAbsKeyInputViewControllerClass = findClass("com.android.keyguard.KeyguardAbsKeyInputViewController", lpparam.classLoader); - Class LockscreenCredentialClass = findClass("com.android.internal.widget.LockscreenCredential", lpparam.classLoader); - Class StatusBarKeyguardViewManagerClass = findClass("com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager", lpparam.classLoader); + Class KeyguardAbsKeyInputViewControllerClass = findClass("com.android.keyguard.KeyguardAbsKeyInputViewController", lpParam.classLoader); + Class LockscreenCredentialClass = findClass("com.android.internal.widget.LockscreenCredential", lpParam.classLoader); + Class StatusBarKeyguardViewManagerClass = findClass("com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager", lpParam.classLoader); boolean pre13QPR3 = findFieldIfExists(StatusBarKeyguardViewManagerClass, "mBouncer") != null; diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/FeatureFlagsMods.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/FeatureFlagsMods.java index 15cea2650..224c7e436 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/FeatureFlagsMods.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/FeatureFlagsMods.java @@ -47,10 +47,10 @@ public void updatePrefs(String... Key) { } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { - if (!lpparam.packageName.equals(listenPackage)) return; + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { + if (!lpParam.packageName.equals(listenPackage)) return; -/* Class DeviceConfigClass = findClass("android.provider.DeviceConfig", lpparam.classLoader); +/* Class DeviceConfigClass = findClass("android.provider.DeviceConfig", lpParam.classLoader); hookAllMethods(DeviceConfigClass, "getBoolean", new XC_MethodHook() { @Override @@ -62,7 +62,7 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { } });*/ //replaced with this: - Class ClipboardOverlayControllerClass = findClass("com.android.systemui.clipboardoverlay.ClipboardOverlayController", lpparam.classLoader); + Class ClipboardOverlayControllerClass = findClass("com.android.systemui.clipboardoverlay.ClipboardOverlayController", lpParam.classLoader); ReflectionTools.hookAllMethodsMatchPattern(ClipboardOverlayControllerClass, "setExpandedView.*", new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { @@ -77,7 +77,7 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { hookAllMethods( - findClass("com.android.settingslib.mobile.MobileMappings$Config", lpparam.classLoader), + findClass("com.android.settingslib.mobile.MobileMappings$Config", lpParam.classLoader), "readConfig", new XC_MethodHook() { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/FingerprintWhileDozing.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/FingerprintWhileDozing.java index 70db2f737..0f83122bf 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/FingerprintWhileDozing.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/FingerprintWhileDozing.java @@ -33,10 +33,10 @@ public boolean listensTo(String packageName) { } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { - if (!lpparam.packageName.equals(listenPackage)) return; + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { + if (!lpParam.packageName.equals(listenPackage)) return; - Class KeyguardUpdateMonitorClass = findClass("com.android.keyguard.KeyguardUpdateMonitor", lpparam.classLoader); + Class KeyguardUpdateMonitorClass = findClass("com.android.keyguard.KeyguardUpdateMonitor", lpParam.classLoader); hookAllMethods(KeyguardUpdateMonitorClass, "shouldListenForFingerprint", new XC_MethodHook() { diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/FlashLightLevel.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/FlashLightLevel.java index 04cbd0b5d..901d4b33d 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/FlashLightLevel.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/FlashLightLevel.java @@ -54,13 +54,13 @@ public boolean listensTo(String packageName) { } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { - if (!lpparam.packageName.equals(listenPackage)) return; + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { + if (!lpParam.packageName.equals(listenPackage)) return; mFlashPercentageDrawable = new TilePercentageDrawable(mContext); mFlashPercentageDrawable.setAlpha(64); - Class QSTileViewImplClass = findClass("com.android.systemui.qs.tileimpl.QSTileViewImpl", lpparam.classLoader); + Class QSTileViewImplClass = findClass("com.android.systemui.qs.tileimpl.QSTileViewImpl", lpParam.classLoader); hookAllMethods(QSTileViewImplClass, "handleStateChanged", new XC_MethodHook() { @SuppressLint("DiscouragedApi") diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/GestureNavbarManager.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/GestureNavbarManager.java index 5fd42a8f7..704d97cf1 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/GestureNavbarManager.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/GestureNavbarManager.java @@ -102,14 +102,14 @@ private void refreshNavbar() { //endregion @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { - if (!lpparam.packageName.equals(listenPackage)) return; - - Class NavigationBarInflaterViewClass = findClass("com.android.systemui.navigationbar.NavigationBarInflaterView", lpparam.classLoader); - Class NavigationHandleClass = findClass("com.android.systemui.navigationbar.gestural.NavigationHandle", lpparam.classLoader); - Class EdgeBackGestureHandlerClass = findClassIfExists("com.android.systemui.navigationbar.gestural.EdgeBackGestureHandler", lpparam.classLoader); - Class NavigationBarEdgePanelClass = findClassIfExists("com.android.systemui.navigationbar.gestural.NavigationBarEdgePanel", lpparam.classLoader); - Class BackPanelControllerClass = findClass("com.android.systemui.navigationbar.gestural.BackPanelController", lpparam.classLoader); + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { + if (!lpParam.packageName.equals(listenPackage)) return; + + Class NavigationBarInflaterViewClass = findClass("com.android.systemui.navigationbar.NavigationBarInflaterView", lpParam.classLoader); + Class NavigationHandleClass = findClass("com.android.systemui.navigationbar.gestural.NavigationHandle", lpParam.classLoader); + Class EdgeBackGestureHandlerClass = findClassIfExists("com.android.systemui.navigationbar.gestural.EdgeBackGestureHandler", lpParam.classLoader); + Class NavigationBarEdgePanelClass = findClassIfExists("com.android.systemui.navigationbar.gestural.NavigationBarEdgePanel", lpParam.classLoader); + Class BackPanelControllerClass = findClass("com.android.systemui.navigationbar.gestural.BackPanelController", lpParam.classLoader); //region back gesture diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/KeyGuardPinScrambler.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/KeyGuardPinScrambler.java index 757e2ef25..eefbe4eef 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/KeyGuardPinScrambler.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/KeyGuardPinScrambler.java @@ -43,10 +43,10 @@ public boolean listensTo(String packageName) { final List digits = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 0); @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { - if (!lpparam.packageName.equals(listenPackage)) return; + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { + if (!lpParam.packageName.equals(listenPackage)) return; - Class KeyguardPinBasedInputViewClass = findClass("com.android.keyguard.KeyguardPinBasedInputView", lpparam.classLoader); + Class KeyguardPinBasedInputViewClass = findClass("com.android.keyguard.KeyguardPinBasedInputView", lpParam.classLoader); XC_MethodHook pinShuffleHook = new XC_MethodHook() { @Override diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/KeyguardMods.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/KeyguardMods.java index d282ee5bf..74723707a 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/KeyguardMods.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/KeyguardMods.java @@ -173,26 +173,26 @@ public boolean listensTo(String packageName) { } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { - Class CarrierTextControllerClass = findClass("com.android.keyguard.CarrierTextController", lpparam.classLoader); - Class KeyguardClockSwitchClass = findClass("com.android.keyguard.KeyguardClockSwitch", lpparam.classLoader); - Class KeyguardIndicationControllerClass = findClass("com.android.systemui.statusbar.KeyguardIndicationController", lpparam.classLoader); - Class ScrimControllerClass = findClass("com.android.systemui.statusbar.phone.ScrimController", lpparam.classLoader); - Class ScrimStateEnum = findClass("com.android.systemui.statusbar.phone.ScrimState", lpparam.classLoader); - Class KeyguardStatusBarViewClass = findClass("com.android.systemui.statusbar.phone.KeyguardStatusBarView", lpparam.classLoader); - Class CentralSurfacesImplClass = findClass("com.android.systemui.statusbar.phone.CentralSurfacesImpl", lpparam.classLoader); - Class KeyguardBottomAreaViewBinderClass = findClass("com.android.systemui.keyguard.ui.binder.KeyguardBottomAreaViewBinder", lpparam.classLoader); - Class NotificationPanelViewControllerClass = findClass("com.android.systemui.shade.NotificationPanelViewController", lpparam.classLoader); //used to launch camera - Class QRCodeScannerControllerClass = findClass("com.android.systemui.qrcodescanner.controller.QRCodeScannerController", lpparam.classLoader); -// Class ActivityStarterDelegateClass = findClass("com.android.systemui.ActivityStarterDelegate", lpparam.classLoader); - Class ZenModeControllerImplClass = findClass("com.android.systemui.statusbar.policy.ZenModeControllerImpl", lpparam.classLoader); - Class FooterActionsInteractorImplClass = findClass("com.android.systemui.qs.footer.domain.interactor.FooterActionsInteractorImpl", lpparam.classLoader); - Class CommandQueueClass = findClass("com.android.systemui.statusbar.CommandQueue", lpparam.classLoader); - Class AmbientDisplayConfigurationClass = findClass("android.hardware.display.AmbientDisplayConfiguration", lpparam.classLoader); - Class AssistManagerClass = findClassIfExists("com.android.systemui.assist.AssistManager", lpparam.classLoader); + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { + Class CarrierTextControllerClass = findClass("com.android.keyguard.CarrierTextController", lpParam.classLoader); + Class KeyguardClockSwitchClass = findClass("com.android.keyguard.KeyguardClockSwitch", lpParam.classLoader); + Class KeyguardIndicationControllerClass = findClass("com.android.systemui.statusbar.KeyguardIndicationController", lpParam.classLoader); + Class ScrimControllerClass = findClass("com.android.systemui.statusbar.phone.ScrimController", lpParam.classLoader); + Class ScrimStateEnum = findClass("com.android.systemui.statusbar.phone.ScrimState", lpParam.classLoader); + Class KeyguardStatusBarViewClass = findClass("com.android.systemui.statusbar.phone.KeyguardStatusBarView", lpParam.classLoader); + Class CentralSurfacesImplClass = findClass("com.android.systemui.statusbar.phone.CentralSurfacesImpl", lpParam.classLoader); + Class KeyguardBottomAreaViewBinderClass = findClass("com.android.systemui.keyguard.ui.binder.KeyguardBottomAreaViewBinder", lpParam.classLoader); + Class NotificationPanelViewControllerClass = findClass("com.android.systemui.shade.NotificationPanelViewController", lpParam.classLoader); //used to launch camera + Class QRCodeScannerControllerClass = findClass("com.android.systemui.qrcodescanner.controller.QRCodeScannerController", lpParam.classLoader); +// Class ActivityStarterDelegateClass = findClass("com.android.systemui.ActivityStarterDelegate", lpParam.classLoader); + Class ZenModeControllerImplClass = findClass("com.android.systemui.statusbar.policy.ZenModeControllerImpl", lpParam.classLoader); + Class FooterActionsInteractorImplClass = findClass("com.android.systemui.qs.footer.domain.interactor.FooterActionsInteractorImpl", lpParam.classLoader); + Class CommandQueueClass = findClass("com.android.systemui.statusbar.CommandQueue", lpParam.classLoader); + Class AmbientDisplayConfigurationClass = findClass("android.hardware.display.AmbientDisplayConfiguration", lpParam.classLoader); + Class AssistManagerClass = findClassIfExists("com.android.systemui.assist.AssistManager", lpParam.classLoader); if(AssistManagerClass == null) { - AssistManagerClass = findClass("com.google.android.systemui.assist.AssistManagerGoogle", lpparam.classLoader); + AssistManagerClass = findClass("com.google.android.systemui.assist.AssistManagerGoogle", lpParam.classLoader); } @@ -361,7 +361,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { }; try { //A14 - Class KeyguardIndicationControllerGoogleClass = findClass("com.google.android.systemui.statusbar.KeyguardIndicationControllerGoogle", lpparam.classLoader); + Class KeyguardIndicationControllerGoogleClass = findClass("com.google.android.systemui.statusbar.KeyguardIndicationControllerGoogle", lpParam.classLoader); hookAllConstructors(KeyguardIndicationControllerGoogleClass, keyguardIndicatorFinder); hookAllMethods(KeyguardIndicationControllerGoogleClass, "computePowerIndication", powerIndicationHook); } diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/MultiStatusbarRows.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/MultiStatusbarRows.java index cbc5c4568..a9a1104e2 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/MultiStatusbarRows.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/MultiStatusbarRows.java @@ -46,10 +46,10 @@ public boolean listensTo(String packageName) { } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { - if (!lpparam.packageName.equals(listenPackage)) return; + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { + if (!lpParam.packageName.equals(listenPackage)) return; - Class IconManagerClass = findClass("com.android.systemui.statusbar.phone.StatusBarIconController$IconManager", lpparam.classLoader); + Class IconManagerClass = findClass("com.android.systemui.statusbar.phone.StatusBarIconController$IconManager", lpParam.classLoader); hookAllConstructors(IconManagerClass, new XC_MethodHook() { @Override @@ -62,7 +62,7 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { String id = mContext.getResources().getResourceName(((View) linearStatusbarIconContainer.getParent().getParent()).getId()); //helps getting exception if it's in QS if (!id.contains("status_bar_end_side_content")) return; - FlexStatusIconContainer flex = new FlexStatusIconContainer(mContext, lpparam.classLoader, linearStatusbarIconContainer); + FlexStatusIconContainer flex = new FlexStatusIconContainer(mContext, lpParam.classLoader, linearStatusbarIconContainer); flex.setPadding(linearStatusbarIconContainer.getPaddingLeft(), 0, linearStatusbarIconContainer.getPaddingRight(), 0); LinearLayout.LayoutParams flexParams = new LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.MATCH_PARENT, 1); diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/NotificationExpander.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/NotificationExpander.java index 8af54431e..ffdbe0d2b 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/NotificationExpander.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/NotificationExpander.java @@ -68,22 +68,22 @@ public boolean listensTo(String packageName) { } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { - if (!listenPackage.equals(lpparam.packageName) || !notificationExpandallHookEnabled) return; + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { + if (!listenPackage.equals(lpParam.packageName) || !notificationExpandallHookEnabled) return; - Class NotificationStackScrollLayoutClass = findClass("com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout", lpparam.classLoader); - Class FooterViewButtonClass = findClass("com.android.systemui.statusbar.notification.row.FooterViewButton", lpparam.classLoader); - Class NotifCollectionClass = findClassIfExists("com.android.systemui.statusbar.notification.collection.NotifCollection", lpparam.classLoader); - Class NotificationPanelViewControllerClass = findClass("com.android.systemui.shade.NotificationPanelViewController", lpparam.classLoader); + Class NotificationStackScrollLayoutClass = findClass("com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout", lpParam.classLoader); + Class FooterViewButtonClass = findClass("com.android.systemui.statusbar.notification.row.FooterViewButton", lpParam.classLoader); + Class NotifCollectionClass = findClassIfExists("com.android.systemui.statusbar.notification.collection.NotifCollection", lpParam.classLoader); + Class NotificationPanelViewControllerClass = findClass("com.android.systemui.shade.NotificationPanelViewController", lpParam.classLoader); Class FooterViewClass; try { //14AP11 - FooterViewClass = findClass("com.android.systemui.statusbar.notification.footer.ui.view.FooterView", lpparam.classLoader); + FooterViewClass = findClass("com.android.systemui.statusbar.notification.footer.ui.view.FooterView", lpParam.classLoader); } catch (Throwable ignored) //Older { - FooterViewClass = findClass("com.android.systemui.statusbar.notification.row.FooterView", lpparam.classLoader); + FooterViewClass = findClass("com.android.systemui.statusbar.notification.row.FooterView", lpParam.classLoader); } //region default notification state diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/NotificationManager.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/NotificationManager.java index 38ee9920e..8ae0eca7d 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/NotificationManager.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/NotificationManager.java @@ -38,7 +38,7 @@ public void updatePrefs(String... Key) { } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { XC_MethodHook headsupFinder = new XC_MethodHook() { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { @@ -48,12 +48,12 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { } }; - Class HeadsUpManagerClass = findClass("com.android.systemui.statusbar.policy.HeadsUpManager", lpparam.classLoader); + Class HeadsUpManagerClass = findClass("com.android.systemui.statusbar.policy.HeadsUpManager", lpParam.classLoader); hookAllConstructors(HeadsUpManagerClass, headsupFinder); //interface in 14QPR2, class in older try //A14 QPR2 { - Class BaseHeadsUpManagerClass = findClass("com.android.systemui.statusbar.policy.BaseHeadsUpManager", lpparam.classLoader); + Class BaseHeadsUpManagerClass = findClass("com.android.systemui.statusbar.policy.BaseHeadsUpManager", lpParam.classLoader); hookAllConstructors(BaseHeadsUpManagerClass, headsupFinder); } catch (Throwable ignored){} diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/QSFooterManager.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/QSFooterManager.java index 27858f3e4..8d1d21577 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/QSFooterManager.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/QSFooterManager.java @@ -58,11 +58,11 @@ public QSFooterManager(Context context) { } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { stringFormatter.registerCallback(this::setQSFooterText); - Class QSFooterViewClass = findClass("com.android.systemui.qs.QSFooterView", lpparam.classLoader); - Class QSContainerImplClass = findClass("com.android.systemui.qs.QSContainerImpl", lpparam.classLoader); + Class QSFooterViewClass = findClass("com.android.systemui.qs.QSFooterView", lpParam.classLoader); + Class QSContainerImplClass = findClass("com.android.systemui.qs.QSContainerImpl", lpParam.classLoader); hookAllConstructors(QSFooterViewClass, new XC_MethodHook() { @Override diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/QSTileGrid.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/QSTileGrid.java index 2ada3982d..9c97dfdc1 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/QSTileGrid.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/QSTileGrid.java @@ -98,19 +98,19 @@ public void updatePrefs(String... Key) { } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { - if (!lpparam.packageName.equals(listenPackage)) return; - - Class QSTileViewImplClass = findClass("com.android.systemui.qs.tileimpl.QSTileViewImpl", lpparam.classLoader); - Class FontSizeUtilsClass = findClass("com.android.systemui.FontSizeUtils", lpparam.classLoader); - Class QSTileImplClass = findClass("com.android.systemui.qs.tileimpl.QSTileImpl", lpparam.classLoader); - Class QSFactoryImplClass = findClass("com.android.systemui.qs.tileimpl.QSFactoryImpl", lpparam.classLoader); - Class QuickQSPanelControllerClass = findClass("com.android.systemui.qs.QuickQSPanelController", lpparam.classLoader); - Class QuickQSPanelClass =findClass("com.android.systemui.qs.QuickQSPanel", lpparam.classLoader); - Class TileAdapterClass = findClass("com.android.systemui.qs.customize.TileAdapter", lpparam.classLoader); - Class SideLabelTileLayoutClass = findClass("com.android.systemui.qs.SideLabelTileLayout", lpparam.classLoader); - - Class TileLayoutClass = findClassIfExists("com.android.systemui.qs.TileLayout", lpparam.classLoader); + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { + if (!lpParam.packageName.equals(listenPackage)) return; + + Class QSTileViewImplClass = findClass("com.android.systemui.qs.tileimpl.QSTileViewImpl", lpParam.classLoader); + Class FontSizeUtilsClass = findClass("com.android.systemui.FontSizeUtils", lpParam.classLoader); + Class QSTileImplClass = findClass("com.android.systemui.qs.tileimpl.QSTileImpl", lpParam.classLoader); + Class QSFactoryImplClass = findClass("com.android.systemui.qs.tileimpl.QSFactoryImpl", lpParam.classLoader); + Class QuickQSPanelControllerClass = findClass("com.android.systemui.qs.QuickQSPanelController", lpParam.classLoader); + Class QuickQSPanelClass =findClass("com.android.systemui.qs.QuickQSPanel", lpParam.classLoader); + Class TileAdapterClass = findClass("com.android.systemui.qs.customize.TileAdapter", lpParam.classLoader); + Class SideLabelTileLayoutClass = findClass("com.android.systemui.qs.SideLabelTileLayout", lpParam.classLoader); + + Class TileLayoutClass = findClassIfExists("com.android.systemui.qs.TileLayout", lpParam.classLoader); if(TileLayoutClass == null) //new versions have merged tile layout to sidelable { TileLayoutClass = SideLabelTileLayoutClass; @@ -182,7 +182,7 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { }); try { - if(findClassIfExists("com.android.systemui.qs.tiles.WifiTile", lpparam.classLoader) == null) + if(findClassIfExists("com.android.systemui.qs.tiles.WifiTile", lpParam.classLoader) == null) Xprefs .edit() .putBoolean("InternetTileModEnabled", false) @@ -223,7 +223,7 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { } }); - Class QRCodeScannerTileClass = findClassIfExists("com.android.systemui.qs.tiles.QRCodeScannerTile", lpparam.classLoader); + Class QRCodeScannerTileClass = findClassIfExists("com.android.systemui.qs.tiles.QRCodeScannerTile", lpParam.classLoader); if (QRCodeScannerTileClass != null) { hookAllMethods(QRCodeScannerTileClass, "handleUpdateState", new XC_MethodHook() { diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ScreenGestures.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ScreenGestures.java index 178aaaef4..e13ad31d2 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ScreenGestures.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ScreenGestures.java @@ -88,8 +88,8 @@ public boolean listensTo(String packageName) { } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { - if (!lpparam.packageName.equals(listenPackage)) return; + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { + if (!lpParam.packageName.equals(listenPackage)) return; mLockscreenDoubleTapToSleep = new GestureDetector(mContext, new GestureDetector.SimpleOnGestureListener() { @Override @@ -99,11 +99,11 @@ public boolean onDoubleTap(MotionEvent e) { } }); - Class NotificationShadeWindowViewControllerClass = findClass("com.android.systemui.shade.NotificationShadeWindowViewController", lpparam.classLoader); - Class NotificationPanelViewControllerClass = findClass("com.android.systemui.shade.NotificationPanelViewController", lpparam.classLoader); - Class DozeTriggersClass = findClass("com.android.systemui.doze.DozeTriggers", lpparam.classLoader); + Class NotificationShadeWindowViewControllerClass = findClass("com.android.systemui.shade.NotificationShadeWindowViewController", lpParam.classLoader); + Class NotificationPanelViewControllerClass = findClass("com.android.systemui.shade.NotificationPanelViewController", lpParam.classLoader); + Class DozeTriggersClass = findClass("com.android.systemui.doze.DozeTriggers", lpParam.classLoader); - Class PhoneStatusBarViewControllerClass = findClass("com.android.systemui.statusbar.phone.PhoneStatusBarViewController", lpparam.classLoader); + Class PhoneStatusBarViewControllerClass = findClass("com.android.systemui.statusbar.phone.PhoneStatusBarViewController", lpParam.classLoader); try { //13 QPR3 hookTouchHandler(PhoneStatusBarViewControllerClass); diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ScreenRecord.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ScreenRecord.java index d8c6a71b1..c4598f2bb 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ScreenRecord.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ScreenRecord.java @@ -31,8 +31,8 @@ public void updatePrefs(String... Key) { } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { - if (!lpparam.packageName.equals(listenPackage)) return; + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { + if (!lpParam.packageName.equals(listenPackage)) return; hookAllMethods(MediaProjection.class, "createVirtualDisplay", new XC_MethodHook() { @Override diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ScreenshotManager.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ScreenshotManager.java index b1941c441..2afb5a861 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ScreenshotManager.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ScreenshotManager.java @@ -48,18 +48,18 @@ public void updatePrefs(String... Key) { } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { - if (!listensTo(lpparam.packageName)) return; + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { + if (!listensTo(lpParam.packageName)) return; - Class ScreenshotControllerClass = findClass("com.android.systemui.screenshot.ScreenshotController", lpparam.classLoader); + Class ScreenshotControllerClass = findClass("com.android.systemui.screenshot.ScreenshotController", lpParam.classLoader); - Class CaptureArgsClass = findClassIfExists("android.window.ScreenCapture.CaptureArgs", lpparam.classLoader); //A14 + Class CaptureArgsClass = findClassIfExists("android.window.ScreenCapture.CaptureArgs", lpParam.classLoader); //A14 if(CaptureArgsClass == null) { - CaptureArgsClass = findClass("android.view.SurfaceControl$DisplayCaptureArgs", lpparam.classLoader); //A13 + CaptureArgsClass = findClass("android.view.SurfaceControl$DisplayCaptureArgs", lpParam.classLoader); //A13 } - Class ScreenshotPolicyImplClass = findClass("com.android.systemui.screenshot.ScreenshotPolicyImpl", lpparam.classLoader); + Class ScreenshotPolicyImplClass = findClass("com.android.systemui.screenshot.ScreenshotPolicyImpl", lpParam.classLoader); hookAllMethodsMatchPattern(ScreenshotPolicyImplClass, ".*isManagedProfile.*", new XC_MethodHook() { @Override @@ -100,7 +100,7 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { }); //A14 QPR3 - Class ScreenshotSoundProviderImplClass = findClassIfExists("com.android.systemui.screenshot.ScreenshotSoundProviderImpl", lpparam.classLoader); + Class ScreenshotSoundProviderImplClass = findClassIfExists("com.android.systemui.screenshot.ScreenshotSoundProviderImpl", lpParam.classLoader); if(ScreenshotSoundProviderImplClass != null) { hookAllMethods(ScreenshotSoundProviderImplClass, "getScreenshotSound", new XC_MethodHook() { @SuppressLint("NewApi") diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/SettingsLibUtilsProvider.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/SettingsLibUtilsProvider.java index 197a26531..abe546452 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/SettingsLibUtilsProvider.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/SettingsLibUtilsProvider.java @@ -48,7 +48,7 @@ public boolean listensTo(String packageName) { } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { - UtilsClass = findClass("com.android.settingslib.Utils", lpparam.classLoader); + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { + UtilsClass = findClass("com.android.settingslib.Utils", lpParam.classLoader); } } diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/StatusbarGestures.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/StatusbarGestures.java index 39f0f46b3..76c68db8f 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/StatusbarGestures.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/StatusbarGestures.java @@ -62,10 +62,10 @@ public void updatePrefs(String... Key) { } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { - if (!lpparam.packageName.equals(listenPackage)) return; + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { + if (!lpParam.packageName.equals(listenPackage)) return; - Class NotificationPanelViewControllerClass = findClass("com.android.systemui.shade.NotificationPanelViewController", lpparam.classLoader); + Class NotificationPanelViewControllerClass = findClass("com.android.systemui.shade.NotificationPanelViewController", lpParam.classLoader); if(findFieldIfExists(NotificationPanelViewControllerClass, "mStatusBarViewTouchEventHandler") != null) { //13 QPR1 hookAllConstructors(NotificationPanelViewControllerClass, new XC_MethodHook() { @@ -146,7 +146,7 @@ protected void beforeHookedMethod(MethodHookParam param1) throws Throwable { } }).size() == 0) { //13 QPR3 - 14 - Class PhoneStatusBarViewControllerClass = findClass("com.android.systemui.statusbar.phone.PhoneStatusBarViewController", lpparam.classLoader); + Class PhoneStatusBarViewControllerClass = findClass("com.android.systemui.statusbar.phone.PhoneStatusBarViewController", lpParam.classLoader); hookAllConstructors(NotificationPanelViewControllerClass, new XC_MethodHook() { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/StatusbarMods.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/StatusbarMods.java index 5f7912b4c..c7adb888b 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/StatusbarMods.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/StatusbarMods.java @@ -498,31 +498,31 @@ private void placeNTQS() { } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { - if (!lpparam.packageName.equals(listenPackage)) return; + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { + if (!lpParam.packageName.equals(listenPackage)) return; IntentFilter filter = new IntentFilter(); filter.addAction(Constants.ACTION_PROFILE_SWITCH_AVAILABLE); mContext.registerReceiver(mAppProfileSwitchReceiver, filter, Context.RECEIVER_EXPORTED); //region needed classes - Class QSSecurityFooterUtilsClass = findClass("com.android.systemui.qs.QSSecurityFooterUtils", lpparam.classLoader); - Class KeyguardStatusBarViewControllerClass = findClass("com.android.systemui.statusbar.phone.KeyguardStatusBarViewController", lpparam.classLoader); -// Class QuickStatusBarHeaderControllerClass = findClass("com.android.systemui.qs.QuickStatusBarHeaderController", lpparam.classLoader); - Class QuickStatusBarHeaderClass = findClass("com.android.systemui.qs.QuickStatusBarHeader", lpparam.classLoader); - Class ClockClass = findClass("com.android.systemui.statusbar.policy.Clock", lpparam.classLoader); - Class PhoneStatusBarViewClass = findClass("com.android.systemui.statusbar.phone.PhoneStatusBarView", lpparam.classLoader); - Class NotificationIconContainerClass = findClass("com.android.systemui.statusbar.phone.NotificationIconContainer", lpparam.classLoader); -// Class StatusBarIconViewClass = findClass("com.android.systemui.statusbar.StatusBarIconView", lpparam.classLoader); - Class CollapsedStatusBarFragmentClass = findClassIfExists("com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragment", lpparam.classLoader); - Class PrivacyItemControllerClass = findClass("com.android.systemui.privacy.PrivacyItemController", lpparam.classLoader); -// Class KeyguardUpdateMonitorClass = findClass("com.android.keyguard.KeyguardUpdateMonitor", lpparam.classLoader); - Class TunerServiceImplClass = findClass("com.android.systemui.tuner.TunerServiceImpl", lpparam.classLoader); - Class ConnectivityCallbackHandlerClass = findClass("com.android.systemui.statusbar.connectivity.CallbackHandler", lpparam.classLoader); - Class HeadsUpStatusBarViewClass = findClass("com.android.systemui.statusbar.HeadsUpStatusBarView", lpparam.classLoader); - StatusBarIconClass = findClass("com.android.internal.statusbar.StatusBarIcon", lpparam.classLoader); - StatusBarIconHolderClass = findClass("com.android.systemui.statusbar.phone.StatusBarIconHolder", lpparam.classLoader); - SystemUIDialogClass = findClass("com.android.systemui.statusbar.phone.SystemUIDialog", lpparam.classLoader); + Class QSSecurityFooterUtilsClass = findClass("com.android.systemui.qs.QSSecurityFooterUtils", lpParam.classLoader); + Class KeyguardStatusBarViewControllerClass = findClass("com.android.systemui.statusbar.phone.KeyguardStatusBarViewController", lpParam.classLoader); +// Class QuickStatusBarHeaderControllerClass = findClass("com.android.systemui.qs.QuickStatusBarHeaderController", lpParam.classLoader); + Class QuickStatusBarHeaderClass = findClass("com.android.systemui.qs.QuickStatusBarHeader", lpParam.classLoader); + Class ClockClass = findClass("com.android.systemui.statusbar.policy.Clock", lpParam.classLoader); + Class PhoneStatusBarViewClass = findClass("com.android.systemui.statusbar.phone.PhoneStatusBarView", lpParam.classLoader); + Class NotificationIconContainerClass = findClass("com.android.systemui.statusbar.phone.NotificationIconContainer", lpParam.classLoader); +// Class StatusBarIconViewClass = findClass("com.android.systemui.statusbar.StatusBarIconView", lpParam.classLoader); + Class CollapsedStatusBarFragmentClass = findClassIfExists("com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragment", lpParam.classLoader); + Class PrivacyItemControllerClass = findClass("com.android.systemui.privacy.PrivacyItemController", lpParam.classLoader); +// Class KeyguardUpdateMonitorClass = findClass("com.android.keyguard.KeyguardUpdateMonitor", lpParam.classLoader); + Class TunerServiceImplClass = findClass("com.android.systemui.tuner.TunerServiceImpl", lpParam.classLoader); + Class ConnectivityCallbackHandlerClass = findClass("com.android.systemui.statusbar.connectivity.CallbackHandler", lpParam.classLoader); + Class HeadsUpStatusBarViewClass = findClass("com.android.systemui.statusbar.HeadsUpStatusBarView", lpParam.classLoader); + StatusBarIconClass = findClass("com.android.internal.statusbar.StatusBarIcon", lpParam.classLoader); + StatusBarIconHolderClass = findClass("com.android.systemui.statusbar.phone.StatusBarIconHolder", lpParam.classLoader); + SystemUIDialogClass = findClass("com.android.systemui.statusbar.phone.SystemUIDialog", lpParam.classLoader); //endregion initSwitchIcon(); @@ -746,11 +746,11 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { try { //QPR3 - Class ShadeHeaderControllerClass = findClassIfExists("com.android.systemui.shade.ShadeHeaderController", lpparam.classLoader); + Class ShadeHeaderControllerClass = findClassIfExists("com.android.systemui.shade.ShadeHeaderController", lpParam.classLoader); if(ShadeHeaderControllerClass == null) //QPR2 { - ShadeHeaderControllerClass = findClass("com.android.systemui.shade.LargeScreenShadeHeaderController", lpparam.classLoader); + ShadeHeaderControllerClass = findClass("com.android.systemui.shade.LargeScreenShadeHeaderController", lpParam.classLoader); } hookAllMethods(ShadeHeaderControllerClass, "onInit", new XC_MethodHook() { @@ -968,11 +968,11 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { }); try { //A14QPR3 - Class MobileIconInteractorImplClass = findClass("com.android.systemui.statusbar.pipeline.mobile.domain.interactor.MobileIconInteractorImpl", lpparam.classLoader); + Class MobileIconInteractorImplClass = findClass("com.android.systemui.statusbar.pipeline.mobile.domain.interactor.MobileIconInteractorImpl", lpParam.classLoader); //we must use the classes defined in the apk. using our own will fail - Class StateFlowImplClass = findClass("kotlinx.coroutines.flow.StateFlowImpl", lpparam.classLoader); - Class ReadonlyStateFlowClass = findClass("kotlinx.coroutines.flow.ReadonlyStateFlow", lpparam.classLoader); + Class StateFlowImplClass = findClass("kotlinx.coroutines.flow.StateFlowImpl", lpParam.classLoader); + Class ReadonlyStateFlowClass = findClass("kotlinx.coroutines.flow.ReadonlyStateFlow", lpParam.classLoader); hookAllConstructors(MobileIconInteractorImplClass, new XC_MethodHook() { @Override diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ThemeManager_13.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ThemeManager_13.java index 20aac8c7a..54152e73c 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ThemeManager_13.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ThemeManager_13.java @@ -99,24 +99,24 @@ public void setLightQSHeader(boolean state) { } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) { - if (!lpparam.packageName.equals(listenPackage)) return; - - Class QSTileViewImplClass = findClass("com.android.systemui.qs.tileimpl.QSTileViewImpl", lpparam.classLoader); - Class ScrimControllerClass = findClass("com.android.systemui.statusbar.phone.ScrimController", lpparam.classLoader); - Class QSPanelControllerClass = findClass("com.android.systemui.qs.QSPanelController", lpparam.classLoader); - Class ScrimStateEnum = findClass("com.android.systemui.statusbar.phone.ScrimState", lpparam.classLoader); - Class QSIconViewImplClass = findClass("com.android.systemui.qs.tileimpl.QSIconViewImpl", lpparam.classLoader); - Class CentralSurfacesImplClass = findClass("com.android.systemui.statusbar.phone.CentralSurfacesImpl", lpparam.classLoader); - Class ClockClass = findClass("com.android.systemui.statusbar.policy.Clock", lpparam.classLoader); - Class QuickStatusBarHeaderClass = findClass("com.android.systemui.qs.QuickStatusBarHeader", lpparam.classLoader); - Class BrightnessSliderViewClass = findClass("com.android.systemui.settings.brightness.BrightnessSliderView", lpparam.classLoader); - Class GlobalActionsDialogLiteSinglePressActionClass = findClass("com.android.systemui.globalactions.GlobalActionsDialogLite$SinglePressAction", lpparam.classLoader); - Class GlobalActionsDialogLiteEmergencyActionClass = findClass("com.android.systemui.globalactions.GlobalActionsDialogLite$EmergencyAction", lpparam.classLoader); - Class GlobalActionsLayoutLiteClass = findClass("com.android.systemui.globalactions.GlobalActionsLayoutLite", lpparam.classLoader); + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) { + if (!lpParam.packageName.equals(listenPackage)) return; + + Class QSTileViewImplClass = findClass("com.android.systemui.qs.tileimpl.QSTileViewImpl", lpParam.classLoader); + Class ScrimControllerClass = findClass("com.android.systemui.statusbar.phone.ScrimController", lpParam.classLoader); + Class QSPanelControllerClass = findClass("com.android.systemui.qs.QSPanelController", lpParam.classLoader); + Class ScrimStateEnum = findClass("com.android.systemui.statusbar.phone.ScrimState", lpParam.classLoader); + Class QSIconViewImplClass = findClass("com.android.systemui.qs.tileimpl.QSIconViewImpl", lpParam.classLoader); + Class CentralSurfacesImplClass = findClass("com.android.systemui.statusbar.phone.CentralSurfacesImpl", lpParam.classLoader); + Class ClockClass = findClass("com.android.systemui.statusbar.policy.Clock", lpParam.classLoader); + Class QuickStatusBarHeaderClass = findClass("com.android.systemui.qs.QuickStatusBarHeader", lpParam.classLoader); + Class BrightnessSliderViewClass = findClass("com.android.systemui.settings.brightness.BrightnessSliderView", lpParam.classLoader); + Class GlobalActionsDialogLiteSinglePressActionClass = findClass("com.android.systemui.globalactions.GlobalActionsDialogLite$SinglePressAction", lpParam.classLoader); + Class GlobalActionsDialogLiteEmergencyActionClass = findClass("com.android.systemui.globalactions.GlobalActionsDialogLite$EmergencyAction", lpParam.classLoader); + Class GlobalActionsLayoutLiteClass = findClass("com.android.systemui.globalactions.GlobalActionsLayoutLite", lpParam.classLoader); try { - Class BatteryStatusChipClass = findClass("com.android.systemui.statusbar.BatteryStatusChip", lpparam.classLoader); + Class BatteryStatusChipClass = findClass("com.android.systemui.statusbar.BatteryStatusChip", lpParam.classLoader); hookAllMethods(BatteryStatusChipClass, "updateResources", new XC_MethodHook() { //background color of 14's charging chip. Fix for light QS theme situation @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { @@ -161,9 +161,9 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { }); try { //13QPR1 - Class QSSecurityFooterClass = findClass("com.android.systemui.qs.QSSecurityFooter", lpparam.classLoader); - Class QSFgsManagerFooterClass = findClass("com.android.systemui.qs.QSFgsManagerFooter", lpparam.classLoader); - Class FooterActionsControllerClass = findClass("com.android.systemui.qs.FooterActionsController", lpparam.classLoader); + Class QSSecurityFooterClass = findClass("com.android.systemui.qs.QSSecurityFooter", lpParam.classLoader); + Class QSFgsManagerFooterClass = findClass("com.android.systemui.qs.QSFgsManagerFooter", lpParam.classLoader); + Class FooterActionsControllerClass = findClass("com.android.systemui.qs.FooterActionsController", lpParam.classLoader); hookAllConstructors(QSFgsManagerFooterClass, new XC_MethodHook() { @Override @@ -234,11 +234,11 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { }catch (Throwable ignored){ //13QPR2&3 //QPR3 - Class QSContainerImplClass = findClass("com.android.systemui.qs.QSContainerImpl", lpparam.classLoader); - Class ShadeHeaderControllerClass = findClassIfExists("com.android.systemui.shade.ShadeHeaderController", lpparam.classLoader); + Class QSContainerImplClass = findClass("com.android.systemui.qs.QSContainerImpl", lpParam.classLoader); + Class ShadeHeaderControllerClass = findClassIfExists("com.android.systemui.shade.ShadeHeaderController", lpParam.classLoader); if(ShadeHeaderControllerClass == null) //13QPR2 { - ShadeHeaderControllerClass = findClass("com.android.systemui.shade.LargeScreenShadeHeaderController", lpparam.classLoader); + ShadeHeaderControllerClass = findClass("com.android.systemui.shade.LargeScreenShadeHeaderController", lpParam.classLoader); } hookAllMethods(ShadeHeaderControllerClass, "onInit", new XC_MethodHook() { //setting colors for some icons diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ThemeManager_14.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ThemeManager_14.java index 544e53829..9687e6658 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ThemeManager_14.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ThemeManager_14.java @@ -104,42 +104,42 @@ public void setLightQSHeader(boolean state) { } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) { + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) { if (!lightQSHeaderEnabled) return; //light QS header pref update needs a systemui restart. so there's no point to load these if not enabled - Class QSTileViewImplClass = findClass("com.android.systemui.qs.tileimpl.QSTileViewImpl", lpparam.classLoader); - Class ScrimControllerClass = findClass("com.android.systemui.statusbar.phone.ScrimController", lpparam.classLoader); - Class QSPanelControllerClass = findClass("com.android.systemui.qs.QSPanelController", lpparam.classLoader); - Class ScrimStateEnum = findClass("com.android.systemui.statusbar.phone.ScrimState", lpparam.classLoader); - Class QSIconViewImplClass = findClass("com.android.systemui.qs.tileimpl.QSIconViewImpl", lpparam.classLoader); - Class CentralSurfacesImplClass = findClass("com.android.systemui.statusbar.phone.CentralSurfacesImpl", lpparam.classLoader); - Class GlobalActionsDialogLiteSinglePressActionClass = findClass("com.android.systemui.globalactions.GlobalActionsDialogLite$SinglePressAction", lpparam.classLoader); - Class GlobalActionsDialogLiteEmergencyActionClass = findClass("com.android.systemui.globalactions.GlobalActionsDialogLite$EmergencyAction", lpparam.classLoader); - Class GlobalActionsLayoutLiteClass = findClass("com.android.systemui.globalactions.GlobalActionsLayoutLite", lpparam.classLoader); - Class QSFooterViewClass = findClass("com.android.systemui.qs.QSFooterView", lpparam.classLoader); - Class TextButtonViewHolderClass = findClass("com.android.systemui.qs.footer.ui.binder.TextButtonViewHolder", lpparam.classLoader); - Class NumberButtonViewHolderClass = findClass("com.android.systemui.qs.footer.ui.binder.NumberButtonViewHolder", lpparam.classLoader); - Class BrightnessSliderViewClass = findClass("com.android.systemui.settings.brightness.BrightnessSliderView", lpparam.classLoader); - Class ShadeCarrierClass = findClass("com.android.systemui.shade.carrier.ShadeCarrier", lpparam.classLoader); - Class QSCustomizerClass = findClass("com.android.systemui.qs.customize.QSCustomizer", lpparam.classLoader); - Class BatteryStatusChipClass = findClass("com.android.systemui.statusbar.BatteryStatusChip", lpparam.classLoader); - Class QSContainerImplClass = findClass("com.android.systemui.qs.QSContainerImpl", lpparam.classLoader); - Class ShadeHeaderControllerClass = findClassIfExists("com.android.systemui.shade.ShadeHeaderController", lpparam.classLoader); - Class FooterActionsViewBinderClass = findClass("com.android.systemui.qs.footer.ui.binder.FooterActionsViewBinder", lpparam.classLoader); + Class QSTileViewImplClass = findClass("com.android.systemui.qs.tileimpl.QSTileViewImpl", lpParam.classLoader); + Class ScrimControllerClass = findClass("com.android.systemui.statusbar.phone.ScrimController", lpParam.classLoader); + Class QSPanelControllerClass = findClass("com.android.systemui.qs.QSPanelController", lpParam.classLoader); + Class ScrimStateEnum = findClass("com.android.systemui.statusbar.phone.ScrimState", lpParam.classLoader); + Class QSIconViewImplClass = findClass("com.android.systemui.qs.tileimpl.QSIconViewImpl", lpParam.classLoader); + Class CentralSurfacesImplClass = findClass("com.android.systemui.statusbar.phone.CentralSurfacesImpl", lpParam.classLoader); + Class GlobalActionsDialogLiteSinglePressActionClass = findClass("com.android.systemui.globalactions.GlobalActionsDialogLite$SinglePressAction", lpParam.classLoader); + Class GlobalActionsDialogLiteEmergencyActionClass = findClass("com.android.systemui.globalactions.GlobalActionsDialogLite$EmergencyAction", lpParam.classLoader); + Class GlobalActionsLayoutLiteClass = findClass("com.android.systemui.globalactions.GlobalActionsLayoutLite", lpParam.classLoader); + Class QSFooterViewClass = findClass("com.android.systemui.qs.QSFooterView", lpParam.classLoader); + Class TextButtonViewHolderClass = findClass("com.android.systemui.qs.footer.ui.binder.TextButtonViewHolder", lpParam.classLoader); + Class NumberButtonViewHolderClass = findClass("com.android.systemui.qs.footer.ui.binder.NumberButtonViewHolder", lpParam.classLoader); + Class BrightnessSliderViewClass = findClass("com.android.systemui.settings.brightness.BrightnessSliderView", lpParam.classLoader); + Class ShadeCarrierClass = findClass("com.android.systemui.shade.carrier.ShadeCarrier", lpParam.classLoader); + Class QSCustomizerClass = findClass("com.android.systemui.qs.customize.QSCustomizer", lpParam.classLoader); + Class BatteryStatusChipClass = findClass("com.android.systemui.statusbar.BatteryStatusChip", lpParam.classLoader); + Class QSContainerImplClass = findClass("com.android.systemui.qs.QSContainerImpl", lpParam.classLoader); + Class ShadeHeaderControllerClass = findClassIfExists("com.android.systemui.shade.ShadeHeaderController", lpParam.classLoader); + Class FooterActionsViewBinderClass = findClass("com.android.systemui.qs.footer.ui.binder.FooterActionsViewBinder", lpParam.classLoader); try { //A14 Compose implementation of QS Footer actions -// Class FooterActionsButtonViewModelClass = findClass("com.android.systemui.qs.footer.ui.viewmodel.FooterActionsButtonViewModel", lpparam.classLoader); - Class FooterActionsViewModelClass = findClass("com.android.systemui.qs.footer.ui.viewmodel.FooterActionsViewModel", lpparam.classLoader); -// Class FooterActionsKtClass = findClass("com.android.systemui.qs.footer.ui.compose.FooterActionsKt", lpparam.classLoader); - Class ThemeColorKtClass = findClass("com.android.compose.theme.ColorKt", lpparam.classLoader); - Class ExpandableControllerImplClass = findClass("com.android.compose.animation.ExpandableControllerImpl", lpparam.classLoader); +// Class FooterActionsButtonViewModelClass = findClass("com.android.systemui.qs.footer.ui.viewmodel.FooterActionsButtonViewModel", lpParam.classLoader); + Class FooterActionsViewModelClass = findClass("com.android.systemui.qs.footer.ui.viewmodel.FooterActionsViewModel", lpParam.classLoader); +// Class FooterActionsKtClass = findClass("com.android.systemui.qs.footer.ui.compose.FooterActionsKt", lpParam.classLoader); + Class ThemeColorKtClass = findClass("com.android.compose.theme.ColorKt", lpParam.classLoader); + Class ExpandableControllerImplClass = findClass("com.android.compose.animation.ExpandableControllerImpl", lpParam.classLoader); hookAllConstructors(ExpandableControllerImplClass, new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { if(!isDark) { - Class GraphicsColorKtClass = findClass("androidx.compose.ui.graphics.ColorKt", lpparam.classLoader); + Class GraphicsColorKtClass = findClass("androidx.compose.ui.graphics.ColorKt", lpParam.classLoader); param.args[1] = callStaticMethod(GraphicsColorKtClass, "Color", BLACK); } } @@ -176,7 +176,7 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { if(result != 0) { - Class GraphicsColorKtClass = findClass("androidx.compose.ui.graphics.ColorKt", lpparam.classLoader); + Class GraphicsColorKtClass = findClass("androidx.compose.ui.graphics.ColorKt", lpParam.classLoader); param.setResult(callStaticMethod(GraphicsColorKtClass, "Color",result)); } } @@ -199,8 +199,8 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { BLACK); //we must use the classes defined in the apk. using our own will fail - Class StateFlowImplClass = findClass("kotlinx.coroutines.flow.StateFlowImpl", lpparam.classLoader); - Class ReadonlyStateFlowClass = findClass("kotlinx.coroutines.flow.ReadonlyStateFlow", lpparam.classLoader); + Class StateFlowImplClass = findClass("kotlinx.coroutines.flow.StateFlowImpl", lpParam.classLoader); + Class ReadonlyStateFlowClass = findClass("kotlinx.coroutines.flow.ReadonlyStateFlow", lpParam.classLoader); Object zeroAlphaFlow = StateFlowImplClass.getConstructor(Object.class).newInstance(0f); setObjectField(param.thisObject, "backgroundAlpha", ReadonlyStateFlowClass.getConstructors()[0].newInstance(zeroAlphaFlow)); @@ -209,8 +209,8 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { } catch (Throwable ignored){} try { //A14 ap11 onwards - modern implementation of mobile icons - Class ShadeCarrierGroupControllerClass = findClass("com.android.systemui.shade.carrier.ShadeCarrierGroupController", lpparam.classLoader); - Class MobileIconBinderClass = findClass("com.android.systemui.statusbar.pipeline.mobile.ui.binder.MobileIconBinder", lpparam.classLoader); + Class ShadeCarrierGroupControllerClass = findClass("com.android.systemui.shade.carrier.ShadeCarrierGroupController", lpParam.classLoader); + Class MobileIconBinderClass = findClass("com.android.systemui.statusbar.pipeline.mobile.ui.binder.MobileIconBinder", lpParam.classLoader); hookAllConstructors(ShadeCarrierGroupControllerClass, new XC_MethodHook() { @Override @@ -235,7 +235,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { if (ShadeHeaderControllerClass == null) { - ShadeHeaderControllerClass = findClass("com.android.systemui.shade.LargeScreenShadeHeaderController", lpparam.classLoader); + ShadeHeaderControllerClass = findClass("com.android.systemui.shade.LargeScreenShadeHeaderController", lpParam.classLoader); } hookAllConstructors(QSCustomizerClass, new XC_MethodHook() { //QS Customize panel diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ThermalProvider.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ThermalProvider.java index c780be5db..7ee58c927 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ThermalProvider.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ThermalProvider.java @@ -46,8 +46,8 @@ public boolean listensTo(String packageName) { } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { - Class PowerUIClass = findClass("com.android.systemui.power.PowerUI", lpparam.classLoader); + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { + Class PowerUIClass = findClass("com.android.systemui.power.PowerUI", lpParam.classLoader); hookAllMethods(PowerUIClass, "start", new XC_MethodHook() { @Override diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ThreeButtonNavMods.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ThreeButtonNavMods.java index 1adccbd71..461f1947c 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ThreeButtonNavMods.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ThreeButtonNavMods.java @@ -34,10 +34,10 @@ public void updatePrefs(String... Key) { @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) { - if (!lpparam.packageName.equals(listenPackage)) return; + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) { + if (!lpParam.packageName.equals(listenPackage)) return; - Class NavigationBarInflaterViewClass = findClass("com.android.systemui.navigationbar.NavigationBarInflaterView", lpparam.classLoader); + Class NavigationBarInflaterViewClass = findClass("com.android.systemui.navigationbar.NavigationBarInflaterView", lpParam.classLoader); hookAllMethods(NavigationBarInflaterViewClass, "inflateLayout", new XC_MethodHook() { @Override diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/UDFPSManager.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/UDFPSManager.java index ebbb0244d..28c229c6e 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/UDFPSManager.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/UDFPSManager.java @@ -44,14 +44,14 @@ public boolean listensTo(String packageName) { } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) { - if (!lpparam.packageName.equals(listenPackage)) return; + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) { + if (!lpParam.packageName.equals(listenPackage)) return; - Class UdfpsKeyguardViewClass = findClassIfExists("com.android.systemui.biometrics.UdfpsKeyguardViewLegacy", lpparam.classLoader); //A4B3 + Class UdfpsKeyguardViewClass = findClassIfExists("com.android.systemui.biometrics.UdfpsKeyguardViewLegacy", lpParam.classLoader); //A4B3 if (UdfpsKeyguardViewClass == null) { //A13 - UdfpsKeyguardViewClass = findClassIfExists("com.android.systemui.biometrics.UdfpsKeyguardView", lpparam.classLoader); + UdfpsKeyguardViewClass = findClassIfExists("com.android.systemui.biometrics.UdfpsKeyguardView", lpParam.classLoader); } - Class LockIconViewControllerClass = findClass("com.android.keyguard.LockIconViewController", lpparam.classLoader); + Class LockIconViewControllerClass = findClass("com.android.keyguard.LockIconViewController", lpParam.classLoader); hookAllMethods(LockIconViewControllerClass, "updateIsUdfpsEnrolled", new XC_MethodHook() { @Override diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/VolumeDialog.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/VolumeDialog.java index b20a70071..3691ea20d 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/VolumeDialog.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/VolumeDialog.java @@ -34,8 +34,8 @@ public void updatePrefs(String... Key) { } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { - Class VolumeDialogImplClass = findClass("com.android.systemui.volume.VolumeDialogImpl", lpparam.classLoader); + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { + Class VolumeDialogImplClass = findClass("com.android.systemui.volume.VolumeDialogImpl", lpParam.classLoader); hookAllMethods(VolumeDialogImplClass, "rescheduleTimeoutH", new XC_MethodHook() { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/VolumeTile.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/VolumeTile.java index ff523f477..ceee6907b 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/VolumeTile.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/VolumeTile.java @@ -72,8 +72,8 @@ public boolean listensTo(String packageName) { } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { - if (!lpparam.packageName.equals(listenPackage) || AudioManager() == null) return; + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { + if (!lpParam.packageName.equals(listenPackage) || AudioManager() == null) return; new Thread(() -> { minVol = AudioManager().getStreamMinVolume(STREAM_MUSIC); @@ -83,9 +83,9 @@ public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Th mVolumePercentageDrawable = new TilePercentageDrawable(mContext); mVolumePercentageDrawable.setAlpha(64); - Class QSTileViewImplClass = findClass("com.android.systemui.qs.tileimpl.QSTileViewImpl", lpparam.classLoader); - Class QSPanelControllerBaseClass = findClass("com.android.systemui.qs.QSPanelControllerBase", lpparam.classLoader); - Class QSTileImplClass = findClass("com.android.systemui.qs.tileimpl.QSTileImpl", lpparam.classLoader); + Class QSTileViewImplClass = findClass("com.android.systemui.qs.tileimpl.QSTileViewImpl", lpParam.classLoader); + Class QSPanelControllerBaseClass = findClass("com.android.systemui.qs.QSPanelControllerBase", lpParam.classLoader); + Class QSTileImplClass = findClass("com.android.systemui.qs.tileimpl.QSTileImpl", lpParam.classLoader); hookAllMethods(QSTileImplClass, "removeCallback", new XC_MethodHook() { //removing dead tiles from callbacks @Override diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/telecom/CallVibrator.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/telecom/CallVibrator.java index 72425efb9..b9ceb04f3 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/telecom/CallVibrator.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/telecom/CallVibrator.java @@ -43,9 +43,9 @@ public boolean listensTo(String packageName) { } @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { try { - Class InCallControllerClass = findClass("com.android.server.telecom.InCallController", lpparam.classLoader); + Class InCallControllerClass = findClass("com.android.server.telecom.InCallController", lpParam.classLoader); hookAllMethods(InCallControllerClass, "onCallStateChanged", new XC_MethodHook() { @Override diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/AlphaRefreshedPaint.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/AlphaConsistantPaint.java similarity index 79% rename from app/src/main/java/sh/siava/pixelxpert/modpacks/utils/AlphaRefreshedPaint.java rename to app/src/main/java/sh/siava/pixelxpert/modpacks/utils/AlphaConsistantPaint.java index 36b02fc4b..083151a4e 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/AlphaRefreshedPaint.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/AlphaConsistantPaint.java @@ -4,8 +4,8 @@ /** When setting a paint's color, alpha gets reset... naturally. So this is kind of paint that remembers its alpha and keeps it intact */ -public class AlphaRefreshedPaint extends Paint { - public AlphaRefreshedPaint(int flag) { +public class AlphaConsistantPaint extends Paint { + public AlphaConsistantPaint(int flag) { super(flag); } diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/batteryStyles/CircleBatteryDrawable.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/batteryStyles/CircleBatteryDrawable.java index a3bccf114..9a80d85f0 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/batteryStyles/CircleBatteryDrawable.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/batteryStyles/CircleBatteryDrawable.java @@ -35,7 +35,7 @@ import androidx.interpolator.view.animation.FastOutSlowInInterpolator; import sh.siava.pixelxpert.modpacks.systemui.SettingsLibUtilsProvider; -import sh.siava.pixelxpert.modpacks.utils.AlphaRefreshedPaint; +import sh.siava.pixelxpert.modpacks.utils.AlphaConsistantPaint; public class CircleBatteryDrawable extends BatteryDrawable { @@ -52,11 +52,11 @@ public class CircleBatteryDrawable extends BatteryDrawable private int mDiameter; private final RectF mFrame = new RectF(); private int mFGColor = WHITE; - private final Paint mTextPaint = new AlphaRefreshedPaint(ANTI_ALIAS_FLAG); - private final Paint mFramePaint = new AlphaRefreshedPaint(ANTI_ALIAS_FLAG); - private final Paint mBatteryPaint = new AlphaRefreshedPaint(ANTI_ALIAS_FLAG); - private final Paint mWarningTextPaint = new AlphaRefreshedPaint(ANTI_ALIAS_FLAG); - private final Paint mBoltPaint = new AlphaRefreshedPaint(ANTI_ALIAS_FLAG); + private final Paint mTextPaint = new AlphaConsistantPaint(ANTI_ALIAS_FLAG); + private final Paint mFramePaint = new AlphaConsistantPaint(ANTI_ALIAS_FLAG); + private final Paint mBatteryPaint = new AlphaConsistantPaint(ANTI_ALIAS_FLAG); + private final Paint mWarningTextPaint = new AlphaConsistantPaint(ANTI_ALIAS_FLAG); + private final Paint mBoltPaint = new AlphaConsistantPaint(ANTI_ALIAS_FLAG); private final ValueAnimator mBoltAlphaAnimator; private int[] mShadeColors; private float[] mShadeLevels; From 9c515fcfd533a029f9e440bea00f85e96d737d14 Mon Sep 17 00:00:00 2001 From: Siavash Date: Thu, 25 Apr 2024 16:11:35 +0330 Subject: [PATCH 078/162] dependency bump --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 49ade4bb4..daf541be3 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -91,9 +91,9 @@ dependencies { implementation 'androidx.preference:preference-ktx:1.2.1' implementation 'androidx.recyclerview:recyclerview:1.3.2' implementation 'com.google.android.material:material:1.12.0-rc01' - implementation 'androidx.compose.ui:ui-geometry:1.6.5' + implementation 'androidx.compose.ui:ui-geometry:1.6.6' //noinspection KtxExtensionAvailable - implementation 'androidx.activity:activity:1.8.2' + implementation 'androidx.activity:activity:1.9.0' implementation 'androidx.work:work-runtime:2.9.0' implementation "androidx.concurrent:concurrent-futures:1.1.0" From 3f1f0a5d04378071cbeec890bda69b8674d64cb0 Mon Sep 17 00:00:00 2001 From: Siavash Date: Thu, 25 Apr 2024 18:05:39 +0330 Subject: [PATCH 079/162] CHANGELOG: Depth wallpaper improvements --- .github/edit2MakeNewCanary | 2 +- .../modpacks/systemui/DepthWallpaper.java | 22 +++++++++++++++++-- .../utils/toolkit/ReflectionTools.java | 17 ++++++++------ 3 files changed, 31 insertions(+), 10 deletions(-) diff --git a/.github/edit2MakeNewCanary b/.github/edit2MakeNewCanary index 65aeddb0b..04ad0604c 100644 --- a/.github/edit2MakeNewCanary +++ b/.github/edit2MakeNewCanary @@ -1 +1 @@ -Editing this file will trigger the build script for a new canary. \ No newline at end of file +Editing this file will trigger the build script for a new canary.. \ No newline at end of file diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java index d8ed5c01d..bead82a72 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java @@ -68,6 +68,23 @@ public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Th Class CanvasEngineClass = findClass("com.android.systemui.wallpapers.ImageWallpaper$CanvasEngine", lpParam.classLoader); Class CentralSurfacesImplClass = findClass("com.android.systemui.statusbar.phone.CentralSurfacesImpl", lpParam.classLoader); Class ScrimControllerClass = findClass("com.android.systemui.statusbar.phone.ScrimController", lpParam.classLoader); + Class ScrimViewClass = findClass("com.android.systemui.scrim.ScrimView", lpParam.classLoader); + + hookAllMethods(ScrimViewClass, "setViewAlpha", new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + if(mLayersCreated && getObjectField(param.thisObject, "mScrimName").equals("notifications_scrim")) + { + float notificationAlpha = (float)param.args[0]; + + if(notificationAlpha < .25f) + notificationAlpha = 0; + + float subjectAlpha = 1f - notificationAlpha; + mLockScreenSubject.post(() -> mLockScreenSubject.setAlpha(subjectAlpha)); + } + } + }); hookAllMethods(CentralSurfacesImplClass, "start", new XC_MethodHook() { @Override @@ -80,7 +97,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { @SuppressLint("DiscouragedApi") ViewGroup targetView = rootView.findViewById(mContext.getResources().getIdentifier("notification_container_parent", "id", mContext.getPackageName())); - if(mWallpaperBackground == null) { + if(!mLayersCreated) { createLayers(); } @@ -148,7 +165,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { scaledWallpaperBitmap = Bitmap.createBitmap(scaledWallpaperBitmap, xPixelShift, yPixelShift, displayBounds.width(), displayBounds.height()); Bitmap finalScaledWallpaperBitmap = scaledWallpaperBitmap; - if(mWallpaperBackground == null) { + if(!mLayersCreated) { createLayers(); } @@ -168,6 +185,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { mScrimController = param.thisObject; } }); + hookAllMethods(ScrimControllerClass, "applyAndDispatchState", new XC_MethodHook() { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/toolkit/ReflectionTools.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/toolkit/ReflectionTools.java index 852009e4f..488468840 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/toolkit/ReflectionTools.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/toolkit/ReflectionTools.java @@ -220,16 +220,19 @@ private static void dumpIDs(View v, int level) } private static void dumpID(View v, int level) { + String name = "**"; + StringBuilder str = new StringBuilder(); + for(int i = 0; i < level; i++) + { + str.append("\t"); + } + try { - StringBuilder str = new StringBuilder(); - for(int i = 0; i < level; i++) - { - str.append("\t"); - } - String name = v.getContext().getResources().getResourceName(v.getId()); - log(str+ "id " + name + " type " + v.getClass().getName()); + name = v.getContext().getResources().getResourceName(v.getId()); } catch (Throwable ignored){} + + log(str+ "id " + name + " type " + v.getClass().getName()); } } From 304b3070e1d4b60354a26dc6f6089347c2823dd0 Mon Sep 17 00:00:00 2001 From: GitHub Date: Thu, 25 Apr 2024 14:38:28 +0000 Subject: [PATCH 080/162] Version update: Release --- CanaryChangelog.md | 4 ++++ MagiskModBase/module.prop | 4 ++-- MagiskModuleUpdate_Full.json | 4 ++-- MagiskModuleUpdate_Xposed.json | 4 ++-- app/build.gradle | 4 ++-- latestCanary.json | 4 ++-- 6 files changed, 14 insertions(+), 10 deletions(-) diff --git a/CanaryChangelog.md b/CanaryChangelog.md index 6e27fdd26..8cf080bb6 100644 --- a/CanaryChangelog.md +++ b/CanaryChangelog.md @@ -1,3 +1,7 @@ +**canary-353** +- Depth wallpaper improvements +- Added option to fix wifi hotspot in certain conditions + **canary-352** - Depth wallpaper bug fixes diff --git a/MagiskModBase/module.prop b/MagiskModBase/module.prop index 3c3834296..6ba0d17ed 100644 --- a/MagiskModBase/module.prop +++ b/MagiskModBase/module.prop @@ -1,7 +1,7 @@ id=PixelXpert name=Pixel Xpert -version=canary-352 -versionCode=352 +version=canary-353 +versionCode=353 author=Pixel Xpert Team description=Xposed based module for customizations on Pixel roms. Android 13+ updateJson=https://raw.githubusercontent.com/siavash79/PixelXpert/canary/MagiskModuleUpdate_Xposed.json diff --git a/MagiskModuleUpdate_Full.json b/MagiskModuleUpdate_Full.json index b7b50444e..7933a0b95 100644 --- a/MagiskModuleUpdate_Full.json +++ b/MagiskModuleUpdate_Full.json @@ -1,6 +1,6 @@ { - "version": "canary-352", - "versionCode": 352, + "version": "canary-353", + "versionCode": 353, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/MagiskModuleUpdate_Xposed.json b/MagiskModuleUpdate_Xposed.json index b7b50444e..7933a0b95 100644 --- a/MagiskModuleUpdate_Xposed.json +++ b/MagiskModuleUpdate_Xposed.json @@ -1,6 +1,6 @@ { - "version": "canary-352", - "versionCode": 352, + "version": "canary-353", + "versionCode": 353, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index daf541be3..458392899 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "sh.siava.pixelxpert" minSdk 33 targetSdk 34 - versionCode 352 - versionName "canary-352" + versionCode 353 + versionName "canary-353" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/latestCanary.json b/latestCanary.json index 578664a9c..e71c5229a 100644 --- a/latestCanary.json +++ b/latestCanary.json @@ -1,6 +1,6 @@ { - "version": "canary-352", - "versionCode": 352, + "version": "canary-353", + "versionCode": 353, "zipUrl_Xposed": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "zipUrl_Full": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" From 45f36370777b95c3d9f2fe2e8be63ae63c6e48db Mon Sep 17 00:00:00 2001 From: Siavash Date: Thu, 25 Apr 2024 21:41:53 +0330 Subject: [PATCH 081/162] depth wallpaper: smoother transition to subject transparency --- .../siava/pixelxpert/modpacks/systemui/DepthWallpaper.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java index bead82a72..2b5072128 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java @@ -81,7 +81,12 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { notificationAlpha = 0; float subjectAlpha = 1f - notificationAlpha; - mLockScreenSubject.post(() -> mLockScreenSubject.setAlpha(subjectAlpha)); + if(subjectAlpha < .75f) + { + subjectAlpha /= .75f; + } + final float finalAlpha = subjectAlpha; + mLockScreenSubject.post(() -> mLockScreenSubject.setAlpha(finalAlpha)); } } }); From c2f4ee45e0a38d241ab2b19b420310a0981618ce Mon Sep 17 00:00:00 2001 From: Siavash Date: Fri, 26 Apr 2024 08:11:58 +0330 Subject: [PATCH 082/162] CHANGELOG: Added option to enable wallpaper depth effect on AOD --- .github/edit2MakeNewCanary | 2 +- .../modpacks/systemui/DepthWallpaper.java | 60 ++++++++++++------- .../pixelxpert/utils/PreferenceHelper.java | 1 + app/src/main/res/values/strings.xml | 1 + app/src/main/res/xml/lock_screen_prefs.xml | 9 +++ 5 files changed, 49 insertions(+), 24 deletions(-) diff --git a/.github/edit2MakeNewCanary b/.github/edit2MakeNewCanary index 04ad0604c..65aeddb0b 100644 --- a/.github/edit2MakeNewCanary +++ b/.github/edit2MakeNewCanary @@ -1 +1 @@ -Editing this file will trigger the build script for a new canary.. \ No newline at end of file +Editing this file will trigger the build script for a new canary. \ No newline at end of file diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java index 2b5072128..c2ae5f65d 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java @@ -41,10 +41,11 @@ public class DepthWallpaper extends XposedModPack { private static final String listenPackage = Constants.SYSTEM_UI_PACKAGE; private static boolean lockScreenSubjectCacheValid = false; - private Object mQS; private Object mScrimController; private static boolean DWallpaperEnabled = false; private static int DWOpacity = 192; + + private static boolean DWonAOD = false; private FrameLayout mLockScreenSubject; private Drawable mSubjectDimmingOverlay; private FrameLayout mWallpaperBackground; @@ -60,6 +61,7 @@ public DepthWallpaper(Context context) { public void updatePrefs(String... Key) { DWallpaperEnabled = Xprefs.getBoolean("DWallpaperEnabled", false); DWOpacity = Xprefs.getSliderInt("DWOpacity", 192); + DWonAOD = Xprefs.getBoolean("DWonAOD", false); } @Override @@ -73,7 +75,13 @@ public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Th hookAllMethods(ScrimViewClass, "setViewAlpha", new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - if(mLayersCreated && getObjectField(param.thisObject, "mScrimName").equals("notifications_scrim")) + if(!mLayersCreated) return; + + if(DWonAOD + && !getObjectField(mScrimController, "mState").toString().equals("KEYGUARD")) { + mLockScreenSubject.post(() -> mLockScreenSubject.setAlpha(DWOpacity)); + } + else if(mLayersCreated && getObjectField(param.thisObject, "mScrimName").equals("notifications_scrim")) { float notificationAlpha = (float)param.args[0]; @@ -85,7 +93,8 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { { subjectAlpha /= .75f; } - final float finalAlpha = subjectAlpha; + final float finalAlpha = subjectAlpha * getFloatField(mScrimController, "mBehindAlpha"); + mLockScreenSubject.post(() -> mLockScreenSubject.setAlpha(finalAlpha)); } } @@ -111,12 +120,6 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { targetView.addView(mLockScreenSubject,1); } }); - hookAllConstructors(QSImplClass, new XC_MethodHook() { - @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { - mQS = param.thisObject; - } - }); hookAllMethods(CanvasEngineClass, "onSurfaceDestroyed", new XC_MethodHook() { //lockscreen wallpaper changed @Override @@ -278,11 +281,18 @@ private boolean isLockScreenWallpaper(Object canvasEngine) private void setDepthWallpaper() { String state = getObjectField(mScrimController, "mState").toString(); - - if(DWallpaperEnabled - && state.equals("KEYGUARD") - && (boolean) callMethod(mQS, "isFullyCollapsed")) { - + boolean showSubject = DWallpaperEnabled + && + ( + state.equals("KEYGUARD") + || + (DWonAOD + && + (state.equals("AOD") || state.equals("PULSING")) + ) + ); + + if(showSubject) { if(!lockScreenSubjectCacheValid && new File(Constants.getLockScreenSubjectCachePath(mContext)).exists()) { try (FileInputStream inputStream = new FileInputStream(Constants.getLockScreenSubjectCachePath(mContext))) @@ -302,21 +312,25 @@ private void setDepthWallpaper() if(lockScreenSubjectCacheValid) { mLockScreenSubject.getBackground().setAlpha(DWOpacity); - //this is the dimmed wallpaper coverage - mSubjectDimmingOverlay.setAlpha(Math.round(getFloatField(mScrimController, "mScrimBehindAlphaKeyguard")*240)); //A tad bit lower than max. show it a bit lighter than other stuff - mWallpaperDimmingOverlay.setAlpha(getFloatField(mScrimController, "mScrimBehindAlphaKeyguard")); + if(!state.equals("KEYGUARD")) { + mSubjectDimmingOverlay.setAlpha(192 /*Math.round(192 * (DWOpacity / 255f))*/); + } + else { + //this is the dimmed wallpaper coverage + mSubjectDimmingOverlay.setAlpha(Math.round(getFloatField(mScrimController, "mScrimBehindAlphaKeyguard") * 240)); //A tad bit lower than max. show it a bit lighter than other stuff + mWallpaperDimmingOverlay.setAlpha(getFloatField(mScrimController, "mScrimBehindAlphaKeyguard")); + } mWallpaperBackground.setVisibility(VISIBLE); mLockScreenSubject.setVisibility(VISIBLE); } } - else + else if(mLayersCreated) { - if(mLayersCreated) { - if (state.equals("UNLOCKED")) { - mWallpaperBackground.setVisibility(GONE); - } - mLockScreenSubject.setVisibility(GONE); + mLockScreenSubject.setVisibility(GONE); + + if (state.equals("UNLOCKED")) { + mWallpaperBackground.setVisibility(GONE); } } } diff --git a/app/src/main/java/sh/siava/pixelxpert/utils/PreferenceHelper.java b/app/src/main/java/sh/siava/pixelxpert/utils/PreferenceHelper.java index 04054ddbb..c14102fb5 100644 --- a/app/src/main/java/sh/siava/pixelxpert/utils/PreferenceHelper.java +++ b/app/src/main/java/sh/siava/pixelxpert/utils/PreferenceHelper.java @@ -292,6 +292,7 @@ public static boolean isVisible(String key) { return instance.mPreferences.getBoolean("AutoUpdate", true); case "DWOpacity": + case "DWonAOD": return instance.mPreferences.getBoolean("DWallpaperEnabled", false); } return true; diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 357bf0d2c..1252b38b6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -62,6 +62,7 @@ Depth effect wallpaper Dynamically integrate wallpaper\'s foreground with the clock Wallpaper foreground opacity + Also on \"always on display\" AI model is downloaded on the device AI model isn\'t available on the device (yet) Disable the unlock hint animation diff --git a/app/src/main/res/xml/lock_screen_prefs.xml b/app/src/main/res/xml/lock_screen_prefs.xml index eb411b004..ff444e775 100644 --- a/app/src/main/res/xml/lock_screen_prefs.xml +++ b/app/src/main/res/xml/lock_screen_prefs.xml @@ -27,6 +27,7 @@ + + Date: Fri, 26 Apr 2024 04:45:56 +0000 Subject: [PATCH 083/162] Version update: Release --- CanaryChangelog.md | 3 +++ MagiskModBase/module.prop | 4 ++-- MagiskModuleUpdate_Full.json | 4 ++-- MagiskModuleUpdate_Xposed.json | 4 ++-- app/build.gradle | 4 ++-- latestCanary.json | 4 ++-- 6 files changed, 13 insertions(+), 10 deletions(-) diff --git a/CanaryChangelog.md b/CanaryChangelog.md index 8cf080bb6..7931db583 100644 --- a/CanaryChangelog.md +++ b/CanaryChangelog.md @@ -1,3 +1,6 @@ +**canary-354** +- Added option to enable wallpaper depth effect on AOD + **canary-353** - Depth wallpaper improvements - Added option to fix wifi hotspot in certain conditions diff --git a/MagiskModBase/module.prop b/MagiskModBase/module.prop index 6ba0d17ed..d742795cc 100644 --- a/MagiskModBase/module.prop +++ b/MagiskModBase/module.prop @@ -1,7 +1,7 @@ id=PixelXpert name=Pixel Xpert -version=canary-353 -versionCode=353 +version=canary-354 +versionCode=354 author=Pixel Xpert Team description=Xposed based module for customizations on Pixel roms. Android 13+ updateJson=https://raw.githubusercontent.com/siavash79/PixelXpert/canary/MagiskModuleUpdate_Xposed.json diff --git a/MagiskModuleUpdate_Full.json b/MagiskModuleUpdate_Full.json index 7933a0b95..15a912972 100644 --- a/MagiskModuleUpdate_Full.json +++ b/MagiskModuleUpdate_Full.json @@ -1,6 +1,6 @@ { - "version": "canary-353", - "versionCode": 353, + "version": "canary-354", + "versionCode": 354, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/MagiskModuleUpdate_Xposed.json b/MagiskModuleUpdate_Xposed.json index 7933a0b95..15a912972 100644 --- a/MagiskModuleUpdate_Xposed.json +++ b/MagiskModuleUpdate_Xposed.json @@ -1,6 +1,6 @@ { - "version": "canary-353", - "versionCode": 353, + "version": "canary-354", + "versionCode": 354, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 458392899..91f94b48f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "sh.siava.pixelxpert" minSdk 33 targetSdk 34 - versionCode 353 - versionName "canary-353" + versionCode 354 + versionName "canary-354" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/latestCanary.json b/latestCanary.json index e71c5229a..bf01a1e65 100644 --- a/latestCanary.json +++ b/latestCanary.json @@ -1,6 +1,6 @@ { - "version": "canary-353", - "versionCode": 353, + "version": "canary-354", + "versionCode": 354, "zipUrl_Xposed": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "zipUrl_Full": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" From 34ed636f306a0a4f6fcb96e2f8dbb30a9293d418 Mon Sep 17 00:00:00 2001 From: Crowdin Bot Date: Sun, 28 Apr 2024 00:48:29 +0000 Subject: [PATCH 084/162] New Crowdin translations by GitHub Action --- app/src/main/res/values-af-rZA/strings.xml | 5 ++++ app/src/main/res/values-ar-rSA/strings.xml | 9 +++++-- app/src/main/res/values-cs-rCZ/strings.xml | 5 ++++ app/src/main/res/values-da-rDK/strings.xml | 5 ++++ app/src/main/res/values-de-rDE/strings.xml | 29 +++++++++++--------- app/src/main/res/values-el-rGR/strings.xml | 5 ++++ app/src/main/res/values-es-rES/strings.xml | 7 ++++- app/src/main/res/values-fa-rIR/strings.xml | 5 ++++ app/src/main/res/values-fi-rFI/strings.xml | 5 ++++ app/src/main/res/values-fr-rFR/strings.xml | 25 ++++++++++------- app/src/main/res/values-hi-rIN/strings.xml | 5 ++++ app/src/main/res/values-hu-rHU/strings.xml | 5 ++++ app/src/main/res/values-it-rIT/strings.xml | 5 ++++ app/src/main/res/values-iw-rIL/strings.xml | 5 ++++ app/src/main/res/values-ja-rJP/strings.xml | 9 +++++-- app/src/main/res/values-ko-rKR/strings.xml | 5 ++++ app/src/main/res/values-nl-rNL/strings.xml | 5 ++++ app/src/main/res/values-no-rNO/strings.xml | 5 ++++ app/src/main/res/values-pl-rPL/strings.xml | 5 ++++ app/src/main/res/values-pt-rPT/strings.xml | 25 ++++++++++------- app/src/main/res/values-ro-rRO/strings.xml | 5 ++++ app/src/main/res/values-ru-rRU/strings.xml | 5 ++++ app/src/main/res/values-sr-rSP/strings.xml | 5 ++++ app/src/main/res/values-sv-rSE/strings.xml | 5 ++++ app/src/main/res/values-tr-rTR/strings.xml | 5 ++++ app/src/main/res/values-uk-rUA/strings.xml | 5 ++++ app/src/main/res/values-vi-rVN/strings.xml | 23 +++++++++------- app/src/main/res/values-zh-rCN/strings.xml | 31 +++++++++++++--------- app/src/main/res/values-zh-rTW/strings.xml | 5 ++++ 29 files changed, 204 insertions(+), 59 deletions(-) diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml index 1c1433803..3f9778f59 100644 --- a/app/src/main/res/values-af-rZA/strings.xml +++ b/app/src/main/res/values-af-rZA/strings.xml @@ -50,10 +50,15 @@ Versteek SSID Onaktiwiteit uitteltyd Maksimum kliënte + Hotspot connectivity issues workaround + Allow non-\"pre-approved\" clients to connect seamlessly Depth effect wallpaper Dynamically integrate wallpaper\'s foreground with the clock Wallpaper foreground opacity + Also on \"always on display\" + AI model is downloaded on the device + AI model isn\'t available on the device (yet) Deaktiveer die ontsluitwenk-animasie Sluit skerm opsies Verwyder gebruikeravatar (multigebruikermodus) diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index 3755f0961..f89785ec9 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -31,9 +31,9 @@ التحقق من التحديثات عبر الواي فاي فقط التحقق من وجود تحديثات في الخلفية فقط عند الاتصال بشبكة Wi-Fi GitHub repository - مجموعة تيليجرام + مجموعة Telegram الاستخدام - فتح صفحة ويكي + فتح صفحة wiki ترجم إلى لغتك ساعدنا في تَرْجَمَة خبير بيكسل إلي لغتك الخاصة @@ -50,10 +50,15 @@ إخفاء SSID مهلة عدم النشاط الحد الأقصى للعملاء + Hotspot connectivity issues workaround + Allow non-\"pre-approved\" clients to connect seamlessly Depth effect wallpaper Dynamically integrate wallpaper\'s foreground with the clock Wallpaper foreground opacity + Also on \"always on display\" + AI model is downloaded on the device + AI model isn\'t available on the device (yet) تعطيل حركة تلميح فتح القفل خيارات قفل الشاشة إزالة الصورة الرمزية للمستخدم (وضع المستخدم المتعدد) diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index b7a134e5c..ee5493a7b 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -50,10 +50,15 @@ Skrýt SSID Časový limit nečinnosti vypršel Maximum klientů + Hotspot connectivity issues workaround + Allow non-\"pre-approved\" clients to connect seamlessly Depth effect wallpaper Dynamically integrate wallpaper\'s foreground with the clock Wallpaper foreground opacity + Also on \"always on display\" + AI model is downloaded on the device + AI model isn\'t available on the device (yet) Zakázat animaci nápovědy pro odemknutí Možnosti uzamčení obrazovky Odebrat avatara uživatele (režim pro více uživatelů) diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml index 578029681..f9e1ab02b 100644 --- a/app/src/main/res/values-da-rDK/strings.xml +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -50,10 +50,15 @@ Skjul SSID Timeout for inaktivitet Maksimalt antal kunder + Hotspot connectivity issues workaround + Allow non-\"pre-approved\" clients to connect seamlessly Depth effect wallpaper Dynamically integrate wallpaper\'s foreground with the clock Wallpaper foreground opacity + Also on \"always on display\" + AI model is downloaded on the device + AI model isn\'t available on the device (yet) Deaktiver oplåsningshint-animationen Indstillinger for låseskærm Fjern brugeravatar (multibrugertilstand) diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index 8fbf27e7b..1cc1cc82e 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -3,7 +3,7 @@ Alternative AOSP Mods-Symbole aktivieren Anpassungen für Google Pixel-Geräte - Medienvolumen + Medienlautstärke App-Profil wechseln Verstecken (Standard) % von der Standard Größe @@ -11,27 +11,27 @@ Allgemeine Optionen Ein Aus - Benötigt einen SystemUI Neustart zum aktivieren - Benötigt einen Neustart zum aktivieren + Benötigt einen SystemUI Neustart zum Aktivieren + Benötigt einen Neustart zum Aktivieren mehr Fläche weniger Fläche Aktuelle Version: %s - Aktualisierung + Updates Dieser Kanal zeigt Benachrichtigungen über die neuesten Updates. Update verfügbar Eine neue Version von PixelXpert ist verfügbar Browser nicht gefunden Allgemein - Aktualisieren + Update Sonstiges - Um + Über Auf Updates prüfen - Automatisch nach Aktualisierungen suchen + Automatisch auf Updates prüfen Suchen Sie ab und zu nach neuen Versionen - Überprüfen Sie Updates nur über WLAN + Updates nur über WLAN suchen Suchen Sie nur dann im Hintergrund nach Updates, wenn eine WLAN-Verbindung besteht GitHub-Repository - Telegrammgruppe + Telegram-Gruppe Verwendung Wiki-Seite öffnen In Deine Sprache übersetzen @@ -43,17 +43,22 @@ Telefon Verschiedenes Schnelleinstellungen - Theme Einstellungen - Anwendungpaketmanager - Tragbarer Hotspot + Themen-Einstellungen + Paketmanager + Mobiler Hotspot SSID verstecken Zeitüberschreitung bei Inaktivität Maximale Anzahl von Clients + Hotspot connectivity issues workaround + Allow non-\"pre-approved\" clients to connect seamlessly Depth effect wallpaper Dynamically integrate wallpaper\'s foreground with the clock Wallpaper foreground opacity + Also on \"always on display\" + AI model is downloaded on the device + AI model isn\'t available on the device (yet) Animation des Entsperrungshinweises deaktivieren Sperrbildschirm-Optionen Benutzer-Avatar entfernen (Mehrbenutzermodus) diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index fd621604a..5ae2bf7d3 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -50,10 +50,15 @@ Απόκρυψη SSID Χρονικό όριο αδράνειας Μέγιστος αριθμός πελατών + Hotspot connectivity issues workaround + Allow non-\"pre-approved\" clients to connect seamlessly Depth effect wallpaper Dynamically integrate wallpaper\'s foreground with the clock Wallpaper foreground opacity + Also on \"always on display\" + AI model is downloaded on the device + AI model isn\'t available on the device (yet) Απενεργοποιήστε το κινούμενο σχέδιο υποδείξεων ξεκλειδώματος Επιλογές κλειδώματος οθόνης Κατάργηση avatar χρήστη (λειτουργία πολλαπλών χρηστών) diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index bcb951ca1..ff7238f50 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -50,10 +50,15 @@ Ocultar SSID Tiempo de inactividad Clientes máximos + Problemas de conectividad de punto de acceso + Permitir que los clientes no \"pre-aprobados\" se conecten sin problemas Fondo de pantalla de efecto profundo Integrar dinámicamente el fondo de pantalla con el reloj Opacidad del fondo de pantalla + También en \"siempre en pantalla\" + El modelo de IA se ha descargado en el dispositivo + El modelo de IA no está disponible en el dispositivo (todavía) Deshabilitar la animación de pantalla de desbloqueo Opciones de pantalla de bloqueo Eliminar avatar de usuario (modo multiusuario) @@ -176,7 +181,7 @@ Color de carga rápida Color de ahorro de energía Sombrear colores en transito de cambio - Colored battery percentage while charging + Hoy Semana actual Mes actual diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml index fd12b2910..5f40e3a53 100644 --- a/app/src/main/res/values-fa-rIR/strings.xml +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -50,10 +50,15 @@ نام مخفی باشد مدت زمان غیر فعال بود حداکثر تعداد کاربران + Hotspot connectivity issues workaround + Allow non-\"pre-approved\" clients to connect seamlessly Depth effect wallpaper Dynamically integrate wallpaper\'s foreground with the clock Wallpaper foreground opacity + Also on \"always on display\" + AI model is downloaded on the device + AI model isn\'t available on the device (yet) حذف انیمیشن راهنمایی باز کردن قفل تنظیمات قفل صفحه حذف نمایه کاربر (حالت چند کاربره) diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index 17c69009c..998b72391 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -50,10 +50,15 @@ Piilota SSID Käyttämättömyyden aikakatkaisu Maksimi asiakkaita + Hotspot connectivity issues workaround + Allow non-\"pre-approved\" clients to connect seamlessly Depth effect wallpaper Dynamically integrate wallpaper\'s foreground with the clock Wallpaper foreground opacity + Also on \"always on display\" + AI model is downloaded on the device + AI model isn\'t available on the device (yet) Poista lukituksen avausvihje animaatio käytöstä Lukitusnäytön asetukset Poista käyttäjän avatar (monen käyttäjän tila) diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index bce88e3af..a78d39a7b 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -50,19 +50,24 @@ Masquer le SSID Délai d\'inactivité Clientèle maximale + Solution aux problèmes de connectivité du hotspot + Permettre aux clients non \"pré-approuvés\" de se connecter de manière transparente - Depth effect wallpaper - Dynamically integrate wallpaper\'s foreground with the clock - Wallpaper foreground opacity + Effet de profondeur du fond d\'écran + Intégration dynamique du fond d\'écran avec l\'horloge + Opacité du fond d\'écran + Also on \"always on display\" + Le modèle IA est téléchargé sur l\'appareil + Le modèle IA n\'est pas (encore) disponible sur l\'appareil Désactiver l\'animation des indices de déverrouillage Options de l\'écran de verrouillage Retirer l’avatar d’utilisateur (mode utilisateurs multiples) Retirer le disque autour du détecteur d’empreintes Le disque autour du détecteur d’empreintes est visible Le disque autour du détecteur d’empreintes est caché - Remove foreground icon from under-display fingerprint - Fingerprint icon is active - Fingerprint icon will be hidden + Supprimer l\'icône de premier plan de l\'empreinte digitale sous l\'écran + L\'icône d\'empreinte digitale est active + L\'icône d\'empreinte digitale sera masquée Texte personnalisé sur l’écran de verrouillage Personnaliser le texte du fournisseur réseau - haut de l’écran Texte du fournisseur inchangé @@ -167,14 +172,14 @@ Épaisseur de la barre Montrer que l’appareil charge Montrer que l’appareil est en charge rapide - Indicate power save + Indique l\'économie d\'énergie Intervalle du niveau d’alerte Mettre tout à 0 pour désactiver les couleurs par niveaux Couleur du niveau critique Couleur du niveau d’alerte Couleur de charge Couleur de charge rapide - Power Save color + Couleur d\'économie d\'énergie Nuancer les couleurs dans cet intervalle Pourcentage de batterie coloré pendant la charge Aujourd\'hui @@ -289,7 +294,7 @@ Garder l\'affichage permanent activé pendant que l\'appareil est en charge Quand l’écran est éteint… Icônes personnalisés - Add PixelXpert to settings items + Ajouter PixelXpert aux paramètres Icônes personnalisés désactivés Icônes personnalisés activés Maintenir les boutons du volume pour changer de chanson @@ -383,7 +388,7 @@ D\'ACCORD Attention - Use a suitable lockscreen wallpaper where the foreground elements do not obstruct the entire clock on your lock screen, ensuring both visual appeal and functional clarity on your lock screen.\n\nNote: %s. + Utilisez un fond d\'écran de verrouillage approprié où les éléments de premier plan n\'obstruent pas l\'intégralité de l\'horloge sur votre écran de verrouillage, garantissant à la fois l\'attrait visuel et la clarté fonctionnelle de votre écran de verrouillage.\n\nRemarque: %s. OK Un redémarrage du système est requis pour que les paramètres s\'appliquent diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index 71c6e8240..153ad3c45 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -50,10 +50,15 @@ SSID छिपाएं निष्क्रियता मध्यांतर अधिकतम ग्राहक + Hotspot connectivity issues workaround + Allow non-\"pre-approved\" clients to connect seamlessly Depth effect wallpaper Dynamically integrate wallpaper\'s foreground with the clock Wallpaper foreground opacity + Also on \"always on display\" + AI model is downloaded on the device + AI model isn\'t available on the device (yet) अनलॉक संकेत एनीमेशन अक्षम करें लॉक स्क्रीन विकल्प उपयोगकर्ता अवतार हटाएं (बहु-उपयोगकर्ता मोड) diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index b84a33097..151ae2862 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -50,10 +50,15 @@ SSID elrejtése Inaktivitási időtúllépés Maximális ügyfélszám + Hotspot connectivity issues workaround + Allow non-\"pre-approved\" clients to connect seamlessly Mélységi effektes háttérkép Dinamikusan előtérbe helyezi a háttér bizonyos részei az óra elé Háttérkép előtérbeni áttetszősége + Also on \"always on display\" + AI model is downloaded on the device + AI model isn\'t available on the device (yet) Tiltsa le a feloldó tipp animációt Lezárási képernyő beállításai Felhasználói avatar eltávolítása (többfelhasználós mód) diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index 4a01a48e6..8514aafb9 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -50,10 +50,15 @@ Nascondi SSID Timeout inattività Numero massimo client + Problemi di connettività hotspot + Consenti ai client non \"pre-approvati\" di connettersi senza problemi Sfondo effetto profondità Integra dinamicamente il primo piano dello sfondo con l\'orologio Opacità primo piano dello sfondo + Anche su \"schermo sempre attivo\" + Il modello AI è scaricato sul dispositivo + Il modello AI non è disponibile sul dispositivo (per ora) Disabilita animazione suggerimento di sblocco Opzioni schermata di blocco Rimuovi avatar utente (modalità multiutente) diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index 1de32aeed..3bb28a34e 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -50,10 +50,15 @@ הסתר SSID זמן קצוב לחוסר פעילות מקסימום לקוחות + Hotspot connectivity issues workaround + Allow non-\"pre-approved\" clients to connect seamlessly Depth effect wallpaper Dynamically integrate wallpaper\'s foreground with the clock Wallpaper foreground opacity + Also on \"always on display\" + AI model is downloaded on the device + AI model isn\'t available on the device (yet) השבת את הנפשת הרמז לביטול הנעילה אפשרויות מסך נעילה הסרת דמות משתמש (מצב ריבוי משתמשים) diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index d7cb7f730..e3b4a91c0 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -3,7 +3,7 @@ 代替テーマのアイコン Google Pixelのみカスタマイズ可能 - メディアボリューム + メディアの音量 アプリプロファイルを切り替える 隠す (既定) % 大きくする @@ -31,7 +31,7 @@ WiFi 経由でのみアップデートを確認する Wi-Fi に接続している場合にのみバックグラウンドでアップデートを確認する GitHub リポジトリ - 電報グループ + Telegram グループ 使用法 ウィキページを開く 翻訳 @@ -50,10 +50,15 @@ SSIDを隠します 非アクティブタイムアウト 最大クライアント数 + Hotspot connectivity issues workaround + Allow non-\"pre-approved\" clients to connect seamlessly Depth effect wallpaper Dynamically integrate wallpaper\'s foreground with the clock Wallpaper foreground opacity + Also on \"always on display\" + AI model is downloaded on the device + AI model isn\'t available on the device (yet) ロック解除ヒントのアニメーションを無効にする ロック画面のオプション ユーザーアバター表示を削除 (マルチユーザーモード) diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index 39087a6da..bb1cfc07e 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -50,10 +50,15 @@ SSID 숨기기 비활성 상태 시간 제한 최대 사용자 + Hotspot connectivity issues workaround + Allow non-\"pre-approved\" clients to connect seamlessly Depth effect wallpaper Dynamically integrate wallpaper\'s foreground with the clock Wallpaper foreground opacity + Also on \"always on display\" + AI model is downloaded on the device + AI model isn\'t available on the device (yet) 잠금해제 힌트 애니메이션 비활성화 잠금화면 설정 사용자 아바타 삭제 (멀티 사용자 모드) diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index b94803e4e..9688b016b 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -50,10 +50,15 @@ SSID verbergen Time-out voor inactiviteit Maximale klanten + Hotspot connectivity issues workaround + Allow non-\"pre-approved\" clients to connect seamlessly Depth effect wallpaper Dynamically integrate wallpaper\'s foreground with the clock Wallpaper foreground opacity + Also on \"always on display\" + AI model is downloaded on the device + AI model isn\'t available on the device (yet) Schakel de ontgrendelingshintanimatie uit Opties voor vergrendelscherm Gebruikersavatar verwijderen (modus voor meerdere gebruikers) diff --git a/app/src/main/res/values-no-rNO/strings.xml b/app/src/main/res/values-no-rNO/strings.xml index 015ea83cb..131b1a2ae 100644 --- a/app/src/main/res/values-no-rNO/strings.xml +++ b/app/src/main/res/values-no-rNO/strings.xml @@ -50,10 +50,15 @@ Gjem SSID Tidsavbrudd for inaktivitet Maksimalt antall kunder + Hotspot connectivity issues workaround + Allow non-\"pre-approved\" clients to connect seamlessly Depth effect wallpaper Dynamically integrate wallpaper\'s foreground with the clock Wallpaper foreground opacity + Also on \"always on display\" + AI model is downloaded on the device + AI model isn\'t available on the device (yet) Deaktiver opplåsningshintanimasjonen Alternativer for låseskjerm Fjern brukeravatar (flerbrukermodus) diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index 67f94cf1b..04dda8601 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -50,10 +50,15 @@ ukryj SSID Limit czasu bezczynności Maksymalna liczba klientów + Hotspot connectivity issues workaround + Allow non-\"pre-approved\" clients to connect seamlessly Depth effect wallpaper Dynamically integrate wallpaper\'s foreground with the clock Wallpaper foreground opacity + Also on \"always on display\" + AI model is downloaded on the device + AI model isn\'t available on the device (yet) Wyłącz animację podpowiedzi odblokowania Opcje ekranu blokady Usuń awatar użytkownika (tryb wielu użytkowników) diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 34eb1280a..3f25eb479 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -37,7 +37,7 @@ Traduza para o seu idioma Ajude-nos a traduzir %s para o seu idioma - Ecrã de bloqueio + Tela de bloqueio Barra de estado Barra de navegação Telefone & marcação @@ -50,19 +50,24 @@ Esconder SSID Tempo limite de inatividade Nr. máximo de clientes + Solução alternativa para problemas de conectividade de ponto de acesso + Permitir que clientes não \"pré-aprovados\" se conectem perfeitamente - Depth effect wallpaper - Dynamically integrate wallpaper\'s foreground with the clock - Wallpaper foreground opacity + Papel de parede com efeito de profundidade + Integre dinamicamente o primeiro plano do papel de parede com o relógio + Opacidade do primeiro plano do papel de parede + Also on \"always on display\" + O modelo AI é baixado no dispositivo + O modelo AI não está disponível no dispositivo (ainda) Desativar animação da dica de desbloqueio Opções do ecrã de bloqueio Remover avatar do utilizador (modo multi-utilizador) Esconder círculo no ícone da impressão digital O círculo está ativado O círculo será escondido - Remove foreground icon from under-display fingerprint - Fingerprint icon is active - Fingerprint icon will be hidden + Remova o ícone de impressão digital sob exibição + O ícone de impressão digital está ativo + O ícone de impressão digital ficará oculto Texto personalizado no ecrã de bloqueio Personalizar texto da operadora Texto inalterado @@ -289,7 +294,7 @@ Manter o ecrã ligado enquanto o dispositivo carrega Enquanto o ecrã está desligado… Ícones temáticos personalizados - Add PixelXpert to settings items + Adicione PixelXpert aos itens de configuração Ícones personalizados inativos Ícones personalizados ativos Manter premido para mudar de faixa @@ -382,8 +387,8 @@ A app irá encerrar. Toque no novo ícone para voltar a abrir OK - Attention - Use a suitable lockscreen wallpaper where the foreground elements do not obstruct the entire clock on your lock screen, ensuring both visual appeal and functional clarity on your lock screen.\n\nNote: %s. + Atenção + Use um papel de parede de tela de bloqueio adequado, onde os elementos do primeiro plano não obstruam todo o relógio da tela de bloqueio, garantindo apelo visual e clareza funcional na tela de bloqueio.\n\nObservação: %s. OK É necessário reiniciar o sistema para aplicar as definições diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 69f45f3df..c463eb0d8 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -50,10 +50,15 @@ Ascunde SSID Timeout inactivitate Număr maxim de clienți + Soluție pentru problemele de conectivitate hotspot + Permite clienților care nu sunt „pre-aprobați” să se conecteze fără probleme Fundal cu efect de adâncime Integrare dinamică a imaginii de fundal cu ceasul Opacitatea fundalului în prim-plan + De asemenea, pe „Afișaj ambiental” + Modelul AI a fost descărcat pe dispozitiv + Modelul AI nu este disponibil pe dispozitiv (încă) Dezactivează animația de indiciu a deblocării Opțiuni pentru ecranul de blocare Eliminare avatar utilizator (mod utilizatori multipli) diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 574864bd6..1bc7eb0f2 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -50,10 +50,15 @@ Скрыть SSID Таймаут бездействия Максимальное количество клиентов + Hotspot connectivity issues workaround + Allow non-\"pre-approved\" clients to connect seamlessly Depth effect wallpaper Dynamically integrate wallpaper\'s foreground with the clock Wallpaper foreground opacity + Also on \"always on display\" + AI model is downloaded on the device + AI model isn\'t available on the device (yet) Отключить анимацию подсказки разблокировки Опции экрана блокировки Удалить аватар пользователя (многопользовательский режим) diff --git a/app/src/main/res/values-sr-rSP/strings.xml b/app/src/main/res/values-sr-rSP/strings.xml index d28e1efc1..14036bc17 100644 --- a/app/src/main/res/values-sr-rSP/strings.xml +++ b/app/src/main/res/values-sr-rSP/strings.xml @@ -50,10 +50,15 @@ Сакриј SSID Временско ограничење неактивности Максималан број клијената + Hotspot connectivity issues workaround + Allow non-\"pre-approved\" clients to connect seamlessly Depth effect wallpaper Dynamically integrate wallpaper\'s foreground with the clock Wallpaper foreground opacity + Also on \"always on display\" + AI model is downloaded on the device + AI model isn\'t available on the device (yet) Онемогући анимацију савета за откључавање Опције закључаног екрана Уклони аватар корисника (режим за више корисника) diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index 4af6385e0..0b998516e 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -50,10 +50,15 @@ Dölj SSID Timeout för inaktivitet Maximalt antal kunder + Hotspot connectivity issues workaround + Allow non-\"pre-approved\" clients to connect seamlessly Depth effect wallpaper Dynamically integrate wallpaper\'s foreground with the clock Wallpaper foreground opacity + Also on \"always on display\" + AI model is downloaded on the device + AI model isn\'t available on the device (yet) Inaktivera upplåsningstipsanimeringen Alternativ för låsskärm Ta bort användaravatar (fleranvändarläge) diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index 148d23e25..19b4cf002 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -50,10 +50,15 @@ SSID\'yi Gizle Hareketsizlik zaman aşımı Maksimum istemciler + Hotspot bağlantı sorunları geçici çözümü + \"Önceden onaylanmamış\" istemcilerin sorunsuz bir şekilde bağlanmasına izin ver Derinlik efektli duvar kağıdı Duvar kağıdının ön planını saatle dinamik olarak entegre et Duvar kağıdı ön plan opaklığı + Ayrıca \"her zaman açık ekran\"\" + AI modeli cihaza indirildi + AI modeli cihazda mevcut değil (henüz) Kilit açma ipucu animasyonunu devre dışı bırak Kilit ekranı seçenekleri Kullanıcı avatarını kaldır (çoklu kullanıcı modu) diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index 3762c1f48..93c86503b 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -50,10 +50,15 @@ Приховати SSID Тайм-аут бездіяльності Максимум клієнтів + Hotspot connectivity issues workaround + Allow non-\"pre-approved\" clients to connect seamlessly Depth effect wallpaper Dynamically integrate wallpaper\'s foreground with the clock Wallpaper foreground opacity + Also on \"always on display\" + AI model is downloaded on the device + AI model isn\'t available on the device (yet) Вимкніть анімацію підказки розблокування Параметри блокування екрана Видалити аватар користувача (багатокористувацький режим) diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index 7019ef87c..92a98e7d2 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -50,10 +50,15 @@ Ẩn SSID Thời gian không hoạt động Lượng client tối đa + Giải quyết tạm vấn đề kết nối điểm phát sóng + Cho phép máy khách \"chưa được phê duyệt trước\" kết nối liền mạch - Depth effect wallpaper - Dynamically integrate wallpaper\'s foreground with the clock - Wallpaper foreground opacity + Hình nền hiệu ứng chiều sâu + Tích hợp động hình nền với đồng hồ + Độ mờ nền trước hình nền + Also on \"always on display\" + Mẫu AI đã được tải xuống thiết bị + Mẫu AI không khả dụng với thiết bị(hoặc chưa) Tắt hoạt ảnh gợi ý mở khóa Tùy chọn màn hình khóa Xóa hình đại diện người dùng (chế độ nhiều người dùng) @@ -167,14 +172,14 @@ Độ dày thanh Cho biết đang sạc Cho biết đang sạc nhanh - Indicate power save + Chỉ ra tiết kiệm năng lượng Phạm vi mức cảnh báo Đặt cả hai thành 0 để tắt màu dựa trên cấp độ Màu cấp độ nguy cấp Màu cấp độ cảnh báo Màu đang sạc Màu đang sạc nhanh - Power Save color + Màu tiết kiệm năng lượng Màu bóng đổ trong khoảng này Thêm màu vào phần trăm pin khi đang sạc Hôm nay @@ -289,7 +294,7 @@ Giữ màn hình luôn hiển thị khi thiết bị đang được sạc Khi màn hình tắt… Biểu tượng theo chủ đề tùy chỉnh - Add PixelXpert to settings items + Thêm PixelXpert tới menu Cài Đặt Các biểu tượng tùy chỉnh đã bị vô hiệu hóa Các biểu tượng tùy chỉnh đã được bật Nhấn và giữ phím âm lượng để \"+Chuyển tiếp/-Phát lại\" bài hát @@ -382,9 +387,9 @@ Ứng dụng sẽ đóng ngay bây giờ. Bạn có thể mở lại bằng cách nhấn vào biểu tượng mới ĐƯỢC RỒI - Attention - Use a suitable lockscreen wallpaper where the foreground elements do not obstruct the entire clock on your lock screen, ensuring both visual appeal and functional clarity on your lock screen.\n\nNote: %s. - OK + Chú ý + Sử dụng hình nền màn hình khóa phù hợp trong đó các thành phần nền trước không cản trở toàn bộ đồng hồ trên màn hình khóa của bạn, đảm bảo vừa hấp dẫn về mặt hình ảnh vừa đảm bảo tính rõ ràng về mặt chức năng trên màn hình khóa.\n\nLưu ý: %s. + Đồng ý Cần phải khởi động lại hệ thống để áp dụng cài đặt diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 9c480d7b1..3d3e38103 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -50,19 +50,24 @@ 隐藏 SSID 自动关闭时间 最大连接数 + 已绕过热点的问题 + 允许非“预先批准”客户端无缝连接 - Depth effect wallpaper - Dynamically integrate wallpaper\'s foreground with the clock - Wallpaper foreground opacity + 深度效果壁纸 + 动态整合壁纸的前景和时钟 + 壁纸前景透明度 + 也在“息屏显示”上展示 + AI 模型已下载到设备 + AI 模型在设备上(目前暂)不可用 禁用解锁提示动画 锁屏选项 隐藏用户头像 (多用户模式) 隐藏屏下指纹背景 指纹背景启用 指纹背景隐藏 - Remove foreground icon from under-display fingerprint - Fingerprint icon is active - Fingerprint icon will be hidden + 从屏下指纹移除前景图标 + 指纹图标已激活 + 指纹图标将被隐藏 自定义锁屏文本 设置运营商文本 未修改运营商文本 @@ -148,7 +153,7 @@ 下载 + 上传 (合并) 仅下载 仅上传 - 以位/秒显示 + 以 bits/s 显示 状态栏选项 双色电池图标 开启 (仅当纵向图标时生效) @@ -167,14 +172,14 @@ 厚度 充电显示 快充显示 - Indicate power save + 指示节能 电量警告 均设为 0 将禁用基于电量的颜色变化 临界值颜色 警告颜色 充电颜色 快充颜色 - Power Save color + 节能颜色 颜色渐变 充电时彩色电池百分比 今天 @@ -289,7 +294,7 @@ 充电时开启息屏显示 锁屏功能 自定义带主题的图标 - Add PixelXpert to settings items + 添加 PixelXpert 到设置项 自定义图标已禁用 自定义图标已启用 长按音量键切歌 @@ -382,9 +387,9 @@ 应用现在将关闭。您可以通过点击新图标重新打开它 好的 - Attention - Use a suitable lockscreen wallpaper where the foreground elements do not obstruct the entire clock on your lock screen, ensuring both visual appeal and functional clarity on your lock screen.\n\nNote: %s. - OK + 请注意 + 使用合适的锁屏壁纸,让前台元素不会阻挡您锁屏上的整个时钟, 确保您锁屏界面的视觉吸引力和功能清晰度。\n\n注:%s. + 确定 需要重新启动系统才能应用设置 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 600a5292c..1ca49c5e4 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -50,6 +50,8 @@ 隱藏 SSID 自動關閉時間 最大接入數 + Hotspot connectivity issues workaround + Allow non-\"pre-approved\" clients to connect seamlessly 開發者是大腦殘 如果你也討厭開發者,請買我的網站 @@ -59,6 +61,9 @@ Https://lcloud. wiki 開發者是大腦殘 如果你也討厭開發者,請買我的網站 Https://lcloud. wiki + Also on \"always on display\" + AI model is downloaded on the device + AI model isn\'t available on the device (yet) Disable the unlock hint animation 自定鎖定畫面 隱藏使用者頭像(多使用者模式) From 7e3ce0b04e374ed53c52d5cefdf908884edb25c3 Mon Sep 17 00:00:00 2001 From: Crowdin Bot Date: Wed, 1 May 2024 05:26:08 +0000 Subject: [PATCH 085/162] New Crowdin translations by GitHub Action --- app/src/main/res/values-zh-rTW/strings.xml | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 1ca49c5e4..46664bf30 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -53,14 +53,9 @@ Hotspot connectivity issues workaround Allow non-\"pre-approved\" clients to connect seamlessly - 開發者是大腦殘 -如果你也討厭開發者,請買我的網站 -Https://lcloud. wiki - 如果你也討厭開發者,請買我的網站 -Https://lcloud. wiki - 開發者是大腦殘 -如果你也討厭開發者,請買我的網站 -Https://lcloud. wiki + Depth effect wallpaper + Dynamically integrate wallpaper\'s foreground with the clock + Wallpaper foreground opacity Also on \"always on display\" AI model is downloaded on the device AI model isn\'t available on the device (yet) @@ -71,9 +66,7 @@ Https://lcloud. wiki 指紋圖示背景被啟用 指紋圖示背景被隱藏 Távolítsa el a háttérkört a kijelző alatti ujjlenyomatból - 開發者是大腦殘 -如果你也討厭開發者,請買我的網站 -Https://lcloud. wiki + Fingerprint icon is active Fingerprint icon will be hidden 自訂鎖定畫面文本顯示 設定電信商名稱 From cc5e8d460346de7d66cc1e58b113230af71e6921 Mon Sep 17 00:00:00 2001 From: Siavash Date: Wed, 1 May 2024 08:58:10 +0330 Subject: [PATCH 086/162] CHANGELOG: Removed spam from Chinese Traditional translation --- .github/edit2MakeNewCanary | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/edit2MakeNewCanary b/.github/edit2MakeNewCanary index 65aeddb0b..04ad0604c 100644 --- a/.github/edit2MakeNewCanary +++ b/.github/edit2MakeNewCanary @@ -1 +1 @@ -Editing this file will trigger the build script for a new canary. \ No newline at end of file +Editing this file will trigger the build script for a new canary.. \ No newline at end of file From 6d4199569b6c965647ae330cfa9aebd36e64a193 Mon Sep 17 00:00:00 2001 From: GitHub Date: Wed, 1 May 2024 05:30:56 +0000 Subject: [PATCH 087/162] Version update: Release --- CanaryChangelog.md | 3 +++ MagiskModBase/module.prop | 4 ++-- MagiskModuleUpdate_Full.json | 4 ++-- MagiskModuleUpdate_Xposed.json | 4 ++-- app/build.gradle | 4 ++-- latestCanary.json | 4 ++-- 6 files changed, 13 insertions(+), 10 deletions(-) diff --git a/CanaryChangelog.md b/CanaryChangelog.md index 7931db583..bf752ec3d 100644 --- a/CanaryChangelog.md +++ b/CanaryChangelog.md @@ -1,3 +1,6 @@ +**canary-355** +- Removed spam from Chinese Traditional translation + **canary-354** - Added option to enable wallpaper depth effect on AOD diff --git a/MagiskModBase/module.prop b/MagiskModBase/module.prop index d742795cc..c871bfacd 100644 --- a/MagiskModBase/module.prop +++ b/MagiskModBase/module.prop @@ -1,7 +1,7 @@ id=PixelXpert name=Pixel Xpert -version=canary-354 -versionCode=354 +version=canary-355 +versionCode=355 author=Pixel Xpert Team description=Xposed based module for customizations on Pixel roms. Android 13+ updateJson=https://raw.githubusercontent.com/siavash79/PixelXpert/canary/MagiskModuleUpdate_Xposed.json diff --git a/MagiskModuleUpdate_Full.json b/MagiskModuleUpdate_Full.json index 15a912972..7fa15b1d7 100644 --- a/MagiskModuleUpdate_Full.json +++ b/MagiskModuleUpdate_Full.json @@ -1,6 +1,6 @@ { - "version": "canary-354", - "versionCode": 354, + "version": "canary-355", + "versionCode": 355, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/MagiskModuleUpdate_Xposed.json b/MagiskModuleUpdate_Xposed.json index 15a912972..7fa15b1d7 100644 --- a/MagiskModuleUpdate_Xposed.json +++ b/MagiskModuleUpdate_Xposed.json @@ -1,6 +1,6 @@ { - "version": "canary-354", - "versionCode": 354, + "version": "canary-355", + "versionCode": 355, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 91f94b48f..1bc938e49 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "sh.siava.pixelxpert" minSdk 33 targetSdk 34 - versionCode 354 - versionName "canary-354" + versionCode 355 + versionName "canary-355" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/latestCanary.json b/latestCanary.json index bf01a1e65..ee852db22 100644 --- a/latestCanary.json +++ b/latestCanary.json @@ -1,6 +1,6 @@ { - "version": "canary-354", - "versionCode": 354, + "version": "canary-355", + "versionCode": 355, "zipUrl_Xposed": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "zipUrl_Full": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" From 77c96938911b7d5a2a92947647cd8e0783ca8f05 Mon Sep 17 00:00:00 2001 From: Crowdin Bot Date: Sun, 5 May 2024 00:48:11 +0000 Subject: [PATCH 088/162] New Crowdin translations by GitHub Action --- app/src/main/res/values-fr-rFR/strings.xml | 2 +- app/src/main/res/values-vi-rVN/strings.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index a78d39a7b..0cdf77609 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -56,7 +56,7 @@ Effet de profondeur du fond d\'écran Intégration dynamique du fond d\'écran avec l\'horloge Opacité du fond d\'écran - Also on \"always on display\" + Également sur « toujours affiché » Le modèle IA est téléchargé sur l\'appareil Le modèle IA n\'est pas (encore) disponible sur l\'appareil Désactiver l\'animation des indices de déverrouillage diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index 92a98e7d2..881abc8f8 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -56,7 +56,7 @@ Hình nền hiệu ứng chiều sâu Tích hợp động hình nền với đồng hồ Độ mờ nền trước hình nền - Also on \"always on display\" + Gồm cả \"always on display\" Mẫu AI đã được tải xuống thiết bị Mẫu AI không khả dụng với thiết bị(hoặc chưa) Tắt hoạt ảnh gợi ý mở khóa From 01e08f62ddcd35df419891d77aa619fad960f385 Mon Sep 17 00:00:00 2001 From: Siavash Date: Mon, 6 May 2024 16:04:01 +0330 Subject: [PATCH 089/162] CHANGELOG: Now supporting for KernelSU --- .github/edit2MakeNewCanary | 2 +- MagiskModBase/customize.sh | 27 ++++++ MagiskModBase/service.sh | 2 + .../siava/pixelxpert/modpacks/Constants.java | 4 + .../siava/pixelxpert/modpacks/ModPacks.java | 7 ++ .../pixelxpert/modpacks/ksu/KSUInjector.java | 96 +++++++++++++++++++ .../modpacks/systemui/KSURootReceiver.java | 43 +++++++++ .../pixelxpert/service/RootProviderProxy.java | 6 ++ .../ui/activities/SplashScreenActivity.java | 3 + .../sh/siava/pixelxpert/utils/AppUtils.java | 16 ++++ app/src/main/res/values/module_scope.xml | 1 + 11 files changed, 206 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/sh/siava/pixelxpert/modpacks/ksu/KSUInjector.java create mode 100644 app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/KSURootReceiver.java diff --git a/.github/edit2MakeNewCanary b/.github/edit2MakeNewCanary index 04ad0604c..65aeddb0b 100644 --- a/.github/edit2MakeNewCanary +++ b/.github/edit2MakeNewCanary @@ -1 +1 @@ -Editing this file will trigger the build script for a new canary.. \ No newline at end of file +Editing this file will trigger the build script for a new canary. \ No newline at end of file diff --git a/MagiskModBase/customize.sh b/MagiskModBase/customize.sh index e9e588501..ae91ae224 100644 --- a/MagiskModBase/customize.sh +++ b/MagiskModBase/customize.sh @@ -94,9 +94,36 @@ activateModuleLSPD() CMD="insert into scope (mid, app_pkg_name, user_id) values ($NEWMID, \"com.android.settings\",0);" && runSQL + CMD="insert into scope (mid, app_pkg_name, user_id) values ($NEWMID, \"me.weishu.kernelsu\",0);" && runSQL + CMD="insert into scope (mid, app_pkg_name, user_id) values ($NEWMID, \"$PKGNAME\",0);" && runSQL } +testKernelSU() +{ + if [[ $(ksud -V 2>&1 | grep "not found" | wc -c) -eq 0 ]]; then #KSU installed + if [[ $(pm list packages | grep $PKGNAME | wc -c) -eq 0 ]]; then #PixelXpert NOT installed yet + ui_print '' + ui_print '*******************************' + ui_print 'KernelSU binaries found!' + ui_print '' + ui_print ' CAUTION!: ' + ui_print 'Before installation, you MUST disable' + ui_print '"Unmount modules by default"' + ui_print 'Otherwise, your device will fall into BOOTLOOP!' + ui_print '' + ui_print 'Do you wish to continue?' + ui_print 'Volume Up: Continue' + ui_print 'Volume Down: Abort' + if [[ "$(getevent -l -c 1 /dev/input/event0)" == *"VOLUMEDOWN"* ]]; then + abort 'Installation cancelled' + fi; + fi; + fi; +} + +testKernelSU + prepareSQL ui_print '' diff --git a/MagiskModBase/service.sh b/MagiskModBase/service.sh index 0b00c6b97..5a19859e3 100644 --- a/MagiskModBase/service.sh +++ b/MagiskModBase/service.sh @@ -81,6 +81,8 @@ activateModuleLSPD() CMD="insert into scope (mid, app_pkg_name, user_id) values ($NEWMID, \"com.android.settings\",0);" && runSQL + CMD="insert into scope (mid, app_pkg_name, user_id) values ($NEWMID, \"me.weishu.kernelsu\",0);" && runSQL + CMD="insert into scope (mid, app_pkg_name, user_id) values ($NEWMID, \"$PKGNAME\",0);" && runSQL } diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/Constants.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/Constants.java index cff905621..ad23515d7 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/Constants.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/Constants.java @@ -20,6 +20,7 @@ public final class Constants { public static final String ACTION_PROFILE_SWITCH_AVAILABLE = APPLICATION_ID + ".ACTION_PROFILE_SWITCH_AVAILABLE"; public static final String ACTION_CHECK_XPOSED_ENABLED = APPLICATION_ID + ".ACTION_CHECK_XPOSED_ENABLED"; public static final String ACTION_XPOSED_CONFIRMED = APPLICATION_ID + ".ACTION_XPOSED_CONFIRMED"; + public static final String ACTION_KSU_ACQUIRE_ROOT = APPLICATION_ID + "ACTION_KSU_ACQUIRE_ROOT"; public static final String SYSTEM_UI_PACKAGE = "com.android.systemui"; public static final String SYSTEM_FRAMEWORK_PACKAGE = "android"; @@ -27,6 +28,9 @@ public final class Constants { public static final String LAUNCHER_PACKAGE = "com.google.android.apps.nexuslauncher"; public static final String SETTINGS_PACKAGE = "com.android.settings"; public static final String DIALER_PACKAGE = "com.google.android.dialer"; + public static final String KSU_PACKAGE = "me.weishu.kernelsu"; + + public static final String PX_ROOT_EXTRA = "EXTRA_PX_ROOT"; public static final List PREF_UPDATE_EXCLUSIONS = Arrays.asList(BootLoopProtector.LOAD_TIME_KEY_KEY, BootLoopProtector.PACKAGE_STRIKE_KEY_KEY); diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/ModPacks.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/ModPacks.java index 5999b6f58..705cbacdc 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/ModPacks.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/ModPacks.java @@ -18,6 +18,7 @@ import sh.siava.pixelxpert.modpacks.android.StatusbarSize; import sh.siava.pixelxpert.modpacks.android.SystemScreenRecord; import sh.siava.pixelxpert.modpacks.dialer.RecordingMessage; +import sh.siava.pixelxpert.modpacks.ksu.KSUInjector; import sh.siava.pixelxpert.modpacks.launcher.ClearAllButtonMod; import sh.siava.pixelxpert.modpacks.launcher.CustomNavGestures; import sh.siava.pixelxpert.modpacks.launcher.FeatureFlags; @@ -34,6 +35,7 @@ import sh.siava.pixelxpert.modpacks.systemui.FingerprintWhileDozing; import sh.siava.pixelxpert.modpacks.systemui.FlashLightLevel; import sh.siava.pixelxpert.modpacks.systemui.GestureNavbarManager; +import sh.siava.pixelxpert.modpacks.systemui.KSURootReceiver; import sh.siava.pixelxpert.modpacks.systemui.KeyGuardPinScrambler; import sh.siava.pixelxpert.modpacks.systemui.KeyguardMods; import sh.siava.pixelxpert.modpacks.systemui.MultiStatusbarRows; @@ -128,6 +130,7 @@ public static ArrayList> getMods(String packageNa modPacks.add(ScreenRecord.class); modPacks.add(VolumeDialog.class); modPacks.add(DepthWallpaper.class); + modPacks.add(KSURootReceiver.class); } break; @@ -153,6 +156,10 @@ public static ArrayList> getMods(String packageNa case Constants.DIALER_PACKAGE: modPacks.add(RecordingMessage.class); break; + + case Constants.KSU_PACKAGE: + modPacks.add(KSUInjector.class); + break; } //All Apps diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/ksu/KSUInjector.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/ksu/KSUInjector.java new file mode 100644 index 000000000..d38f07f03 --- /dev/null +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/ksu/KSUInjector.java @@ -0,0 +1,96 @@ +package sh.siava.pixelxpert.modpacks.ksu; + +import static de.robv.android.xposed.XposedBridge.hookAllMethods; +import static de.robv.android.xposed.XposedHelpers.callMethod; +import static de.robv.android.xposed.XposedHelpers.findClass; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; + +import com.topjohnwu.superuser.Shell; + +import org.objenesis.ObjenesisHelper; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import de.robv.android.xposed.XC_MethodHook; +import de.robv.android.xposed.callbacks.XC_LoadPackage; +import sh.siava.pixelxpert.BuildConfig; +import sh.siava.pixelxpert.modpacks.Constants; +import sh.siava.pixelxpert.modpacks.XposedModPack; +import sh.siava.pixelxpert.modpacks.utils.SystemUtils; + +/** @noinspection RedundantThrows*/ +public class KSUInjector extends XposedModPack { + private static final String listenPackage = Constants.KSU_PACKAGE; + + public KSUInjector(Context context) { + super(context); + } + + @Override + public void updatePrefs(String... Key) { + + } + + @Override + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { + Class MainActivityClass = findClass("me.weishu.kernelsu.ui.MainActivity", lpParam.classLoader); + Class NativesClass = findClass("me.weishu.kernelsu.Natives", lpParam.classLoader); + Class ProfileClass = findClass("me.weishu.kernelsu.Natives$Profile", lpParam.classLoader); + hookAllMethods(MainActivityClass, "onCreate", new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + Intent launchIntent = ((Activity) param.thisObject).getIntent(); + if(launchIntent.hasExtra(Constants.PX_ROOT_EXTRA)) + { + new Thread(() -> { + try + { + Object nativeObject = ObjenesisHelper.newInstance(NativesClass); + int[] rootUIDs = (int[]) callMethod(nativeObject, "getAllowList"); + + PackageManager packageManager = mContext.getPackageManager(); + int ownUID = packageManager.getPackageUid(BuildConfig.APPLICATION_ID, PackageManager.GET_ACTIVITIES); + + boolean haveRoot = Arrays.stream(rootUIDs).anyMatch(uid -> uid == ownUID); + + if(!haveRoot) { + Object ownRootProfile = ProfileClass.getConstructor(String.class, int.class, boolean.class, boolean.class, String.class, int.class, int.class, List.class, List.class, String.class, int.class, boolean.class, boolean.class, String.class) + .newInstance(BuildConfig.APPLICATION_ID, ownUID, true, true, null, 0, 0, new ArrayList<>(), new ArrayList<>(), "u:r:su:s0", 0, true, true, ""); + + callMethod(nativeObject, "setAppProfile", ownRootProfile); + + restartPX(launchIntent.hasExtra("launchApp")); + } + Thread.sleep(2000); + SystemUtils.killSelf(); + } + catch (Throwable ignored) {} + }).start(); + } + } + }); + } + + private void restartPX(boolean launch) throws InterruptedException { + Shell.cmd("killall " + BuildConfig.APPLICATION_ID).exec(); + + if(launch) { + Thread.sleep(1000); + mContext.startActivity( + mContext + .getPackageManager() + .getLaunchIntentForPackage(BuildConfig.APPLICATION_ID)); + } + } + + @Override + public boolean listensTo(String packageName) { + return listenPackage.equals(packageName); + } +} \ No newline at end of file diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/KSURootReceiver.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/KSURootReceiver.java new file mode 100644 index 000000000..3b690f065 --- /dev/null +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/KSURootReceiver.java @@ -0,0 +1,43 @@ +package sh.siava.pixelxpert.modpacks.systemui; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; + +import de.robv.android.xposed.callbacks.XC_LoadPackage; +import sh.siava.pixelxpert.modpacks.Constants; +import sh.siava.pixelxpert.modpacks.XPLauncher; +import sh.siava.pixelxpert.modpacks.XposedModPack; +import sh.siava.pixelxpert.utils.AppUtils; + +public class KSURootReceiver extends XposedModPack { + private static final String listenPackage = Constants.SYSTEM_UI_PACKAGE; + + public KSURootReceiver(Context context) { + super(context); + } + + @Override + public void updatePrefs(String... Key) {} + + @Override + public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { + BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + AppUtils.runKSURootActivity(mContext, false); + } + }; + + IntentFilter filter = new IntentFilter(); + filter.addAction(Constants.ACTION_KSU_ACQUIRE_ROOT); + + mContext.registerReceiver(broadcastReceiver, filter, Context.RECEIVER_EXPORTED); + } + + @Override + public boolean listensTo(String packageName) { + return listenPackage.equals(packageName) && !XPLauncher.isChildProcess; + } +} \ No newline at end of file diff --git a/app/src/main/java/sh/siava/pixelxpert/service/RootProviderProxy.java b/app/src/main/java/sh/siava/pixelxpert/service/RootProviderProxy.java index f27604869..70069bb23 100644 --- a/app/src/main/java/sh/siava/pixelxpert/service/RootProviderProxy.java +++ b/app/src/main/java/sh/siava/pixelxpert/service/RootProviderProxy.java @@ -19,6 +19,7 @@ import sh.siava.pixelxpert.IRootProviderProxy; import sh.siava.pixelxpert.R; +import sh.siava.pixelxpert.modpacks.Constants; import sh.siava.pixelxpert.modpacks.utils.BitmapSubjectSegmenter; public class RootProviderProxy extends Service { @@ -44,6 +45,11 @@ private RootPoviderProxyIPC(Context context) catch (Throwable ignored){} rootGranted = Shell.getShell().isRoot(); + if(!rootGranted) + { + context.sendBroadcast(new Intent(Constants.ACTION_KSU_ACQUIRE_ROOT)); + } + rootAllowedPacks = Arrays.asList(context.getResources().getStringArray(R.array.root_requirement)); } diff --git a/app/src/main/java/sh/siava/pixelxpert/ui/activities/SplashScreenActivity.java b/app/src/main/java/sh/siava/pixelxpert/ui/activities/SplashScreenActivity.java index 72ff958a3..65ed8e732 100644 --- a/app/src/main/java/sh/siava/pixelxpert/ui/activities/SplashScreenActivity.java +++ b/app/src/main/java/sh/siava/pixelxpert/ui/activities/SplashScreenActivity.java @@ -25,6 +25,7 @@ import sh.siava.pixelxpert.R; import sh.siava.pixelxpert.databinding.ActivitySplashScreenBinding; import sh.siava.pixelxpert.service.RootProvider; +import sh.siava.pixelxpert.utils.AppUtils; @SuppressLint("CustomSplashScreen") public class SplashScreenActivity extends AppCompatActivity { @@ -58,6 +59,8 @@ protected void onCreate(Bundle savedInstanceState) { if (Shell.getShell().isRoot()) { mRootCheckPassed.countDown(); } else { + AppUtils.runKSURootActivity(this, true); + runOnUiThread(() -> new MaterialAlertDialogBuilder(SplashScreenActivity.this, R.style.MaterialComponents_MaterialAlertDialog) .setCancelable(false) diff --git a/app/src/main/java/sh/siava/pixelxpert/utils/AppUtils.java b/app/src/main/java/sh/siava/pixelxpert/utils/AppUtils.java index 60e0fac5e..c54bc803b 100644 --- a/app/src/main/java/sh/siava/pixelxpert/utils/AppUtils.java +++ b/app/src/main/java/sh/siava/pixelxpert/utils/AppUtils.java @@ -1,5 +1,7 @@ package sh.siava.pixelxpert.utils; +import android.content.Context; +import android.content.Intent; import android.os.FileUtils; import android.util.Log; @@ -11,6 +13,8 @@ import java.util.regex.Pattern; import java.util.zip.ZipFile; +import sh.siava.pixelxpert.modpacks.Constants; + public class AppUtils { public static void Restart(String what) { switch (what.toLowerCase()) @@ -31,6 +35,18 @@ public static void Restart(String what) { } } + public static void runKSURootActivity(Context context, boolean launchApp) + { + Intent launchIntent = context.getPackageManager().getLaunchIntentForPackage(Constants.KSU_PACKAGE); + launchIntent.putExtra(Constants.PX_ROOT_EXTRA, 1); + if(launchApp) + { + launchIntent.putExtra("launchApp", 1); + } + + context.startActivity(launchIntent); + } + public static boolean isLikelyPixelBuild() { try diff --git a/app/src/main/res/values/module_scope.xml b/app/src/main/res/values/module_scope.xml index e1f977a45..9b4b835ad 100644 --- a/app/src/main/res/values/module_scope.xml +++ b/app/src/main/res/values/module_scope.xml @@ -6,6 +6,7 @@ android com.android.settings com.google.android.dialer + me.weishu.kernelsu com.android.systemui From 3fe0ccb314c8c7cf4972e315fd2aefe34470f708 Mon Sep 17 00:00:00 2001 From: GitHub Date: Tue, 7 May 2024 09:26:14 +0000 Subject: [PATCH 090/162] Version update: Release --- CanaryChangelog.md | 3 +++ MagiskModBase/module.prop | 4 ++-- MagiskModuleUpdate_Full.json | 4 ++-- MagiskModuleUpdate_Xposed.json | 4 ++-- app/build.gradle | 4 ++-- latestCanary.json | 4 ++-- 6 files changed, 13 insertions(+), 10 deletions(-) diff --git a/CanaryChangelog.md b/CanaryChangelog.md index bf752ec3d..d49bc4004 100644 --- a/CanaryChangelog.md +++ b/CanaryChangelog.md @@ -1,3 +1,6 @@ +**canary-356** +- Now supporting for KernelSU + **canary-355** - Removed spam from Chinese Traditional translation diff --git a/MagiskModBase/module.prop b/MagiskModBase/module.prop index c871bfacd..5d6bbd266 100644 --- a/MagiskModBase/module.prop +++ b/MagiskModBase/module.prop @@ -1,7 +1,7 @@ id=PixelXpert name=Pixel Xpert -version=canary-355 -versionCode=355 +version=canary-356 +versionCode=356 author=Pixel Xpert Team description=Xposed based module for customizations on Pixel roms. Android 13+ updateJson=https://raw.githubusercontent.com/siavash79/PixelXpert/canary/MagiskModuleUpdate_Xposed.json diff --git a/MagiskModuleUpdate_Full.json b/MagiskModuleUpdate_Full.json index 7fa15b1d7..5ac732095 100644 --- a/MagiskModuleUpdate_Full.json +++ b/MagiskModuleUpdate_Full.json @@ -1,6 +1,6 @@ { - "version": "canary-355", - "versionCode": 355, + "version": "canary-356", + "versionCode": 356, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/MagiskModuleUpdate_Xposed.json b/MagiskModuleUpdate_Xposed.json index 7fa15b1d7..5ac732095 100644 --- a/MagiskModuleUpdate_Xposed.json +++ b/MagiskModuleUpdate_Xposed.json @@ -1,6 +1,6 @@ { - "version": "canary-355", - "versionCode": 355, + "version": "canary-356", + "versionCode": 356, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 1bc938e49..125a6ee84 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "sh.siava.pixelxpert" minSdk 33 targetSdk 34 - versionCode 355 - versionName "canary-355" + versionCode 356 + versionName "canary-356" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/latestCanary.json b/latestCanary.json index ee852db22..51f38cf74 100644 --- a/latestCanary.json +++ b/latestCanary.json @@ -1,6 +1,6 @@ { - "version": "canary-355", - "versionCode": 355, + "version": "canary-356", + "versionCode": 356, "zipUrl_Xposed": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "zipUrl_Full": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" From d42869cfc6fe25eec2d54bfaaff2c6e214cf8a7b Mon Sep 17 00:00:00 2001 From: Siavash Date: Tue, 7 May 2024 14:10:53 +0330 Subject: [PATCH 091/162] In app updater: support for KSU --- app/src/main/java/sh/siava/pixelxpert/utils/AppUtils.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/utils/AppUtils.java b/app/src/main/java/sh/siava/pixelxpert/utils/AppUtils.java index c54bc803b..6d70f0964 100644 --- a/app/src/main/java/sh/siava/pixelxpert/utils/AppUtils.java +++ b/app/src/main/java/sh/siava/pixelxpert/utils/AppUtils.java @@ -86,7 +86,8 @@ public static boolean installDoubleZip(String DoubleZipped) //installs the zip m } //install - Shell.cmd(String.format("magisk --install-module %s", unzippedFile.getAbsolutePath())).exec(); + Shell.cmd(String.format("magisk --install-module %s", unzippedFile.getAbsolutePath())).exec(); //magisk + Shell.cmd(String.format("ksud module install %s", unzippedFile.getAbsolutePath())).exec(); //ksu //cleanup //noinspection ResultOfMethodCallIgnored From 0c7877ae2c19ee7da45221bd8ea05cbe19b2030e Mon Sep 17 00:00:00 2001 From: Siavash Date: Tue, 7 May 2024 14:23:00 +0330 Subject: [PATCH 092/162] moved BitmapSubjectSegmenter --- .../java/sh/siava/pixelxpert/service/RootProviderProxy.java | 2 +- .../sh/siava/pixelxpert/ui/activities/SettingsActivity.java | 2 +- .../pixelxpert/{modpacks => }/utils/BitmapSubjectSegmenter.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) rename app/src/main/java/sh/siava/pixelxpert/{modpacks => }/utils/BitmapSubjectSegmenter.java (98%) diff --git a/app/src/main/java/sh/siava/pixelxpert/service/RootProviderProxy.java b/app/src/main/java/sh/siava/pixelxpert/service/RootProviderProxy.java index 70069bb23..63c3112aa 100644 --- a/app/src/main/java/sh/siava/pixelxpert/service/RootProviderProxy.java +++ b/app/src/main/java/sh/siava/pixelxpert/service/RootProviderProxy.java @@ -20,7 +20,7 @@ import sh.siava.pixelxpert.IRootProviderProxy; import sh.siava.pixelxpert.R; import sh.siava.pixelxpert.modpacks.Constants; -import sh.siava.pixelxpert.modpacks.utils.BitmapSubjectSegmenter; +import sh.siava.pixelxpert.utils.BitmapSubjectSegmenter; public class RootProviderProxy extends Service { @Nullable diff --git a/app/src/main/java/sh/siava/pixelxpert/ui/activities/SettingsActivity.java b/app/src/main/java/sh/siava/pixelxpert/ui/activities/SettingsActivity.java index e0f1df349..f0a040c0d 100644 --- a/app/src/main/java/sh/siava/pixelxpert/ui/activities/SettingsActivity.java +++ b/app/src/main/java/sh/siava/pixelxpert/ui/activities/SettingsActivity.java @@ -48,7 +48,7 @@ import sh.siava.pixelxpert.BuildConfig; import sh.siava.pixelxpert.R; import sh.siava.pixelxpert.databinding.SettingsActivityBinding; -import sh.siava.pixelxpert.modpacks.utils.BitmapSubjectSegmenter; +import sh.siava.pixelxpert.utils.BitmapSubjectSegmenter; import sh.siava.pixelxpert.ui.fragments.HooksFragment; import sh.siava.pixelxpert.ui.fragments.UpdateFragment; import sh.siava.pixelxpert.ui.preferences.preferencesearch.SearchConfiguration; diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/BitmapSubjectSegmenter.java b/app/src/main/java/sh/siava/pixelxpert/utils/BitmapSubjectSegmenter.java similarity index 98% rename from app/src/main/java/sh/siava/pixelxpert/modpacks/utils/BitmapSubjectSegmenter.java rename to app/src/main/java/sh/siava/pixelxpert/utils/BitmapSubjectSegmenter.java index 8e9616096..674fc07ad 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/BitmapSubjectSegmenter.java +++ b/app/src/main/java/sh/siava/pixelxpert/utils/BitmapSubjectSegmenter.java @@ -1,4 +1,4 @@ -package sh.siava.pixelxpert.modpacks.utils; +package sh.siava.pixelxpert.utils; import android.content.Context; import android.graphics.Bitmap; From d786bf16e4ccdeecbdae1ae6016ae5b4fd277480 Mon Sep 17 00:00:00 2001 From: Siavash Date: Wed, 8 May 2024 08:46:17 +0330 Subject: [PATCH 093/162] KSU root injector: fixed load loop between two apps --- .../pixelxpert/modpacks/ksu/KSUInjector.java | 3 ++- .../ui/activities/SplashScreenActivity.java | 4 +++- .../java/sh/siava/pixelxpert/utils/AppUtils.java | 16 +++++++++------- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/ksu/KSUInjector.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/ksu/KSUInjector.java index d38f07f03..d173e7f48 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/ksu/KSUInjector.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/ksu/KSUInjector.java @@ -85,7 +85,8 @@ private void restartPX(boolean launch) throws InterruptedException { mContext.startActivity( mContext .getPackageManager() - .getLaunchIntentForPackage(BuildConfig.APPLICATION_ID)); + .getLaunchIntentForPackage(BuildConfig.APPLICATION_ID) + .putExtra("FromKSU" , 1)); } } diff --git a/app/src/main/java/sh/siava/pixelxpert/ui/activities/SplashScreenActivity.java b/app/src/main/java/sh/siava/pixelxpert/ui/activities/SplashScreenActivity.java index 65ed8e732..956d97339 100644 --- a/app/src/main/java/sh/siava/pixelxpert/ui/activities/SplashScreenActivity.java +++ b/app/src/main/java/sh/siava/pixelxpert/ui/activities/SplashScreenActivity.java @@ -59,7 +59,9 @@ protected void onCreate(Bundle savedInstanceState) { if (Shell.getShell().isRoot()) { mRootCheckPassed.countDown(); } else { - AppUtils.runKSURootActivity(this, true); + if(!getIntent().hasExtra("FromKSU")) { + AppUtils.runKSURootActivity(this, true); + } runOnUiThread(() -> new MaterialAlertDialogBuilder(SplashScreenActivity.this, R.style.MaterialComponents_MaterialAlertDialog) diff --git a/app/src/main/java/sh/siava/pixelxpert/utils/AppUtils.java b/app/src/main/java/sh/siava/pixelxpert/utils/AppUtils.java index 6d70f0964..8fe06e17e 100644 --- a/app/src/main/java/sh/siava/pixelxpert/utils/AppUtils.java +++ b/app/src/main/java/sh/siava/pixelxpert/utils/AppUtils.java @@ -37,14 +37,16 @@ public static void Restart(String what) { public static void runKSURootActivity(Context context, boolean launchApp) { - Intent launchIntent = context.getPackageManager().getLaunchIntentForPackage(Constants.KSU_PACKAGE); - launchIntent.putExtra(Constants.PX_ROOT_EXTRA, 1); - if(launchApp) - { - launchIntent.putExtra("launchApp", 1); - } + try { + Intent launchIntent = context.getPackageManager().getLaunchIntentForPackage(Constants.KSU_PACKAGE); + launchIntent.putExtra(Constants.PX_ROOT_EXTRA, 1); + if (launchApp) { + launchIntent.putExtra("launchApp", 1); + } - context.startActivity(launchIntent); + context.startActivity(launchIntent); + } + catch (Throwable ignored){} } public static boolean isLikelyPixelBuild() From 2f8600ef3b08c8be9e726931f14fec8ae8a5a5cb Mon Sep 17 00:00:00 2001 From: Sivash Date: Thu, 16 May 2024 07:05:38 +0330 Subject: [PATCH 094/162] CHANGELOG: A15B2: Fixed notification icon container --- .../NotificationIconContainerOverride.java | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/NotificationIconContainerOverride.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/NotificationIconContainerOverride.java index aaafbce33..cf012df11 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/NotificationIconContainerOverride.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/NotificationIconContainerOverride.java @@ -33,11 +33,6 @@ public static void calculateIconXTranslations(XC_MethodHook.MethodHookParam para float translationX = (float) callMethod(thisObject, "getActualPaddingStart"); int firstOverflowIndex = -1; int childCount = thisObject.getChildCount(); - int maxVisibleIcons = getBooleanField(thisObject, "mOnLockScreen") - ? MAX_ICONS_ON_AOD - : getBooleanField(thisObject, "mIsStaticLayout") - ? MAX_STATIC_ICONS - : childCount; float layoutEnd = getLayoutEnd(thisObject); setObjectField(thisObject, "mVisualOverflowStart", 0); @@ -64,11 +59,22 @@ public static void calculateIconXTranslations(XC_MethodHook.MethodHookParam para } int mSpeedBumpIndex = getIntField(thisObject, "mSpeedBumpIndex"); boolean forceOverflow = mSpeedBumpIndex != -1 && i >= mSpeedBumpIndex - && getFloatField(iconState, "iconAppearAmount") > 0.0f || i >= maxVisibleIcons; + && getFloatField(iconState, "iconAppearAmount") > 0.0f; boolean isLastChild = i == childCount - 1; - float drawingScale = getBooleanField(thisObject, "mOnLockScreen") && view.getClass().getName().endsWith("StatusBarIconView") - ? getIconScaleIncreased(view) - : 1f; + float drawingScale; + + try { //older versions + drawingScale = getBooleanField(thisObject, "mOnLockScreen") && view.getClass().getName().endsWith("StatusBarIconView") + ? getIconScaleIncreased(view) + : 1f; + } + catch (Throwable ignored) //A15 Beta 2 + { + drawingScale = getBooleanField(thisObject, "mUseIncreasedIconScale") && view.getClass().getName().endsWith("StatusBarIconView") + ? getIconScaleIncreased(view) + : 1f; + } + setObjectField(iconState, "visibleState", getBooleanField(iconState, "hidden") ? STATE_HIDDEN : STATE_ICON); From 3a57f6d24f9d2bcc8e0702784fbf52e1802e5cb1 Mon Sep 17 00:00:00 2001 From: Sivash Date: Thu, 16 May 2024 07:50:26 +0330 Subject: [PATCH 095/162] CHANGELOG: A15B2: Fixed battery icon styles --- .../systemui/BatteryStyleManager.java | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BatteryStyleManager.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BatteryStyleManager.java index fe430a54c..f346cdd70 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BatteryStyleManager.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BatteryStyleManager.java @@ -2,7 +2,7 @@ import static de.robv.android.xposed.XposedBridge.hookAllConstructors; import static de.robv.android.xposed.XposedBridge.hookAllMethods; -import static de.robv.android.xposed.XposedHelpers.findAndHookConstructor; +import static de.robv.android.xposed.XposedHelpers.findClass; import static de.robv.android.xposed.XposedHelpers.findClassIfExists; import static de.robv.android.xposed.XposedHelpers.getAdditionalInstanceField; import static de.robv.android.xposed.XposedHelpers.getObjectField; @@ -22,8 +22,6 @@ import android.widget.ImageView; import android.widget.TextView; -import androidx.core.graphics.ColorUtils; - import java.util.ArrayList; import java.util.List; @@ -144,15 +142,23 @@ private static void updateBatteryViewValues(View view, boolean forcePercentageCo public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) { BatteryDataProvider.registerInfoCallback(() -> refreshAllBatteryIcons(false)); - findAndHookConstructor("com.android.settingslib.graph.ThemedBatteryDrawable", lpParam.classLoader, Context.class, int.class, new XC_MethodHook() { + Class ThemedBatteryDrawableClass = findClass("com.android.settingslib.graph.ThemedBatteryDrawable", lpParam.classLoader); + Class BatteryMeterViewClass = findClassIfExists("com.android.systemui.battery.BatteryMeterView", lpParam.classLoader); + + hookAllConstructors(ThemedBatteryDrawableClass, new XC_MethodHook() { @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - frameColor = (int) param.args[1]; + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + if(param.args[0] instanceof Context) + { + frameColor = (int) param.args[1]; + } + else + { + frameColor = (int) param.args[0]; + } } }); - Class BatteryMeterViewClass = findClassIfExists("com.android.systemui.battery.BatteryMeterView", lpParam.classLoader); - View.OnAttachStateChangeListener listener = new View.OnAttachStateChangeListener() { @Override public void onViewAttachedToWindow(View view) { From 10440e5051947c20883a8b057acda01b1d9b99bf Mon Sep 17 00:00:00 2001 From: Sivash Date: Thu, 16 May 2024 07:56:53 +0330 Subject: [PATCH 096/162] CHANGELOG: A15B2: Fixed various color issues --- .github/edit2MakeNewCanary | 2 +- .../siava/pixelxpert/modpacks/ModPacks.java | 2 - .../modpacks/systemui/KeyguardMods.java | 17 +++--- .../systemui/SettingsLibUtilsProvider.java | 54 ------------------- .../modpacks/systemui/StatusbarMods.java | 7 +-- .../modpacks/systemui/ThemeManager_13.java | 3 +- .../modpacks/systemui/ThemeManager_14.java | 5 +- .../modpacks/systemui/UDFPSManager.java | 6 ++- .../batteryStyles/CircleBatteryDrawable.java | 4 +- .../CircleFilledBatteryDrawable.java | 5 +- .../modpacks/utils/toolkit/ColorUtils.java | 37 +++++++++++++ 11 files changed, 66 insertions(+), 76 deletions(-) delete mode 100644 app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/SettingsLibUtilsProvider.java create mode 100644 app/src/main/java/sh/siava/pixelxpert/modpacks/utils/toolkit/ColorUtils.java diff --git a/.github/edit2MakeNewCanary b/.github/edit2MakeNewCanary index 65aeddb0b..04ad0604c 100644 --- a/.github/edit2MakeNewCanary +++ b/.github/edit2MakeNewCanary @@ -1 +1 @@ -Editing this file will trigger the build script for a new canary. \ No newline at end of file +Editing this file will trigger the build script for a new canary.. \ No newline at end of file diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/ModPacks.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/ModPacks.java index 705cbacdc..a7e0bb714 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/ModPacks.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/ModPacks.java @@ -46,7 +46,6 @@ import sh.siava.pixelxpert.modpacks.systemui.ScreenGestures; import sh.siava.pixelxpert.modpacks.systemui.ScreenRecord; import sh.siava.pixelxpert.modpacks.systemui.ScreenshotManager; -import sh.siava.pixelxpert.modpacks.systemui.SettingsLibUtilsProvider; import sh.siava.pixelxpert.modpacks.systemui.StatusbarGestures; import sh.siava.pixelxpert.modpacks.systemui.StatusbarMods; import sh.siava.pixelxpert.modpacks.systemui.ThemeManager_13; @@ -91,7 +90,6 @@ public static ArrayList> getMods(String packageNa { //load before others modPacks.add(ThermalProvider.class); - modPacks.add(SettingsLibUtilsProvider.class); if(Build.VERSION.SDK_INT == Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/KeyguardMods.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/KeyguardMods.java index 74723707a..628fe88ff 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/KeyguardMods.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/KeyguardMods.java @@ -12,6 +12,8 @@ import static de.robv.android.xposed.XposedHelpers.setObjectField; import static sh.siava.pixelxpert.modpacks.XPrefs.Xprefs; import static sh.siava.pixelxpert.modpacks.systemui.BatteryDataProvider.isCharging; +import static sh.siava.pixelxpert.modpacks.utils.toolkit.ColorUtils.getColorAttr; +import static sh.siava.pixelxpert.modpacks.utils.toolkit.ColorUtils.getColorAttrDefaultColor; import static sh.siava.pixelxpert.modpacks.utils.toolkit.ReflectionTools.hookAllMethodsMatchPattern; import android.annotation.SuppressLint; @@ -300,8 +302,9 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { } if (transparentBGcolor) { - @SuppressLint("DiscouragedApi") int wallpaperTextColorAccent = SettingsLibUtilsProvider.getColorAttrDefaultColor( - mContext.getResources().getIdentifier("wallpaperTextColorAccent", "attr", mContext.getPackageName()), mContext); + @SuppressLint("DiscouragedApi") int wallpaperTextColorAccent = getColorAttrDefaultColor( + mContext, + mContext.getResources().getIdentifier("wallpaperTextColorAccent", "attr", mContext.getPackageName())); try { v.getDrawable().setTintList(ColorStateList.valueOf(wallpaperTextColorAccent)); @@ -309,12 +312,14 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { } catch (Throwable ignored) {} } else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.UPSIDE_DOWN_CAKE){ @SuppressLint("DiscouragedApi") - int mTextColorPrimary = SettingsLibUtilsProvider.getColorAttrDefaultColor( - mContext.getResources().getIdentifier("textColorPrimary", "attr", "android"), mContext); + int mTextColorPrimary = getColorAttrDefaultColor( + mContext, + mContext.getResources().getIdentifier("textColorPrimary", "attr", "android")); @SuppressLint("DiscouragedApi") - ColorStateList colorSurface = SettingsLibUtilsProvider.getColorAttr( - mContext.getResources().getIdentifier("colorSurface", "attr", "android"), mContext); + ColorStateList colorSurface = getColorAttr( + mContext, + mContext.getResources().getIdentifier("colorSurface", "attr", "android")); v.getDrawable().setTint(mTextColorPrimary); diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/SettingsLibUtilsProvider.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/SettingsLibUtilsProvider.java deleted file mode 100644 index abe546452..000000000 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/SettingsLibUtilsProvider.java +++ /dev/null @@ -1,54 +0,0 @@ -package sh.siava.pixelxpert.modpacks.systemui; - -import static de.robv.android.xposed.XposedHelpers.callStaticMethod; -import static de.robv.android.xposed.XposedHelpers.findClass; - -import android.content.Context; -import android.content.res.ColorStateList; - -import de.robv.android.xposed.callbacks.XC_LoadPackage; -import sh.siava.pixelxpert.modpacks.Constants; -import sh.siava.pixelxpert.modpacks.XPLauncher; -import sh.siava.pixelxpert.modpacks.XposedModPack; - -public class SettingsLibUtilsProvider extends XposedModPack { - private static final String listenPackage = Constants.SYSTEM_UI_PACKAGE; - private static Class UtilsClass = null; - - public static ColorStateList getColorAttr(int resID, Context context) - { - if(UtilsClass == null) return null; - - return (ColorStateList) callStaticMethod(UtilsClass,"getColorAttr", resID, context); - } - - public static int getColorAttrDefaultColor(int resID, Context context) - { - if(UtilsClass == null) return 0; - - try - { //13 QPR2 - return (int) callStaticMethod(UtilsClass, "getColorAttrDefaultColor", context, resID, 0); - } - catch (Throwable ignored) - { //13 QPR1 - return (int) callStaticMethod(UtilsClass, "getColorAttrDefaultColor", resID, context); - } - } - public SettingsLibUtilsProvider(Context context) { - super(context); - } - - @Override - public void updatePrefs(String... Key) {} - - @Override - public boolean listensTo(String packageName) { - return listenPackage.equals(packageName) && !XPLauncher.isChildProcess; - } - - @Override - public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { - UtilsClass = findClass("com.android.settingslib.Utils", lpParam.classLoader); - } -} diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/StatusbarMods.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/StatusbarMods.java index c7adb888b..d015be7ae 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/StatusbarMods.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/StatusbarMods.java @@ -21,6 +21,7 @@ import static de.robv.android.xposed.XposedHelpers.setObjectField; import static sh.siava.pixelxpert.modpacks.ResourceManager.modRes; import static sh.siava.pixelxpert.modpacks.XPrefs.Xprefs; +import static sh.siava.pixelxpert.modpacks.utils.toolkit.ColorUtils.getColorAttrDefaultColor; import android.animation.LayoutTransition; import android.annotation.SuppressLint; @@ -722,9 +723,9 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { //Getting QS text color for Network traffic - int fillColor = SettingsLibUtilsProvider.getColorAttrDefaultColor( - mContext.getResources().getIdentifier("@android:attr/textColorPrimary", "attr", mContext.getPackageName()), - mContext); + int fillColor = getColorAttrDefaultColor( + mContext, + mContext.getResources().getIdentifier("@android:attr/textColorPrimary", "attr", mContext.getPackageName())); NetworkTraffic.setTintColor(fillColor, false); diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ThemeManager_13.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ThemeManager_13.java index 54152e73c..0e409e4b6 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ThemeManager_13.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ThemeManager_13.java @@ -12,6 +12,7 @@ import static de.robv.android.xposed.XposedHelpers.setObjectField; import static sh.siava.pixelxpert.modpacks.XPrefs.Xprefs; import static sh.siava.pixelxpert.modpacks.utils.SystemUtils.sleep; +import static sh.siava.pixelxpert.modpacks.utils.toolkit.ColorUtils.getColorAttrDefaultColor; import static sh.siava.pixelxpert.modpacks.utils.toolkit.OverlayTools.setOverlay; import android.annotation.SuppressLint; @@ -255,7 +256,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { protected void afterHookedMethod(MethodHookParam param) throws Throwable { if (!lightQSHeaderEnabled) return; - int textColor = SettingsLibUtilsProvider.getColorAttrDefaultColor(android.R.attr.textColorPrimary, mContext); + int textColor = getColorAttrDefaultColor(mContext, android.R.attr.textColorPrimary); ((TextView) mView.findViewById(mContext.getResources().getIdentifier("clock", "id", mContext.getPackageName()))).setTextColor(textColor); ((TextView) mView.findViewById(mContext.getResources().getIdentifier("date", "id", mContext.getPackageName()))).setTextColor(textColor); diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ThemeManager_14.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ThemeManager_14.java index 9687e6658..d16f2a6c7 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ThemeManager_14.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ThemeManager_14.java @@ -15,6 +15,7 @@ import static de.robv.android.xposed.XposedHelpers.setObjectField; import static sh.siava.pixelxpert.modpacks.XPrefs.Xprefs; import static sh.siava.pixelxpert.modpacks.utils.SystemUtils.sleep; +import static sh.siava.pixelxpert.modpacks.utils.toolkit.ColorUtils.getColorAttrDefaultColor; import static sh.siava.pixelxpert.modpacks.utils.toolkit.ReflectionTools.hookAllMethodsMatchPattern; import android.annotation.SuppressLint; @@ -224,7 +225,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { if(param.args[1].getClass().getName().contains("ShadeCarrierGroupMobileIconViewModel")) { ModernShadeCarrierGroupMobileViews.add(param.getResult()); if(!isDark) { - int textColor = SettingsLibUtilsProvider.getColorAttrDefaultColor(android.R.attr.textColorPrimary, mContext); + int textColor = getColorAttrDefaultColor(mContext, android.R.attr.textColorPrimary); setMobileIconTint(param.getResult(), textColor); } } @@ -403,7 +404,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { protected void afterHookedMethod(MethodHookParam param) throws Throwable { Resources res = mContext.getResources(); - int textColor = SettingsLibUtilsProvider.getColorAttrDefaultColor(android.R.attr.textColorPrimary, mContext); + int textColor = getColorAttrDefaultColor(mContext, android.R.attr.textColorPrimary); ((TextView) mView.findViewById(res.getIdentifier("clock", "id", mContext.getPackageName()))).setTextColor(textColor); ((TextView) mView.findViewById(res.getIdentifier("date", "id", mContext.getPackageName()))).setTextColor(textColor); diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/UDFPSManager.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/UDFPSManager.java index 28c229c6e..77da90163 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/UDFPSManager.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/UDFPSManager.java @@ -9,6 +9,7 @@ import static de.robv.android.xposed.XposedHelpers.getObjectField; import static de.robv.android.xposed.XposedHelpers.setObjectField; import static sh.siava.pixelxpert.modpacks.XPrefs.Xprefs; +import static sh.siava.pixelxpert.modpacks.utils.toolkit.ColorUtils.getColorAttrDefaultColor; import android.annotation.SuppressLint; import android.content.Context; @@ -102,8 +103,9 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { Object mLockScreenFp = getObjectField(param.thisObject, "mLockScreenFp"); - int mTextColorPrimary = SettingsLibUtilsProvider.getColorAttrDefaultColor( - mContext.getResources().getIdentifier("wallpaperTextColorAccent", "attr", mContext.getPackageName()), mContext); + int mTextColorPrimary = getColorAttrDefaultColor( + mContext, + mContext.getResources().getIdentifier("wallpaperTextColorAccent", "attr", mContext.getPackageName())); setObjectField(param.thisObject, "mTextColorPrimary", mTextColorPrimary); diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/batteryStyles/CircleBatteryDrawable.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/batteryStyles/CircleBatteryDrawable.java index 9a80d85f0..e5548066a 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/batteryStyles/CircleBatteryDrawable.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/batteryStyles/CircleBatteryDrawable.java @@ -10,6 +10,7 @@ import static sh.siava.pixelxpert.modpacks.systemui.BatteryDataProvider.isCharging; import static sh.siava.pixelxpert.modpacks.systemui.BatteryDataProvider.isFastCharging; import static sh.siava.pixelxpert.modpacks.systemui.BatteryDataProvider.isPowerSaving; +import static sh.siava.pixelxpert.modpacks.utils.toolkit.ColorUtils.getColorAttrDefaultColor; import android.animation.ValueAnimator; import android.annotation.SuppressLint; @@ -34,7 +35,6 @@ import androidx.core.graphics.PathParser; import androidx.interpolator.view.animation.FastOutSlowInInterpolator; -import sh.siava.pixelxpert.modpacks.systemui.SettingsLibUtilsProvider; import sh.siava.pixelxpert.modpacks.utils.AlphaConsistantPaint; public class CircleBatteryDrawable extends BatteryDrawable @@ -82,7 +82,7 @@ public CircleBatteryDrawable(Context context, int frameColor) mBatteryPaint.setDither(true); mBatteryPaint.setStyle(STROKE); - mPowerSaveColor = SettingsLibUtilsProvider.getColorAttrDefaultColor(android.R.attr.colorError, context); + mPowerSaveColor = getColorAttrDefaultColor(context, android.R.attr.colorError); setColors(frameColor, frameColor, frameColor); diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/batteryStyles/CircleFilledBatteryDrawable.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/batteryStyles/CircleFilledBatteryDrawable.java index 51bf89b24..8ed4fcac1 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/batteryStyles/CircleFilledBatteryDrawable.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/batteryStyles/CircleFilledBatteryDrawable.java @@ -6,6 +6,7 @@ import static sh.siava.pixelxpert.modpacks.systemui.BatteryDataProvider.isCharging; import static sh.siava.pixelxpert.modpacks.systemui.BatteryDataProvider.isFastCharging; import static sh.siava.pixelxpert.modpacks.systemui.BatteryDataProvider.isPowerSaving; +import static sh.siava.pixelxpert.modpacks.utils.toolkit.ColorUtils.getColorAttrDefaultColor; import android.animation.ValueAnimator; import android.annotation.SuppressLint; @@ -24,8 +25,6 @@ import androidx.core.graphics.ColorUtils; import androidx.interpolator.view.animation.FastOutSlowInInterpolator; -import sh.siava.pixelxpert.modpacks.systemui.SettingsLibUtilsProvider; - public class CircleFilledBatteryDrawable extends BatteryDrawable { private static final int INTRINSIC_DIMENSION = 45; private final ValueAnimator mLevelAlphaAnimator; @@ -43,7 +42,7 @@ public class CircleFilledBatteryDrawable extends BatteryDrawable { @SuppressLint("DiscouragedApi") public CircleFilledBatteryDrawable(Context context) { - mPowerSaveColor = SettingsLibUtilsProvider.getColorAttrDefaultColor(android.R.attr.colorError, context); + mPowerSaveColor = getColorAttrDefaultColor(context, android.R.attr.colorError); mLevelAlphaAnimator = ValueAnimator.ofInt(255, 255, 255, 45); diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/toolkit/ColorUtils.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/toolkit/ColorUtils.java new file mode 100644 index 000000000..0e09eaaa0 --- /dev/null +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/toolkit/ColorUtils.java @@ -0,0 +1,37 @@ +package sh.siava.pixelxpert.modpacks.utils.toolkit; + +import android.content.Context; +import android.content.res.ColorStateList; +import android.content.res.TypedArray; + +import androidx.annotation.ColorInt; + +public class ColorUtils { + @ColorInt + public static int getColorAttrDefaultColor(Context context, int attr) { + return getColorAttrDefaultColor(context, attr, 0); + } + + /** + * Get color styled attribute {@code attr}, default to {@code defValue} if not found. + */ + @ColorInt + public static int getColorAttrDefaultColor(Context context, int attr, @ColorInt int defValue) { + TypedArray ta = context.obtainStyledAttributes(new int[]{attr}); + @ColorInt int colorAccent = ta.getColor(0, defValue); + ta.recycle(); + return colorAccent; + } + + public static ColorStateList getColorAttr(Context context, int attr) { + TypedArray ta = context.obtainStyledAttributes(new int[]{attr}); + //noinspection ReassignedVariable,UnusedAssignment + ColorStateList stateList = null; + try { + stateList = ta.getColorStateList(0); + } finally { + ta.recycle(); + } + return stateList; + } +} From 1ee90b3d928f0f0737aa91d7120aa13f9fe29a1a Mon Sep 17 00:00:00 2001 From: GitHub Date: Thu, 16 May 2024 04:32:47 +0000 Subject: [PATCH 097/162] Version update: Release --- CanaryChangelog.md | 5 +++++ MagiskModBase/module.prop | 4 ++-- MagiskModuleUpdate_Full.json | 4 ++-- MagiskModuleUpdate_Xposed.json | 4 ++-- app/build.gradle | 4 ++-- latestCanary.json | 4 ++-- 6 files changed, 15 insertions(+), 10 deletions(-) diff --git a/CanaryChangelog.md b/CanaryChangelog.md index d49bc4004..35e005d39 100644 --- a/CanaryChangelog.md +++ b/CanaryChangelog.md @@ -1,3 +1,8 @@ +**canary-357** +- A15B2: Fixed various color issues +- A15B2: Fixed battery icon styles +- A15B2: Fixed notification icon container + **canary-356** - Now supporting for KernelSU diff --git a/MagiskModBase/module.prop b/MagiskModBase/module.prop index 5d6bbd266..b746f2427 100644 --- a/MagiskModBase/module.prop +++ b/MagiskModBase/module.prop @@ -1,7 +1,7 @@ id=PixelXpert name=Pixel Xpert -version=canary-356 -versionCode=356 +version=canary-357 +versionCode=357 author=Pixel Xpert Team description=Xposed based module for customizations on Pixel roms. Android 13+ updateJson=https://raw.githubusercontent.com/siavash79/PixelXpert/canary/MagiskModuleUpdate_Xposed.json diff --git a/MagiskModuleUpdate_Full.json b/MagiskModuleUpdate_Full.json index 5ac732095..90b0cc652 100644 --- a/MagiskModuleUpdate_Full.json +++ b/MagiskModuleUpdate_Full.json @@ -1,6 +1,6 @@ { - "version": "canary-356", - "versionCode": 356, + "version": "canary-357", + "versionCode": 357, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/MagiskModuleUpdate_Xposed.json b/MagiskModuleUpdate_Xposed.json index 5ac732095..90b0cc652 100644 --- a/MagiskModuleUpdate_Xposed.json +++ b/MagiskModuleUpdate_Xposed.json @@ -1,6 +1,6 @@ { - "version": "canary-356", - "versionCode": 356, + "version": "canary-357", + "versionCode": 357, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 125a6ee84..22ac34d4e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "sh.siava.pixelxpert" minSdk 33 targetSdk 34 - versionCode 356 - versionName "canary-356" + versionCode 357 + versionName "canary-357" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/latestCanary.json b/latestCanary.json index 51f38cf74..96fa466ec 100644 --- a/latestCanary.json +++ b/latestCanary.json @@ -1,6 +1,6 @@ { - "version": "canary-356", - "versionCode": 356, + "version": "canary-357", + "versionCode": 357, "zipUrl_Xposed": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "zipUrl_Full": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" From 8e3e4a7118fb23b93464dcdaa832b739c0f4f2be Mon Sep 17 00:00:00 2001 From: Sivash Date: Thu, 16 May 2024 09:25:20 +0330 Subject: [PATCH 098/162] CHANGELOG: A15B2: Fixed flashlight and volume sliding tiles --- .github/edit2MakeNewCanary | 2 +- .../modpacks/systemui/FlashLightLevel.java | 109 ++++++++---------- .../modpacks/systemui/VolumeTile.java | 4 +- 3 files changed, 53 insertions(+), 62 deletions(-) diff --git a/.github/edit2MakeNewCanary b/.github/edit2MakeNewCanary index 04ad0604c..65aeddb0b 100644 --- a/.github/edit2MakeNewCanary +++ b/.github/edit2MakeNewCanary @@ -1 +1 @@ -Editing this file will trigger the build script for a new canary.. \ No newline at end of file +Editing this file will trigger the build script for a new canary. \ No newline at end of file diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/FlashLightLevel.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/FlashLightLevel.java index 901d4b33d..5d82e91a5 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/FlashLightLevel.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/FlashLightLevel.java @@ -63,24 +63,26 @@ public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Th Class QSTileViewImplClass = findClass("com.android.systemui.qs.tileimpl.QSTileViewImpl", lpParam.classLoader); hookAllMethods(QSTileViewImplClass, "handleStateChanged", new XC_MethodHook() { - @SuppressLint("DiscouragedApi") + @SuppressLint("ClickableViewAccessibility") @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + protected void afterHookedMethod(MethodHookParam param) { if (!leveledFlashTile || !SystemUtils.supportsFlashLevels()) return; try { Object state = param.args[0]; if (getObjectField(state, "spec").equals("flashlight")) { + SystemUtils.ChangeListener listener = (SystemUtils.ChangeListener) getAdditionalInstanceField(param.thisObject, "flashlightLevelListener"); - if (listener == null) { - View thisView = (View) param.thisObject; + LinearLayout tileView = (LinearLayout) param.thisObject; + if (listener == null) { listener = level -> { Resources res = mContext.getResources(); - TextView label = (TextView) getObjectField(thisView, "label"); + TextView label = (TextView) getObjectField(tileView, "label"); + @SuppressLint("DiscouragedApi") String newLabel = String.format("%s - %s%%", res.getText( res.getIdentifier( @@ -98,66 +100,55 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { setPct(Xprefs.getFloat("flashPCT", 0.5f)); - thisView.setOnTouchListener(new View.OnTouchListener() { - float initX = 0; - float initPct = 0; - boolean moved = false; - - @SuppressLint({"DiscouragedApi", "ClickableViewAccessibility"}) - @Override - public boolean onTouch(View view, MotionEvent motionEvent) { - if (!SystemUtils.supportsFlashLevels() || !leveledFlashTile) - return false; - - switch (motionEvent.getAction()) { - case MotionEvent.ACTION_DOWN: { - initX = motionEvent.getX(); - initPct = initX / view.getWidth(); - return true; - } - case MotionEvent.ACTION_MOVE: { - float deltaMove = Math.abs(initX - motionEvent.getX()) / view.getWidth(); - - if (deltaMove > .03f) { - int newLevel = getFlashlightLevel(motionEvent.getX() / view.getWidth()); - - view.getParent().requestDisallowInterceptTouchEvent(true); - moved = true; - setPct(newLevel * 1f / SystemUtils.getMaxFlashLevel()); - handleFlashLightClick(false, newLevel); - SystemUtils.setFlashlightLevel(Math.round(currentPct * 100f)); - } - return true; + } + tileView.setOnTouchListener(new View.OnTouchListener() { + float initX = 0; + float initPct = 0; + boolean moved = false; + + @SuppressLint({"DiscouragedApi", "ClickableViewAccessibility"}) + @Override + public boolean onTouch(View view, MotionEvent motionEvent) { + if (!SystemUtils.supportsFlashLevels() || !leveledFlashTile) + return false; + + switch (motionEvent.getAction()) { + case MotionEvent.ACTION_DOWN: { + initX = motionEvent.getX(); + initPct = initX / view.getWidth(); + return true; + } + case MotionEvent.ACTION_MOVE: { + float deltaMove = Math.abs(initX - motionEvent.getX()) / view.getWidth(); + + if (deltaMove > .03f) { + int newLevel = getFlashlightLevel(motionEvent.getX() / view.getWidth()); + + view.getParent().requestDisallowInterceptTouchEvent(true); + moved = true; + setPct(newLevel * 1f / SystemUtils.getMaxFlashLevel()); + handleFlashLightClick(false, newLevel); + SystemUtils.setFlashlightLevel(Math.round(currentPct * 100f)); } - case MotionEvent.ACTION_UP: { - if (moved) { - moved = false; - Xprefs.edit().putFloat("flashPCT", currentPct).apply(); - } else { - handleFlashLightClick(true, getFlashlightLevel(currentPct)); - if (QSTileGrid.QSHapticEnabled) - SystemUtils.vibrate(VibrationEffect.EFFECT_CLICK, VibrationAttributes.USAGE_TOUCH); - } - return true; + return true; + } + case MotionEvent.ACTION_UP: { + if (moved) { + moved = false; + Xprefs.edit().putFloat("flashPCT", currentPct).apply(); + } else { + handleFlashLightClick(true, getFlashlightLevel(currentPct)); + if (QSTileGrid.QSHapticEnabled) + SystemUtils.vibrate(VibrationEffect.EFFECT_CLICK, VibrationAttributes.USAGE_TOUCH); } + return true; } - return true; } - }); - } - } - } - catch (Throwable ignored){} - } + return true; + } + }); - @Override - protected void afterHookedMethod(MethodHookParam param) { - if (!leveledFlashTile || !SystemUtils.supportsFlashLevels()) return; - try { - Object state = param.args[0]; - if (getObjectField(state, "spec").equals("flashlight")) { - LinearLayout tileView = (LinearLayout) param.thisObject; setPct(Xprefs.getFloat("flashPCT", 0.5f)); diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/VolumeTile.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/VolumeTile.java index ceee6907b..a1c3f276a 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/VolumeTile.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/VolumeTile.java @@ -131,8 +131,6 @@ private void setupTile(Object tile, View tileView) { setAdditionalInstanceField(tileView, "mParentTile", tile); setVolumeChangeListener(tile, tileView); - - setTouchListener(tileView); } private void setVolumeChangeListener(Object tile, View tileView) { @@ -203,6 +201,8 @@ private int clampPctToSteps(int volPct) { private void updateTileView(LinearLayout tileView, int state) { try { //don't crash systemui if failed + setTouchListener(tileView); + Resources res = mContext.getResources(); mVolumePercentageDrawable.setTint( From fa4b05254722463f3d3e3f83161b6d7df43c6b7b Mon Sep 17 00:00:00 2001 From: GitHub Date: Thu, 16 May 2024 05:58:27 +0000 Subject: [PATCH 099/162] Version update: Release --- CanaryChangelog.md | 3 +++ MagiskModBase/module.prop | 4 ++-- MagiskModuleUpdate_Full.json | 4 ++-- MagiskModuleUpdate_Xposed.json | 4 ++-- app/build.gradle | 4 ++-- latestCanary.json | 4 ++-- 6 files changed, 13 insertions(+), 10 deletions(-) diff --git a/CanaryChangelog.md b/CanaryChangelog.md index 35e005d39..67fb5d7fc 100644 --- a/CanaryChangelog.md +++ b/CanaryChangelog.md @@ -1,3 +1,6 @@ +**canary-358** +- A15B2: Fixed flashlight and volume sliding tiles + **canary-357** - A15B2: Fixed various color issues - A15B2: Fixed battery icon styles diff --git a/MagiskModBase/module.prop b/MagiskModBase/module.prop index b746f2427..04a6de51a 100644 --- a/MagiskModBase/module.prop +++ b/MagiskModBase/module.prop @@ -1,7 +1,7 @@ id=PixelXpert name=Pixel Xpert -version=canary-357 -versionCode=357 +version=canary-358 +versionCode=358 author=Pixel Xpert Team description=Xposed based module for customizations on Pixel roms. Android 13+ updateJson=https://raw.githubusercontent.com/siavash79/PixelXpert/canary/MagiskModuleUpdate_Xposed.json diff --git a/MagiskModuleUpdate_Full.json b/MagiskModuleUpdate_Full.json index 90b0cc652..5477f640f 100644 --- a/MagiskModuleUpdate_Full.json +++ b/MagiskModuleUpdate_Full.json @@ -1,6 +1,6 @@ { - "version": "canary-357", - "versionCode": 357, + "version": "canary-358", + "versionCode": 358, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/MagiskModuleUpdate_Xposed.json b/MagiskModuleUpdate_Xposed.json index 90b0cc652..5477f640f 100644 --- a/MagiskModuleUpdate_Xposed.json +++ b/MagiskModuleUpdate_Xposed.json @@ -1,6 +1,6 @@ { - "version": "canary-357", - "versionCode": 357, + "version": "canary-358", + "versionCode": 358, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 22ac34d4e..cc07e9f64 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "sh.siava.pixelxpert" minSdk 33 targetSdk 34 - versionCode 357 - versionName "canary-357" + versionCode 358 + versionName "canary-358" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/latestCanary.json b/latestCanary.json index 96fa466ec..bb20b5d69 100644 --- a/latestCanary.json +++ b/latestCanary.json @@ -1,6 +1,6 @@ { - "version": "canary-357", - "versionCode": 357, + "version": "canary-358", + "versionCode": 358, "zipUrl_Xposed": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "zipUrl_Full": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" From 760c749cd152f247a09cfa696592c02867d1fa15 Mon Sep 17 00:00:00 2001 From: Sivash Date: Thu, 16 May 2024 13:29:25 +0330 Subject: [PATCH 100/162] CHANGELOG: Volume tile: fixed slide resulting in mute --- .../java/sh/siava/pixelxpert/modpacks/systemui/VolumeTile.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/VolumeTile.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/VolumeTile.java index a1c3f276a..b101fcc1f 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/VolumeTile.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/VolumeTile.java @@ -56,6 +56,7 @@ public class VolumeTile extends XposedModPack { TilePercentageDrawable mVolumePercentageDrawable = null; private static int minVol = -1; private static int maxVol = -1; + private boolean moved = false; public VolumeTile(Context context) { super(context); } @@ -145,7 +146,6 @@ private void setTouchListener(View tileView) { tileView.setOnTouchListener(new View.OnTouchListener() { float initX = 0; float initPct = 0; - boolean moved = false; @SuppressLint({"DiscouragedApi", "ClickableViewAccessibility"}) @Override From 7737041cf14029684f3a6c360211e2935dca912a Mon Sep 17 00:00:00 2001 From: Sivash Date: Fri, 17 May 2024 10:28:11 +0330 Subject: [PATCH 101/162] CHANGELOG: A15B2: Fixed transparent fingerprint icon --- .github/edit2MakeNewCanary | 2 +- .../modpacks/systemui/UDFPSManager.java | 159 ++++++++++++------ 2 files changed, 108 insertions(+), 53 deletions(-) diff --git a/.github/edit2MakeNewCanary b/.github/edit2MakeNewCanary index 65aeddb0b..04ad0604c 100644 --- a/.github/edit2MakeNewCanary +++ b/.github/edit2MakeNewCanary @@ -1 +1 @@ -Editing this file will trigger the build script for a new canary. \ No newline at end of file +Editing this file will trigger the build script for a new canary.. \ No newline at end of file diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/UDFPSManager.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/UDFPSManager.java index 77da90163..1298c5808 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/UDFPSManager.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/UDFPSManager.java @@ -27,6 +27,7 @@ public class UDFPSManager extends XposedModPack { private static final String listenPackage = Constants.SYSTEM_UI_PACKAGE; private static boolean transparentBG = false; private static boolean transparentFG = false; + private Object mDeviceEntryIconView; public UDFPSManager(Context context) { super(context); @@ -37,6 +38,13 @@ public void updatePrefs(String... Key) { if (Xprefs == null) return; transparentBG = Xprefs.getBoolean("fingerprint_circle_hide", false); transparentFG = Xprefs.getBoolean("fingerprint_icon_hide", false); + + switch (Key[0]) + { + case "fingerprint_circle_hide": + case "fingerprint_icon_hide": + setUDFPSGraphics(true); + } } @Override @@ -54,68 +62,115 @@ public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) { } Class LockIconViewControllerClass = findClass("com.android.keyguard.LockIconViewController", lpParam.classLoader); - hookAllMethods(LockIconViewControllerClass, "updateIsUdfpsEnrolled", new XC_MethodHook() { - @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { - if(transparentBG) { - setObjectField( - getObjectField(param.thisObject, "mView"), - "mUseBackground", - false); + if(UdfpsKeyguardViewClass == null) //A15 Beta 2 - Compose + { + Class DeviceEntryIconViewClass = findClass("com.android.systemui.keyguard.ui.view.DeviceEntryIconView", lpParam.classLoader); + Class ForegroundIconViewModelClass = findClass("com.android.systemui.keyguard.ui.viewmodel.DeviceEntryForegroundViewModel$ForegroundIconViewModel", lpParam.classLoader); + + hookAllConstructors(DeviceEntryIconViewClass, new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + mDeviceEntryIconView = param.thisObject; - callMethod(getObjectField(param.thisObject, "mView"), "updateColorAndBackgroundVisibility"); + setUDFPSGraphics(false); } - } - }); - - hookAllConstructors(UdfpsKeyguardViewClass, new XC_MethodHook() { - @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { - try { - hookAllMethods(getObjectField(param.thisObject, "mLayoutInflaterFinishListener").getClass(), - "onInflateFinished", - new XC_MethodHook() { - @Override - protected void afterHookedMethod(MethodHookParam param1) throws Throwable { - removeUDFPSGraphics(param.thisObject); - } - }); - } catch (Throwable ignored) { - }//A13 - } - }); + }); + + hookAllConstructors(ForegroundIconViewModelClass, new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + if(transparentBG && !transparentFG) + { + @SuppressLint("DiscouragedApi") + int tint = getColorAttrDefaultColor( + mContext, + mContext.getResources().getIdentifier("wallpaperTextColorAccent", "attr", mContext.getPackageName())); - hookAllMethods(UdfpsKeyguardViewClass, "onFinishInflate", new XC_MethodHook() { //A13 - @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { - removeUDFPSGraphics(param.thisObject); - } - }); + setObjectField(param.thisObject, "tint", tint); + } + } + }); + } + else + { + hookAllMethods(LockIconViewControllerClass, "updateIsUdfpsEnrolled", new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + if(transparentBG) { + setObjectField( + getObjectField(param.thisObject, "mView"), + "mUseBackground", + false); + + callMethod(getObjectField(param.thisObject, "mView"), "updateColorAndBackgroundVisibility"); + } + } + }); + + hookAllConstructors(UdfpsKeyguardViewClass, new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + try { + hookAllMethods(getObjectField(param.thisObject, "mLayoutInflaterFinishListener").getClass(), + "onInflateFinished", + new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param1) throws Throwable { + removeUDFPSGraphicsLegacy(param.thisObject); + } + }); + } catch (Throwable ignored) { + }//A13 + } + }); - hookAllMethods(UdfpsKeyguardViewClass, - "updateColor", new XC_MethodHook() { - @SuppressLint("DiscouragedApi") - @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - if (!transparentBG || - !getBooleanField(param.thisObject, "mFullyInflated")) - return; + hookAllMethods(UdfpsKeyguardViewClass, "onFinishInflate", new XC_MethodHook() { //A13 + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + removeUDFPSGraphicsLegacy(param.thisObject); + } + }); - Object mLockScreenFp = getObjectField(param.thisObject, "mLockScreenFp"); + hookAllMethods(UdfpsKeyguardViewClass, + "updateColor", new XC_MethodHook() { + @SuppressLint("DiscouragedApi") + @Override + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + if (!transparentBG || + !getBooleanField(param.thisObject, "mFullyInflated")) + return; - int mTextColorPrimary = getColorAttrDefaultColor( - mContext, - mContext.getResources().getIdentifier("wallpaperTextColorAccent", "attr", mContext.getPackageName())); + Object mLockScreenFp = getObjectField(param.thisObject, "mLockScreenFp"); - setObjectField(param.thisObject, "mTextColorPrimary", mTextColorPrimary); + int mTextColorPrimary = getColorAttrDefaultColor( + mContext, + mContext.getResources().getIdentifier("wallpaperTextColorAccent", "attr", mContext.getPackageName())); - callMethod(mLockScreenFp, "invalidate"); - param.setResult(null); - } - }); + setObjectField(param.thisObject, "mTextColorPrimary", mTextColorPrimary); + + callMethod(mLockScreenFp, "invalidate"); + param.setResult(null); + } + }); + } + } + + /** @noinspection ConstantValue*/ + private void setUDFPSGraphics(boolean force) { + if(mDeviceEntryIconView == null) return; + + if(transparentFG || force) + { + ((ImageView) getObjectField(mDeviceEntryIconView, "iconView")) + .setImageAlpha(transparentFG ? 0 : 255); + } + if(transparentFG || transparentBG || force) { + ((ImageView) getObjectField(mDeviceEntryIconView, "bgView")) + .setImageAlpha(transparentFG || transparentBG ? 0 : 255); + } } - private void removeUDFPSGraphics(Object object) { + private void removeUDFPSGraphicsLegacy(Object object) { try { if (transparentBG) { From 354900e9d454cdd3b0d4adb5bec842f27ad7e526 Mon Sep 17 00:00:00 2001 From: GitHub Date: Fri, 17 May 2024 07:01:07 +0000 Subject: [PATCH 102/162] Version update: Release --- CanaryChangelog.md | 4 ++++ MagiskModBase/module.prop | 4 ++-- MagiskModuleUpdate_Full.json | 4 ++-- MagiskModuleUpdate_Xposed.json | 4 ++-- app/build.gradle | 4 ++-- latestCanary.json | 4 ++-- 6 files changed, 14 insertions(+), 10 deletions(-) diff --git a/CanaryChangelog.md b/CanaryChangelog.md index 67fb5d7fc..5077f5fb1 100644 --- a/CanaryChangelog.md +++ b/CanaryChangelog.md @@ -1,3 +1,7 @@ +**canary-359** +- A15B2: Fixed transparent fingerprint icon +- Volume tile: fixed slide resulting in mute + **canary-358** - A15B2: Fixed flashlight and volume sliding tiles diff --git a/MagiskModBase/module.prop b/MagiskModBase/module.prop index 04a6de51a..7ed64fd37 100644 --- a/MagiskModBase/module.prop +++ b/MagiskModBase/module.prop @@ -1,7 +1,7 @@ id=PixelXpert name=Pixel Xpert -version=canary-358 -versionCode=358 +version=canary-359 +versionCode=359 author=Pixel Xpert Team description=Xposed based module for customizations on Pixel roms. Android 13+ updateJson=https://raw.githubusercontent.com/siavash79/PixelXpert/canary/MagiskModuleUpdate_Xposed.json diff --git a/MagiskModuleUpdate_Full.json b/MagiskModuleUpdate_Full.json index 5477f640f..eb04f806b 100644 --- a/MagiskModuleUpdate_Full.json +++ b/MagiskModuleUpdate_Full.json @@ -1,6 +1,6 @@ { - "version": "canary-358", - "versionCode": 358, + "version": "canary-359", + "versionCode": 359, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/MagiskModuleUpdate_Xposed.json b/MagiskModuleUpdate_Xposed.json index 5477f640f..eb04f806b 100644 --- a/MagiskModuleUpdate_Xposed.json +++ b/MagiskModuleUpdate_Xposed.json @@ -1,6 +1,6 @@ { - "version": "canary-358", - "versionCode": 358, + "version": "canary-359", + "versionCode": 359, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index cc07e9f64..87ca86bc2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "sh.siava.pixelxpert" minSdk 33 targetSdk 34 - versionCode 358 - versionName "canary-358" + versionCode 359 + versionName "canary-359" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/latestCanary.json b/latestCanary.json index bb20b5d69..f589af19f 100644 --- a/latestCanary.json +++ b/latestCanary.json @@ -1,6 +1,6 @@ { - "version": "canary-358", - "versionCode": 358, + "version": "canary-359", + "versionCode": 359, "zipUrl_Xposed": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "zipUrl_Full": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" From 2ab3b88a854380cc923e1f3e6613beff6cc7ba0f Mon Sep 17 00:00:00 2001 From: Siavash Date: Sat, 18 May 2024 13:53:38 +0330 Subject: [PATCH 103/162] Code cleanup --- .../pixelxpert/modpacks/systemui/UDFPSManager.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/UDFPSManager.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/UDFPSManager.java index 1298c5808..242174f62 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/UDFPSManager.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/UDFPSManager.java @@ -25,6 +25,9 @@ @SuppressWarnings("RedundantThrows") public class UDFPSManager extends XposedModPack { private static final String listenPackage = Constants.SYSTEM_UI_PACKAGE; + + private static final int TRANSPARENT = 0; + private static final int OPAQUE = 255; private static boolean transparentBG = false; private static boolean transparentFG = false; private Object mDeviceEntryIconView; @@ -60,7 +63,6 @@ public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) { if (UdfpsKeyguardViewClass == null) { //A13 UdfpsKeyguardViewClass = findClassIfExists("com.android.systemui.biometrics.UdfpsKeyguardView", lpParam.classLoader); } - Class LockIconViewControllerClass = findClass("com.android.keyguard.LockIconViewController", lpParam.classLoader); if(UdfpsKeyguardViewClass == null) //A15 Beta 2 - Compose { @@ -93,6 +95,8 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { } else { + Class LockIconViewControllerClass = findClass("com.android.keyguard.LockIconViewController", lpParam.classLoader); + hookAllMethods(LockIconViewControllerClass, "updateIsUdfpsEnrolled", new XC_MethodHook() { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { @@ -162,11 +166,15 @@ private void setUDFPSGraphics(boolean force) { if(transparentFG || force) { ((ImageView) getObjectField(mDeviceEntryIconView, "iconView")) - .setImageAlpha(transparentFG ? 0 : 255); + .setImageAlpha(transparentFG + ? TRANSPARENT + : OPAQUE); } if(transparentFG || transparentBG || force) { ((ImageView) getObjectField(mDeviceEntryIconView, "bgView")) - .setImageAlpha(transparentFG || transparentBG ? 0 : 255); + .setImageAlpha(transparentFG || transparentBG + ? TRANSPARENT + : OPAQUE); } } From f3abf76a51a167c6b461eb895e69389b7928aeef Mon Sep 17 00:00:00 2001 From: Crowdin Bot Date: Sun, 19 May 2024 00:50:22 +0000 Subject: [PATCH 104/162] New Crowdin translations by GitHub Action --- app/src/main/res/values-fr-rFR/strings.xml | 58 +++++++-------- app/src/main/res/values-ru-rRU/strings.xml | 34 ++++----- app/src/main/res/values-tr-rTR/strings.xml | 82 +++++++++++----------- 3 files changed, 87 insertions(+), 87 deletions(-) diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index 0cdf77609..d303b2403 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -1,7 +1,7 @@ - Thème d\'icone alternatif + Icône avec thème alternatif Personnalisations pour les appareils Google Pixel Volume des médias Changer de profil d\'application @@ -56,7 +56,7 @@ Effet de profondeur du fond d\'écran Intégration dynamique du fond d\'écran avec l\'horloge Opacité du fond d\'écran - Également sur « toujours affiché » + Également sur \"toujours à l\'écran\" Le modèle IA est téléchargé sur l\'appareil Le modèle IA n\'est pas (encore) disponible sur l\'appareil Désactiver l\'animation des indices de déverrouillage @@ -321,7 +321,7 @@ Panneau de volume Délai de fermeture du panneau de volume - Profil de travail/clonage + Profil de travail/cloné Appuyez longuement sur la barre d\'état pour changer de profil Afficher une icône sur la barre d\'état lorsque la commutation est disponible @@ -331,12 +331,12 @@ Erreur de récupération des données de chargement Vibrer lors du décrochage d’un appel entrant - Vibrer lors du raccrochage + Vibrer lorsque l\'appel est terminé L’intensité de vibration est celle définie par les paramètres de notifications de l’appareil Supprimer l\'annonce d\'enregistrement d\'appel S\'applique uniquement à l\'application téléphonique Google avec l\'enregistrement des appels activé - Forcer l’utilisation de la police Google Sans dans tout l’appareil + Forcer l’utilisation de la police Google Sans dans le système Activer l’utilisation de polices personnalisées Police des titres/corps Style des icônes @@ -364,9 +364,9 @@ 70% de la taille de l’horloge Avant l’horloge (100%) - Après l’horloge (70%) + Avant l’horloge (70%) Après l’horloge (100%) - Avant l’horloge (70%) + Après l’horloge (70%) Selon les paramètres de l’appareil Forcer l’icône LTE @@ -376,11 +376,11 @@ minute(s) Type de statistiques Heure de début - Jour de début de semaine - Jour de début du mois + Premier jour de la semaine + Premier jour du mois Incompatible - Votre ROM n’est pas ciblée par ce module. Vous pouvez continuer à l’utiliser, mais certaines options ne fonctionneront pas comme prévu.\n\nLMerci de ne pas signaler de bugs. + Votre ROM actuelle n\'est pas compatible avec ce module. Vous pouvez continuer à l\'utiliser, mais certaines options (ou toutes) pourraient ne pas fonctionner comme prévu\n\nVeuillez ne pas signaler les bugs J’ai compris Avis @@ -403,8 +403,8 @@ Redémarrer l’interface système Mise à jour de l’application Options du moniteur - Préférences des statistiques réseau - En plus du texte normal, des variables dynamiques sont également disponibles, comme la date, l\'utilisation des données et la température :\n\n$G\<format\>  : date grégorienne, basée sur le format*\n$P<format>  : date persane, basée sur le format*\n$Nrx  : nombre total de téléchargements. dans la période spécifiée ** ***\n$Ntx: Total des téléchargements dans la période spécifiée ** ***\n$Nall : Trafic total dans la période spécifiée ** ***\n$Nssid : Nom SSID WiFi (le cas échéant)\n\n$T\<format\>[interval] : Température; \nle format peut être b (pour la batterie), c (pour le CPU), g (pour le GPU) et s (pour le skin) \nEnfin, il existe un nombre OPTIONNEL d\'intervalle de mise à jour en secondes (par défaut : 60 secondes)\n\n*pour le format documentation, recherchez \"Java Date Format\"\n**Vous pouvez spécifier la période des statistiques dans PixelXpert/Menu Divers/Paramètres des statistiques réseau\n***Si vous remplacez $N par $Nc , vous obtiendrez des statistiques de données mobiles (par exemple $Ncrx au lieu de Nrx ) + Préférences des statistiques du réseau + En plus du texte normal, des variables dynamiques sont également disponibles, comme la date, l\'utilisation des données et la température :\n\n$G\<format\>  : Date grégorienne, basée sur le format*\n$P<format>  : Date persane, basée sur le format*\n$Nrx  : Nombre total de téléchargements dans la période spécifiée ** ***\n$Ntx: Total des envois de données dans la période spécifiée ** ***\n$Nall : Trafic total dans la période spécifiée ** ***\n$Nssid : Nom SSID WiFi (le cas échéant)\n\n$T\<format\>[interval] : Température; \nle format peut être b (pour la batterie), c (pour le CPU), g (pour le GPU) et s (pour le skin) \nEnfin, il existe un nombre OPTIONNEL d\'intervalle de mise à jour en secondes (par défaut : 60 secondes)\n\n*Pour la documentation sur le format, recherchez \"Java Date Format\"\n**Vous pouvez spécifier la période des statistiques dans PixelXpert/Menu Divers/Paramètres des statistiques réseau\n***Si vous remplacez $N par $Nc , vous obtiendrez des statistiques sur les données mobiles (par exemple $Ncrx au lieu de Nrx ) Mises à jour Mise à jour téléchargée Installer @@ -430,35 +430,35 @@ Langues (désactiver puis réactiver le thème sombre pour appliquer) Plus de gestes pour la barre de navigation - Swiper vers le haut pour forcer l’arrêt de l’application au premier plan - Action de swipe depuis la gauche de la barre de navigation - Action de swipe depuis la droite de la barre de navigation - Largeur de la zone de swipe gauche (%) - Largeur de la zone de swipe droit (%) - Action de swipe avec deux doigts - Seuil de hauteur pour le swipe + Balayer vers le haut pour forcer l’arrêt de l’application au premier plan + Balayage depuis la gauche de la barre de navigation + Balayage depuis la droite de la barre de navigation + Largeur de la zone de balayage gauche (%) + Largeur de la zone de balayage droit (%) + Balayage avec deux doigts + Hauteur de déclenchement minimale des actions de balayage vers le haut Rien Capture d’écran Forcer l’arrêt de l’application au premier plan - Monter/cacher les notifications - Activer/désactiver le mode à une main - Repos + Montrer/cacher les notifications + Basculer en mode à une main + En veille Recherche… - Clair - Entrée d\'historique + Nettoyé + Saisie de l\'historique Plus - Histoire claire + Supprimer l\'historique Aucun résultat Forfaits connectés Paquet réactif - Package non activé dans LSposed - Le colis ne répond pas + Paquet non activé dans LSposed + Le paquet ne répond pas Paquet introuvable Chargement%s - Package activé avec succès - L\'activation du package a échoué + Paquet activé avec succès + L\'activation du paquet a échoué Activer dans LSPosed Le paquet ne peut pas être lancé Lancer l\'application diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 1bc7eb0f2..96d0f5e1f 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -50,24 +50,24 @@ Скрыть SSID Таймаут бездействия Максимальное количество клиентов - Hotspot connectivity issues workaround - Allow non-\"pre-approved\" clients to connect seamlessly + Проблемы подключения к точке доступа + Разрешить не \"предварительно одобренные\" клиенты для бесшовного подключения - Depth effect wallpaper - Dynamically integrate wallpaper\'s foreground with the clock - Wallpaper foreground opacity - Also on \"always on display\" - AI model is downloaded on the device - AI model isn\'t available on the device (yet) + Обои с эффектом глубины + Динамическая интеграция переднего плана обоев с часами + Прозрачность переднего плана обоев + Также на \"Always on display\" + Модель ИИ загружена на устройство + Модель ИИ недоступна на устройстве (пока) Отключить анимацию подсказки разблокировки Опции экрана блокировки Удалить аватар пользователя (многопользовательский режим) Скрыть фон под индикатором отпечатков пальцев Круг вокруг значка отпечатка пальца активен Круг вокруг значка отпечатка пальца будет скрыт - Remove foreground icon from under-display fingerprint - Fingerprint icon is active - Fingerprint icon will be hidden + Скрыть фон под индикатором отпечатков пальцев + Значок отпечатка пальца активен + Значок отпечатка пальца будет скрыт Свой текст на экран блокировки Настройка своего текста Свой текст не установлен @@ -172,14 +172,14 @@ Толщина строки Индикатор зарядки Индикатор быстрой зарядки - Indicate power save + Индикатор энергосбережения Диапазон уровней предупреждения Установите оба значения в 0, чтобы отключить цвета на основе уровней Цвет критического уровня Цвет уровня предупреждения Цвет зарядки Цвет быстрой зарядки - Power Save color + Цвет экономии энергии Цвета оттенков между диапазоном Цветной индикатор батареи при зарядке Сегодня @@ -294,7 +294,7 @@ Всегда включать AOD во время зарядки устройства Когда экран выключен… Пользовательские тематические иконки - Add PixelXpert to settings items + Добавить PixelXpert в настройки элементов Пользовательские значки отключены Пользовательские значки включены Долгое нажатие клавишь громкости для переключения треков @@ -387,9 +387,9 @@ Приложение будет закрыто. Вы можете открыть его снова, нажав на новый значок ОК - Attention - Use a suitable lockscreen wallpaper where the foreground elements do not obstruct the entire clock on your lock screen, ensuring both visual appeal and functional clarity on your lock screen.\n\nNote: %s. - OK + Предупреждение + Используйте подходящие обои экрана блокировки, где элементы переднего плана не препятствуют часам на экране блокировки, обеспечивающие визуальную привлекательность и функциональность на экране блокировки.\n\nПримечание: %s. + ОК Для применения настроек требуется перезагрузка системы diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index 19b4cf002..3a8961b51 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -8,14 +8,14 @@ Gizle (Varsayılan) Varsayılan boyutun %\'si (Varsayılan) - Genel ayarlar + Genel Ayarlar Açık Kapalı Uygulanması için SystemUI\'nin yeniden başlatılması gerekir Uygulanması için yeniden başlatma gerekir daha fazla alan daha az alan - Mevcut sürüm: %s + Mevcut Sürüm: %s Güncellemeler Bu kanal en son güncellemeler hakkında bildirim gösterir. Güncelleme mevcut @@ -25,27 +25,27 @@ Güncelleme Çeşitli Hakkında - Güncellemeleri kontrol et - Güncellemeleri otomatik olarak kontrol et - Yeni sürümleri arada bir kontrol et - Güncellemeleri yalnızca WiFi üzerinden kontrol et - Güncellemeleri yalnızca WiFi\'ye bağlıyken arka planda kontrol edin - GitHub deposu - Telegram grubu + Güncellemeleri Denetle + Güncellemeleri Otomatik Olarak Denetle + Yeni sürümleri arada bir denetle + Güncellemeleri Yalnızca WiFi Üzerinden Denetle + Güncellemeleri yalnızca WiFi\'ye bağlıyken arka planda denetle + GitHub Deposu + Telegram Grubu Kullanım Wiki sayfasını aç - Kendi dilinize çevirin + Dil Çevirisi Yap %s\'yi kendi dilinize çevirmemize yardımcı olun - Kilit ekranı - Durum çubuğu - Gezinme çubuğu + Kilit Ekranı + Durum Çubuğu + Gezinme Çubuğu Telefon Çeşitli - QS paneli + QS Paneli Temalandırma - Paket yöneticisi - Taşınabilir hotspot + Paket Yöneticisi + Taşınabilir Hotspot SSID\'yi Gizle Hareketsizlik zaman aşımı @@ -60,7 +60,7 @@ AI modeli cihaza indirildi AI modeli cihazda mevcut değil (henüz) Kilit açma ipucu animasyonunu devre dışı bırak - Kilit ekranı seçenekleri + Kilit Ekranı Ayarları Kullanıcı avatarını kaldır (çoklu kullanıcı modu) Ekran altı parmak izindeki arka plan çemberini kaldır Parmak izi simgesinin etrafındaki daire etkin @@ -68,14 +68,14 @@ Ekran altı parmak izindeki arka plan çemberini kaldır Parmak izi simgesi etkin Parmak izi simgesi gizlenecek - Kilit ekranında özel metin + Kilit Ekranında Özel Metin Operatör metnini yapılandır - Ekranın üst kısmı Operatör metni değişmedi Özel operatör metni Özel operatör metni Saat alanı özel metni Keyguard duvar kağıdı karartması - Alt alan kısayolları + Alt Alan Kısayolları Simgelerin etrafındaki daireyi kaldır Sol kısayol Sağ kısayol @@ -92,10 +92,10 @@ Kolay kilit açma (Pin/Şifre) İlk seferde işe yaramadıysa, tekrar deneyin Kilit ekranında şarj bilgisi - \"Kilit Ekranını Özelleştir\" sekmesini gösterme - İngiliz ölçü birimlerini kullan + \"Kilit Ekranını Özelleştir\" çubuğunu gösterme + İngiliz Ölçü Birimlerini Kullan - Uyku için çift dokunun + Çift dokunuşla ekranı kapat Bir pil stili seçin Pil yüzdesini göster Şarj etme animasyonunu göster @@ -120,7 +120,7 @@ Saat konumu AM/PM Stili Saniyeleri göster - Tarih ayarları + Tarih Ayarları Haftanın gününü saatle birlikte göster Gelişmiş (yukarıdaki ayarın yerini alacaktır!) Saat sonrası öncesi metin @@ -154,12 +154,12 @@ Sadece indirme Sadece yükleme Bit/s olarak göster - Durum Çubuğu Seçenekleri + Durum Çubuğu Ayarları Çift tonlu pil ölçeri etkinleştir Açık (yalnızca portre simgesiyle çalışır) Okunmamış mesaj sayısını göster Durum çubuğu yüksekliği (uygulamak için ekranı döndürün) - Durum çubuğu Dolgusu + Durum çubuğu dolgusu Değerlerin min/maks olarak ayarlanması cihaz varsayılanı ile eşdeğerdir Pil çubuğu ayarları Pil simgesi ayarları @@ -193,7 +193,7 @@ Cuma Cumartesi - QS Panel altbilgisindeki yapı numarası + QS Panel Alt Bilgisindeki Yapı Numarası QS panelinde yapı metin numarasını özelleştir Özel metin girin Tamamen kaldırmak için boş bırakın @@ -208,7 +208,7 @@ Hızlı aşağı çekme genişliği Durum çubuğundan hızlı QS paneli çek Hızlı çekilebilen taraf - QS açılır menüsü + QS Açılır Menüsü Tek kaydırmayla hızlı ayarları kapat QS kutucuğuna dokununca titreştir Sistem dokunmatik titreşim ayarları tarafından tanımlanan yoğunluk @@ -224,12 +224,12 @@ İnternet Kutucuğu Ayrı WiFi & Veri kutucukları kullan Tek bir İnternet kutucuğu kullan - Parlaklık kaydırıcı seçenekleri + Parlaklık Kaydırıcı Ayarları QQS Panelinde parlaklık kaydırıcısını göster Parlaklık kaydırıcısını en alta taşı Parlaklık kaydırıcısını QS\'den gizle Parlaklık kaydırıcısında kalın bir iz kullan - QS kutucuk Seçenekleri + QS Kutucuk Ayarları QS kutucuk temaları Ses kutucuğunu sessiz açma değeri @@ -238,7 +238,7 @@ Ekranın sağ tarafı Hareket yüksekliği Hareketle gezinme - Gezinme çubuğu sekmesi + Gezinme çubuğu Standart boyuta göre genişlik Standart boyuta göre yükseklik 3 Tuşlu gezinme @@ -250,7 +250,7 @@ Görev çubuğunu son kullanılanlar çubuğuna dönüştür Görev çubuğu yüksekliği Görev çubuğu köşe kavisi - Vurgu renkli hareket sekmesi + Vurgu renkli hareket çubuğu Hareketler için klavye boşluğu Klavye üzerindeki boşluğu azalt Android Görev Çubuğu @@ -292,13 +292,13 @@ [Her zaman açık ekran kapalıyken] Telefonu açmak ortam ekranını gösterir Şarj olurken AOD\'yi zorla Cihaz şarj olurken her zaman açık ekranı etkin tut (AOD) - Ekran kapalıyken... + Ekran Kapalıyken… Özel temalı simgeler PixelXpert\'i ayar öğelerine ekle Özel simgeler devre dışı Özel simgeler etkin Müzik atlamak için Ses düğmelerine uzun basın - Bildirim seçenekleri + Bildirim Ayarları Tümünü genişlet/daralt düğmeleri ekle Devam eden bildirimleri asla reddetme Uyarı bildirim süresi @@ -309,7 +309,7 @@ Önemli: LSPosed içinde kaydırmayı devre dışı bırakmak istediğiniz uygulamaları etkinleştirmeniz GEREKİR Milisaniye Saat - Sistem zamanı + Sistem Zamanı Zamanı senkronize etmek için NTP kullan Zaman senkronizasyon aralığı NTP sunucuları @@ -318,7 +318,7 @@ Zaman başarıyla senkronize edildi NTP sunucusu bağlantı hatası! - Ses paneli + Ses Paneli Ses seviyesi iletişim kutusu zaman aşımı Çalışma/Klon Profili @@ -380,7 +380,7 @@ Ayın başlangıç günü Uyumsuz - Mevcut ROM\'unuz bu modülün doğrudan hedefi değildir. Kullanmaya devam edebilirsiniz, ancak bazı (veya tüm) seçenekler amaçlandığı gibi çalışmayabilir\n\nLütfen hataları bildirmeyin + Mevcut ROM\'unuz bu modülün doğrudan hedefi değildir. Kullanmaya devam edebilirsiniz, ancak bazı (veya tüm) ayarlar amaçlandığı gibi çalışmayabilir.\n\nLütfen hataları bildirmeyin. Anladım Uyarı @@ -399,10 +399,10 @@ Ayarları dosyaya aktar... Yeniden Başlat Sistemi yeniden başlat - Hızlı yeniden başlat + Hızlıca yeniden başlat SystemUI\'yi Yeniden Başlat Güncellemeler - Monitör seçenekleri + Monitör Ayarları Ağ istatistikleri ayarları Normal metne ek olarak, Tarih, Veri kullanımı ve Sıcaklık gibi dinamik değişkenler de mevcuttur:\n\n$G\<format\> : Miladi tarih, formata göre*\n$P<format> : Farsça tarih, formata göre*\n$Nrx : Belirtilen dönemdeki Toplam İndirme ** ***\n$Ntx: Belirtilen dönemdeki Toplam Yüklemeler ** ***\n$Nall : Belirtilen dönemdeki Toplam Trafik ** ***\n$Nssid : WiFi SSID adı (varsa)\n\n$T\<format\>[interval] : Sıcaklık; \nformat b (pil için), c (CPU için), g (GPU için) ve s (cilt için) olabilir \nSon olarak, saniye cinsinden OPSİYONEL güncelleme aralığı sayısı vardır (varsayılan: 60 saniye)\n\n*biçim belgeleri için \"Java Tarih Biçimi\"\n**İstatistik dönemini PixelXpert/Çeşitli menü/Ağ İstatistikleri Ayarları\n***\'da belirtebilirsiniz. $N yerine $Nc koyarsanız mobil veri istatistikleri elde edersiniz (örn. g. Nrx yerine $Ncrx) Güncellemeler @@ -410,12 +410,12 @@ Kurmak için buraya dokunun Güncelleme indirilemedi Lütfen daha sonra tekrar deneyin - Güncelleme kanalı + Güncelleme Kanalı Stabil Paket Türü Tam Sadece xPosed - Yüklü sürüm: + Yüklü Sürüm: Güncel sürüm: ROOT ERİŞİMİ VERİLMEDİ! Yeniden başlatma bekleniyor @@ -451,7 +451,7 @@ Geçmişi temizle Sonuç yok - Bağlı paketler + Bağlı Paketler Paket duyarlılığı Paket LSposed\'da etkin değil Paket yanıt vermiyor From 90e49c22a7e1058e1ca2d4db1b5dbf28fb76003e Mon Sep 17 00:00:00 2001 From: Siavash Date: Sun, 19 May 2024 10:58:22 +0330 Subject: [PATCH 105/162] CHANGELOG: Double tap to sleep: fixed QS getting stuck on the screen --- .../pixelxpert/modpacks/systemui/ScreenGestures.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ScreenGestures.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ScreenGestures.java index e13ad31d2..01942e038 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ScreenGestures.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ScreenGestures.java @@ -301,7 +301,12 @@ protected void beforeHookedMethod(MethodHookParam param1) throws Throwable { } if (!holdScreenTorchEnabled) return; + if ((action == ACTION_DOWN || action == ACTION_MOVE)) { + if(doubleTap || turnedByTTT) //we really don't want to see swipe gestures during TTT + { + ev.setAction(ACTION_DOWN); + } if (doubleTap && !SystemUtils.isFlashOn() && uptimeMillis() - ev.getDownTime() > HOLD_DURATION) { turnedByTTT = true; @@ -321,9 +326,6 @@ protected void beforeHookedMethod(MethodHookParam param1) throws Throwable { } }).start(); } - if (turnedByTTT) { - ev.setAction(ACTION_DOWN); - } } else if (turnedByTTT) { turnOffTTT(); } From 99e6d05428fd8dba4ebe66011b8de318ece63f76 Mon Sep 17 00:00:00 2001 From: Siavash Date: Sun, 19 May 2024 10:58:22 +0330 Subject: [PATCH 106/162] CHANGELOG: Double tap to sleep: fixed QS getting randomly stuck on the screen --- .github/edit2MakeNewCanary | 2 +- .../pixelxpert/modpacks/systemui/ScreenGestures.java | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/edit2MakeNewCanary b/.github/edit2MakeNewCanary index 04ad0604c..65aeddb0b 100644 --- a/.github/edit2MakeNewCanary +++ b/.github/edit2MakeNewCanary @@ -1 +1 @@ -Editing this file will trigger the build script for a new canary.. \ No newline at end of file +Editing this file will trigger the build script for a new canary. \ No newline at end of file diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ScreenGestures.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ScreenGestures.java index e13ad31d2..01942e038 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ScreenGestures.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ScreenGestures.java @@ -301,7 +301,12 @@ protected void beforeHookedMethod(MethodHookParam param1) throws Throwable { } if (!holdScreenTorchEnabled) return; + if ((action == ACTION_DOWN || action == ACTION_MOVE)) { + if(doubleTap || turnedByTTT) //we really don't want to see swipe gestures during TTT + { + ev.setAction(ACTION_DOWN); + } if (doubleTap && !SystemUtils.isFlashOn() && uptimeMillis() - ev.getDownTime() > HOLD_DURATION) { turnedByTTT = true; @@ -321,9 +326,6 @@ protected void beforeHookedMethod(MethodHookParam param1) throws Throwable { } }).start(); } - if (turnedByTTT) { - ev.setAction(ACTION_DOWN); - } } else if (turnedByTTT) { turnOffTTT(); } From 46ed4dcc47b0115c169054dbc7fc5ffbfb4b6da9 Mon Sep 17 00:00:00 2001 From: GitHub Date: Sun, 19 May 2024 07:33:13 +0000 Subject: [PATCH 107/162] Version update: Release --- CanaryChangelog.md | 4 ++++ MagiskModBase/module.prop | 4 ++-- MagiskModuleUpdate_Full.json | 4 ++-- MagiskModuleUpdate_Xposed.json | 4 ++-- app/build.gradle | 4 ++-- latestCanary.json | 4 ++-- 6 files changed, 14 insertions(+), 10 deletions(-) diff --git a/CanaryChangelog.md b/CanaryChangelog.md index 5077f5fb1..69fc7c7a4 100644 --- a/CanaryChangelog.md +++ b/CanaryChangelog.md @@ -1,3 +1,7 @@ +**canary-360** +- Double tap to sleep: fixed QS getting randomly stuck on the screen +- Double tap to sleep: fixed QS getting stuck on the screen + **canary-359** - A15B2: Fixed transparent fingerprint icon - Volume tile: fixed slide resulting in mute diff --git a/MagiskModBase/module.prop b/MagiskModBase/module.prop index 7ed64fd37..a0c04d19a 100644 --- a/MagiskModBase/module.prop +++ b/MagiskModBase/module.prop @@ -1,7 +1,7 @@ id=PixelXpert name=Pixel Xpert -version=canary-359 -versionCode=359 +version=canary-360 +versionCode=360 author=Pixel Xpert Team description=Xposed based module for customizations on Pixel roms. Android 13+ updateJson=https://raw.githubusercontent.com/siavash79/PixelXpert/canary/MagiskModuleUpdate_Xposed.json diff --git a/MagiskModuleUpdate_Full.json b/MagiskModuleUpdate_Full.json index eb04f806b..38b60e816 100644 --- a/MagiskModuleUpdate_Full.json +++ b/MagiskModuleUpdate_Full.json @@ -1,6 +1,6 @@ { - "version": "canary-359", - "versionCode": 359, + "version": "canary-360", + "versionCode": 360, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/MagiskModuleUpdate_Xposed.json b/MagiskModuleUpdate_Xposed.json index eb04f806b..38b60e816 100644 --- a/MagiskModuleUpdate_Xposed.json +++ b/MagiskModuleUpdate_Xposed.json @@ -1,6 +1,6 @@ { - "version": "canary-359", - "versionCode": 359, + "version": "canary-360", + "versionCode": 360, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 87ca86bc2..1a9144723 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "sh.siava.pixelxpert" minSdk 33 targetSdk 34 - versionCode 359 - versionName "canary-359" + versionCode 360 + versionName "canary-360" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/latestCanary.json b/latestCanary.json index f589af19f..9c4d3829a 100644 --- a/latestCanary.json +++ b/latestCanary.json @@ -1,6 +1,6 @@ { - "version": "canary-359", - "versionCode": 359, + "version": "canary-360", + "versionCode": 360, "zipUrl_Xposed": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "zipUrl_Full": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" From 400d79d09fab226a4642ebbf1eb11e347d977868 Mon Sep 17 00:00:00 2001 From: Siavash Date: Tue, 21 May 2024 12:40:41 +0330 Subject: [PATCH 108/162] CHANGELOG: Depth wallpaper effect: compatibility with custom lockscreen dim values --- .../modpacks/systemui/DepthWallpaper.java | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java index c2ae5f65d..454e9b694 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java @@ -39,6 +39,7 @@ /** @noinspection RedundantThrows*/ public class DepthWallpaper extends XposedModPack { private static final String listenPackage = Constants.SYSTEM_UI_PACKAGE; + protected static final float KEYGUARD_SCRIM_ALPHA = 0.2f; //from ScrimController private static boolean lockScreenSubjectCacheValid = false; private Object mScrimController; @@ -52,6 +53,7 @@ public class DepthWallpaper extends XposedModPack { private FrameLayout mWallpaperBitmapContainer; private FrameLayout mWallpaperDimmingOverlay; private boolean mLayersCreated = false; + private static float mDefaultDimAmount = KEYGUARD_SCRIM_ALPHA; public DepthWallpaper(Context context) { super(context); @@ -62,6 +64,12 @@ public void updatePrefs(String... Key) { DWallpaperEnabled = Xprefs.getBoolean("DWallpaperEnabled", false); DWOpacity = Xprefs.getSliderInt("DWOpacity", 192); DWonAOD = Xprefs.getBoolean("DWonAOD", false); + + float KeyGuardDimAmount = Xprefs.getSliderFloat( "KeyGuardDimAmount", -1f) / 100f; + + mDefaultDimAmount = KeyGuardDimAmount == -1 + ? KEYGUARD_SCRIM_ALPHA + : KeyGuardDimAmount; } @Override @@ -81,21 +89,18 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { && !getObjectField(mScrimController, "mState").toString().equals("KEYGUARD")) { mLockScreenSubject.post(() -> mLockScreenSubject.setAlpha(DWOpacity)); } - else if(mLayersCreated && getObjectField(param.thisObject, "mScrimName").equals("notifications_scrim")) + else if(getObjectField(param.thisObject, "mScrimName").equals("notifications_scrim")) { float notificationAlpha = (float)param.args[0]; - if(notificationAlpha < .25f) + if(notificationAlpha < mDefaultDimAmount) notificationAlpha = 0; - float subjectAlpha = 1f - notificationAlpha; - if(subjectAlpha < .75f) - { - subjectAlpha /= .75f; - } - final float finalAlpha = subjectAlpha * getFloatField(mScrimController, "mBehindAlpha"); + float subjectAlpha = (notificationAlpha > mDefaultDimAmount) + ? (1f - notificationAlpha) / (1f - mDefaultDimAmount) + : 1f; - mLockScreenSubject.post(() -> mLockScreenSubject.setAlpha(finalAlpha)); + mLockScreenSubject.post(() -> mLockScreenSubject.setAlpha(subjectAlpha)); } } }); From 0e70fe925edff006d4f58552e12c584d4c015901 Mon Sep 17 00:00:00 2001 From: Siavash Date: Fri, 24 May 2024 05:39:54 +0330 Subject: [PATCH 109/162] resolving depth wallpaper errors on older A14s. P1 --- .../pixelxpert/modpacks/systemui/DepthWallpaper.java | 10 ++++++++-- .../siava/pixelxpert/utils/BitmapSubjectSegmenter.java | 7 +++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java index 454e9b694..95b3b7344 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/DepthWallpaper.java @@ -6,6 +6,7 @@ import static de.robv.android.xposed.XposedBridge.hookAllMethods; import static de.robv.android.xposed.XposedHelpers.callMethod; import static de.robv.android.xposed.XposedHelpers.findClass; +import static de.robv.android.xposed.XposedHelpers.findClassIfExists; import static de.robv.android.xposed.XposedHelpers.getFloatField; import static de.robv.android.xposed.XposedHelpers.getObjectField; import static sh.siava.pixelxpert.modpacks.XPrefs.Xprefs; @@ -74,7 +75,12 @@ public void updatePrefs(String... Key) { @Override public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { - Class QSImplClass = findClass("com.android.systemui.qs.QSImpl", lpParam.classLoader); + Class QSImplClass = findClassIfExists("com.android.systemui.qs.QSImpl", lpParam.classLoader); + if(QSImplClass == null) //Older versions of QS + { + QSImplClass = findClass("com.android.systemui.qs.QSFragment", lpParam.classLoader); + } + Class CanvasEngineClass = findClass("com.android.systemui.wallpapers.ImageWallpaper$CanvasEngine", lpParam.classLoader); Class CentralSurfacesImplClass = findClass("com.android.systemui.statusbar.phone.CentralSurfacesImpl", lpParam.classLoader); Class ScrimControllerClass = findClass("com.android.systemui.statusbar.phone.ScrimController", lpParam.classLoader); @@ -89,7 +95,7 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { && !getObjectField(mScrimController, "mState").toString().equals("KEYGUARD")) { mLockScreenSubject.post(() -> mLockScreenSubject.setAlpha(DWOpacity)); } - else if(getObjectField(param.thisObject, "mScrimName").equals("notifications_scrim")) + else if(getObjectField(mScrimController, "mNotificationsScrim").equals(param.thisObject)) //instead of using the mScrimName since older ones don't have that field { float notificationAlpha = (float)param.args[0]; diff --git a/app/src/main/java/sh/siava/pixelxpert/utils/BitmapSubjectSegmenter.java b/app/src/main/java/sh/siava/pixelxpert/utils/BitmapSubjectSegmenter.java index 674fc07ad..5f4203533 100644 --- a/app/src/main/java/sh/siava/pixelxpert/utils/BitmapSubjectSegmenter.java +++ b/app/src/main/java/sh/siava/pixelxpert/utils/BitmapSubjectSegmenter.java @@ -9,6 +9,7 @@ import com.google.android.gms.common.moduleinstall.ModuleInstallClient; import com.google.android.gms.common.moduleinstall.ModuleInstallRequest; import com.google.android.gms.tasks.OnSuccessListener; +import com.google.mlkit.common.MlKit; import com.google.mlkit.vision.common.InputImage; import com.google.mlkit.vision.segmentation.subject.SubjectSegmentation; import com.google.mlkit.vision.segmentation.subject.SubjectSegmenter; @@ -22,6 +23,12 @@ public class BitmapSubjectSegmenter { public BitmapSubjectSegmenter(Context context) { mContext = context; + + try { + MlKit.initialize(context); + } + catch (Throwable ignored){} + mSegmenter = SubjectSegmentation.getClient( new SubjectSegmenterOptions.Builder() .enableForegroundConfidenceMask() From 2becddc8dc4b43d8506b5e511fc3707c7fe2fb79 Mon Sep 17 00:00:00 2001 From: Crowdin Bot Date: Sun, 26 May 2024 00:51:18 +0000 Subject: [PATCH 110/162] New Crowdin translations by GitHub Action --- app/src/main/res/values-zh-rTW/strings.xml | 60 +++++++++++----------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 46664bf30..6bd3971e3 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -50,15 +50,15 @@ 隱藏 SSID 自動關閉時間 最大接入數 - Hotspot connectivity issues workaround - Allow non-\"pre-approved\" clients to connect seamlessly + Hotspot 連線問題的解決方法 + 允許非\"預先批准\"的客戶端無縫連接 - Depth effect wallpaper - Dynamically integrate wallpaper\'s foreground with the clock - Wallpaper foreground opacity - Also on \"always on display\" - AI model is downloaded on the device - AI model isn\'t available on the device (yet) + 深度效果壁紙 + 動態整合壁紙前景與時鐘 + 壁紙前景不透明度 + 也適用於\"隨顯熒幕\" (AOD) + AI模型已下載到裝置上 + AI 模型尚未在裝置上可用 (暫未提供) Disable the unlock hint animation 自定鎖定畫面 隱藏使用者頭像(多使用者模式) @@ -66,8 +66,8 @@ 指紋圖示背景被啟用 指紋圖示背景被隱藏 Távolítsa el a háttérkört a kijelző alatti ujjlenyomatból - Fingerprint icon is active - Fingerprint icon will be hidden + 指紋圖示已啟用 + 指紋圖示將被隱藏 自訂鎖定畫面文本顯示 設定電信商名稱 未修改電信商名稱 @@ -153,7 +153,7 @@ 下載 +上傳 (合併) 僅下載 僅上傳 - Show in bits/s + 以 bits/s 顯示 自定狀態列 雙色電池圖示 開啟 (僅當縱向圖示時生效) @@ -172,16 +172,16 @@ 粗細度 充電顯示 快充顯示 - Indicate power save + 顯示省電模式已開啟 電量警告 均設為 0 將禁用基於電量的顏色變化 臨界值顏色 警告顏色 充電顏色 快充顏色 - Power Save color + 省電模式顏色 陰影漸變 - Colored battery percentage while charging + 充電彩色電池百分比 Today Current week Current month @@ -294,7 +294,7 @@ 設備充電時保持始終顯示啟用狀態 鎖定畫面時 自訂帶主題的圖示 - Add PixelXpert to settings items + 將 PixelXpert 加入設定選項 自訂圖示已禁用 自訂圖示已啟用 長按音量鍵跳過歌曲 @@ -308,15 +308,15 @@ 禁用過度滾動效果 重要:你必須在 LSPosed 作用域中勾選你要禁用的應用程式 毫秒 - Hours - System time - Use NTP to sync time - Time synchronization interval - NTP servers - Use semicolon to separate multiple servers - Sync now - Time synced successfully - NTP server connection error! + 小時 + 系統時間 + 使用 NTP 同步時間 (網路時間協議) + 時間同步間隔 + NTP 伺服器 + 使用分號來分隔多個伺服器 + 立即同步 + 時間同步成功 + NTP伺服器連線錯誤! 音量面板 音量面板自動關閉時間 @@ -325,10 +325,10 @@ Long press statusbar to switch profile Show an icon on statusbar when switching is available - Unlocked for all apps via Pixel Xpert: Enjoy! + 透過 Pixel Xpert 解鎖所有應用程式: 享受! - Battery info… - Error fetching charging data + 電池資訊... + 取得充電數據時出錯 去電被接通時震動 結束通話時震動 @@ -387,9 +387,9 @@ App will close now. You can open it again by tapping on the new icon OK - Attention - Use a suitable lockscreen wallpaper where the foreground elements do not obstruct the entire clock on your lock screen, ensuring both visual appeal and functional clarity on your lock screen.\n\nNote: %s. - OK + 請注意 + 使用適合的鎖定畫面壁紙,其前景元素不會完全遮擋鎖定畫面的時鐘,確保鎖定畫面既具視覺吸引力又清晰易讀。\n\nNote: %s. + 確認 需要重新啟動系統才能套用設定 From 18e51a29022a2de54306a2be9ddf2dbbc2918597 Mon Sep 17 00:00:00 2001 From: Sivash Date: Wed, 29 May 2024 22:53:15 +0330 Subject: [PATCH 111/162] CHANGELOG: Added option to add adaptive brightness shortcut to QS panel --- .github/edit2MakeNewCanary | 2 +- .../modpacks/systemui/BrightnessSlider.java | 147 ++++++++++++++++++ .../main/res/drawable/ic_brightness_auto.xml | 9 ++ .../res/drawable/ic_brightness_manual.xml | 9 ++ app/src/main/res/values/strings.xml | 1 + app/src/main/res/xml/quicksettings_prefs.xml | 8 + 6 files changed, 175 insertions(+), 1 deletion(-) create mode 100644 app/src/main/res/drawable/ic_brightness_auto.xml create mode 100644 app/src/main/res/drawable/ic_brightness_manual.xml diff --git a/.github/edit2MakeNewCanary b/.github/edit2MakeNewCanary index 65aeddb0b..04ad0604c 100644 --- a/.github/edit2MakeNewCanary +++ b/.github/edit2MakeNewCanary @@ -1 +1 @@ -Editing this file will trigger the build script for a new canary. \ No newline at end of file +Editing this file will trigger the build script for a new canary.. \ No newline at end of file diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BrightnessSlider.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BrightnessSlider.java index 8bafe8367..952c762b2 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BrightnessSlider.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BrightnessSlider.java @@ -1,5 +1,6 @@ package sh.siava.pixelxpert.modpacks.systemui; +import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; import static de.robv.android.xposed.XposedBridge.hookAllConstructors; import static de.robv.android.xposed.XposedBridge.hookAllMethods; import static de.robv.android.xposed.XposedHelpers.callMethod; @@ -10,21 +11,33 @@ import static de.robv.android.xposed.XposedHelpers.getObjectField; import static de.robv.android.xposed.XposedHelpers.setObjectField; import static sh.siava.pixelxpert.modpacks.XPrefs.Xprefs; +import static sh.siava.pixelxpert.modpacks.utils.SystemUtils.isDarkMode; import static sh.siava.pixelxpert.modpacks.utils.SystemUtils.sleep; import static sh.siava.pixelxpert.modpacks.utils.toolkit.ReflectionTools.findMethod; import android.annotation.SuppressLint; import android.content.Context; import android.content.res.Resources; +import android.database.ContentObserver; +import android.graphics.Color; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.LayerDrawable; +import android.graphics.drawable.ShapeDrawable; +import android.graphics.drawable.shapes.OvalShape; import android.net.Uri; +import android.os.Handler; +import android.os.SystemClock; import android.provider.Settings; import android.util.ArrayMap; import android.util.ArraySet; import android.view.View; import android.view.ViewGroup; +import android.widget.FrameLayout; import android.widget.ImageView; +import android.widget.LinearLayout; import androidx.annotation.NonNull; +import androidx.core.content.res.ResourcesCompat; import java.util.ArrayList; import java.util.Set; @@ -32,13 +45,16 @@ import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.callbacks.XC_LoadPackage; +import sh.siava.pixelxpert.R; import sh.siava.pixelxpert.modpacks.Constants; +import sh.siava.pixelxpert.modpacks.ResourceManager; import sh.siava.pixelxpert.modpacks.XPLauncher; import sh.siava.pixelxpert.modpacks.XposedModPack; @SuppressWarnings({"RedundantThrows", "unchecked", "rawtypes"}) public class BrightnessSlider extends XposedModPack { private static final String listenPackage = Constants.SYSTEM_UI_PACKAGE; + public static final String SCREEN_BRIGHTNESS_MODE_KEY = "screen_brightness_mode"; private Object brightnessSliderFactory = null; private Object brightnessControllerFactory = null; @@ -62,6 +78,11 @@ public class BrightnessSlider extends XposedModPack { private boolean duringSliderPlacement = false; private Object QQSBrightnessSliderController; + private static boolean QSAutoBrightnessToggle = false; + private final ArrayList mQSAutoBrightnessCallbacks = new ArrayList<>(); + private long mLastAutoToggleClick = 0; + private static boolean LightQSPanel = false; + public BrightnessSlider(Context context) { super(context); } @@ -91,6 +112,8 @@ public void updatePrefs(String... Key) { QSBrightnessDisabled = Xprefs.getBoolean("QSBrightnessDisabled", false); BrightnessSliderOnBottom = Xprefs.getBoolean("BrightnessSlierOnBottom", false); QQSBrightnessSupported = Xprefs.getBoolean("QQSBrightnessSupported", true); + QSAutoBrightnessToggle = Xprefs.getBoolean("QSAutoBrightnessToggle", false); + LightQSPanel = Xprefs.getBoolean("LightQSPanel", false); if (QSBrightnessDisabled) QQSBrightnessEnabled = false; //if there's no slider, then ....... @@ -104,6 +127,8 @@ public void updatePrefs(String... Key) { break; } } + + mQSAutoBrightnessCallbacks.forEach(QSAutoBrightnessCallback::onSettingsChanged); } @Override @@ -137,6 +162,56 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { } }); + hookAllMethods(BrightnessSliderViewClass, "onFinishInflate", new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + Resources res = mContext.getResources(); + + View slider = (View) getObjectField(param.thisObject, "mSlider"); + FrameLayout parent = (FrameLayout) slider.getParent(); + parent.removeView(slider); + + LinearLayout innerLayout = new LinearLayout(mContext); + LinearLayout.LayoutParams innerLayoutParams = new LinearLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT); + innerLayout.setLayoutParams(innerLayoutParams); + + parent.addView(innerLayout); + + View toggleView = new View(mContext); + @SuppressLint("DiscouragedApi") + int toggleSize = res.getDimensionPixelSize(res.getIdentifier("brightness_mirror_height", "dimen", mContext.getPackageName())); + LinearLayout.LayoutParams toggleViewParams = new LinearLayout.LayoutParams(toggleSize, toggleSize); + toggleViewParams.weight = 0; + toggleView.setLayoutParams(toggleViewParams); + + toggleView.setOnClickListener(v -> { + if(SystemClock.uptimeMillis() > mLastAutoToggleClick + 500) { //falsing prevention + mLastAutoToggleClick = SystemClock.uptimeMillis(); + toggleAutoBrightness(); + } + }); + + innerLayout.addView(slider); + innerLayout.addView(toggleView); + + LinearLayout.LayoutParams sliderParams = ((LinearLayout.LayoutParams)slider.getLayoutParams()); + sliderParams.weight = 100; + sliderParams.width = 1; + + setAutoBrightnessVisibility(toggleView); + setAutoBrightnessIcon(toggleView); + + mContext.getContentResolver().registerContentObserver(Settings.System.getUriFor("screen_brightness_mode"), false, new ContentObserver(new Handler(mContext.getMainLooper())) { + @Override + public void onChange(boolean selfChange) { + setAutoBrightnessIcon(toggleView); + } + }); + + mQSAutoBrightnessCallbacks.add(() -> setAutoBrightnessVisibility(toggleView)); + } + }); + hookAllMethods(BrightnessSliderControllerClass, "onViewDetached", new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { @@ -230,6 +305,72 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { }); } + private void setAutoBrightnessVisibility(View toggleView) { + toggleView.setVisibility( + QSAutoBrightnessToggle + ? View.VISIBLE + : View.GONE); + } + + private void toggleAutoBrightness() { + setAutoBrightness(!isAutoBrightnessEnabled()); + } + + private void setAutoBrightnessIcon(View brightnessToggle) { + boolean enabled = isAutoBrightnessEnabled(); + + OvalShape backgroundShape = new OvalShape(); + ShapeDrawable backgroundDrawable = new ShapeDrawable(backgroundShape); + + backgroundDrawable.setTint(getBTBackgroundColor(enabled)); + + Drawable iconDrawable = ResourcesCompat.getDrawable( + ResourceManager.modRes, + enabled + ? R.drawable.ic_brightness_auto + : R.drawable.ic_brightness_manual, + mContext.getTheme()); + + //noinspection DataFlowIssue + iconDrawable.setTint(getBTIconColor(enabled)); + + LayerDrawable toggleDrawable =new LayerDrawable(new Drawable[]{backgroundDrawable, iconDrawable}); + + brightnessToggle.setBackground(toggleDrawable); + } + + public int getBTIconColor(boolean enabled) { + return (isDarkMode() || !LightQSPanel) == enabled + ? Color.BLACK + : mContext.getColor(android.R.color.system_accent1_100); + } + + public int getBTBackgroundColor(boolean enabled) + { + if(isDarkMode() || !LightQSPanel) + { + if(enabled) + return mContext.getColor(android.R.color.system_accent1_100); + else + return mContext.getColor(android.R.color.system_neutral1_800); + } + else + { + if(enabled) + return mContext.getColor(android.R.color.system_accent1_600); + else + return mContext.getColor(android.R.color.system_accent1_10); + } + } + + private boolean isAutoBrightnessEnabled() { + return Settings.System.getInt(mContext.getContentResolver(), SCREEN_BRIGHTNESS_MODE_KEY, 0) == 1; + } + private void setAutoBrightness(boolean enabled) + { + Settings.System.putInt(mContext.getContentResolver(), SCREEN_BRIGHTNESS_MODE_KEY, enabled ? 1 : 0); + } + //swapping top and bottom margins of slider @SuppressLint("DiscouragedApi") private void setSliderMargins(View slider) { @@ -359,6 +500,7 @@ private boolean makeBrightnessController(Object mBrightnessSliderController) { mBrightnessController = callMethod(brightnessControllerFactory, "create", mBrightnessSliderController); } catch (Throwable ignored){} + //noinspection ConstantValue if(mBrightnessController == null) { try { //13 QPR3 mBrightnessController = BrightnessControllerClass.getConstructors()[0].newInstance(getObjectField(brightnessControllerFactory, "mContext"), mBrightnessSliderController, getObjectField(brightnessControllerFactory, "mUserTracker"), getObjectField(brightnessControllerFactory, "mDisplayTracker"), getObjectField(brightnessControllerFactory, "mMainExecutor"), getObjectField(brightnessControllerFactory, "mBackgroundHandler")); @@ -463,4 +605,9 @@ private void addTunable(Object service, Object tunable, @SuppressWarnings("SameP String value = (String) callStaticMethod(DejankUtilsClass, "whitelistIpcs", runnable); callMethod(tunable, "onTuningChanged", key, value); } + + interface QSAutoBrightnessCallback + { + void onSettingsChanged(); + } } \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_brightness_auto.xml b/app/src/main/res/drawable/ic_brightness_auto.xml new file mode 100644 index 000000000..0044f29b7 --- /dev/null +++ b/app/src/main/res/drawable/ic_brightness_auto.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_brightness_manual.xml b/app/src/main/res/drawable/ic_brightness_manual.xml new file mode 100644 index 000000000..a1c7fce73 --- /dev/null +++ b/app/src/main/res/drawable/ic_brightness_manual.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1252b38b6..a1a4e91ca 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -238,6 +238,7 @@ Use separate WiFi & Data tiles Use a single Internet tile Brightness slider options + Adaptive brightness shortcut Show brightness slider on QQS Panel Move brightness slider to the bottom Hide brightness slider from Quick Settings diff --git a/app/src/main/res/xml/quicksettings_prefs.xml b/app/src/main/res/xml/quicksettings_prefs.xml index 59382bbcb..10f00ab5b 100644 --- a/app/src/main/res/xml/quicksettings_prefs.xml +++ b/app/src/main/res/xml/quicksettings_prefs.xml @@ -130,6 +130,14 @@ app:iconSpaceReserved="false" search:ignore="true"> + + Date: Wed, 29 May 2024 19:25:50 +0000 Subject: [PATCH 112/162] Version update: Release --- CanaryChangelog.md | 4 ++++ MagiskModBase/module.prop | 4 ++-- MagiskModuleUpdate_Full.json | 4 ++-- MagiskModuleUpdate_Xposed.json | 4 ++-- app/build.gradle | 4 ++-- latestCanary.json | 4 ++-- 6 files changed, 14 insertions(+), 10 deletions(-) diff --git a/CanaryChangelog.md b/CanaryChangelog.md index 69fc7c7a4..786d94613 100644 --- a/CanaryChangelog.md +++ b/CanaryChangelog.md @@ -1,3 +1,7 @@ +**canary-361** +- Added option to add adaptive brightness shortcut to QS panel +- Depth wallpaper effect: compatibility with custom lockscreen dim values + **canary-360** - Double tap to sleep: fixed QS getting randomly stuck on the screen - Double tap to sleep: fixed QS getting stuck on the screen diff --git a/MagiskModBase/module.prop b/MagiskModBase/module.prop index a0c04d19a..acc4a3ea3 100644 --- a/MagiskModBase/module.prop +++ b/MagiskModBase/module.prop @@ -1,7 +1,7 @@ id=PixelXpert name=Pixel Xpert -version=canary-360 -versionCode=360 +version=canary-361 +versionCode=361 author=Pixel Xpert Team description=Xposed based module for customizations on Pixel roms. Android 13+ updateJson=https://raw.githubusercontent.com/siavash79/PixelXpert/canary/MagiskModuleUpdate_Xposed.json diff --git a/MagiskModuleUpdate_Full.json b/MagiskModuleUpdate_Full.json index 38b60e816..80999b774 100644 --- a/MagiskModuleUpdate_Full.json +++ b/MagiskModuleUpdate_Full.json @@ -1,6 +1,6 @@ { - "version": "canary-360", - "versionCode": 360, + "version": "canary-361", + "versionCode": 361, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/MagiskModuleUpdate_Xposed.json b/MagiskModuleUpdate_Xposed.json index 38b60e816..80999b774 100644 --- a/MagiskModuleUpdate_Xposed.json +++ b/MagiskModuleUpdate_Xposed.json @@ -1,6 +1,6 @@ { - "version": "canary-360", - "versionCode": 360, + "version": "canary-361", + "versionCode": 361, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 1a9144723..33ed694a1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "sh.siava.pixelxpert" minSdk 33 targetSdk 34 - versionCode 360 - versionName "canary-360" + versionCode 361 + versionName "canary-361" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/latestCanary.json b/latestCanary.json index 9c4d3829a..0877b2b89 100644 --- a/latestCanary.json +++ b/latestCanary.json @@ -1,6 +1,6 @@ { - "version": "canary-360", - "versionCode": 360, + "version": "canary-361", + "versionCode": 361, "zipUrl_Xposed": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "zipUrl_Full": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" From 229b604e6d77feb521fa95e9b9346a685b1c1548 Mon Sep 17 00:00:00 2001 From: Sivash Date: Thu, 30 May 2024 06:34:58 +0330 Subject: [PATCH 113/162] CHANGELOG: Adaptive brightness shortcut placement improved --- .../siava/pixelxpert/modpacks/systemui/BrightnessSlider.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BrightnessSlider.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BrightnessSlider.java index 952c762b2..55f769732 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BrightnessSlider.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BrightnessSlider.java @@ -163,6 +163,7 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { }); hookAllMethods(BrightnessSliderViewClass, "onFinishInflate", new XC_MethodHook() { + @SuppressLint("DiscouragedApi") @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { Resources res = mContext.getResources(); @@ -178,10 +179,10 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { parent.addView(innerLayout); View toggleView = new View(mContext); - @SuppressLint("DiscouragedApi") int toggleSize = res.getDimensionPixelSize(res.getIdentifier("brightness_mirror_height", "dimen", mContext.getPackageName())); LinearLayout.LayoutParams toggleViewParams = new LinearLayout.LayoutParams(toggleSize, toggleSize); toggleViewParams.weight = 0; + toggleViewParams.setMarginStart(res.getDimensionPixelSize(res.getIdentifier("qs_tile_margin_horizontal", "dimen", mContext.getPackageName()))); toggleView.setLayoutParams(toggleViewParams); toggleView.setOnClickListener(v -> { From eb999729bec033a2030978e925d75634e014dae7 Mon Sep 17 00:00:00 2001 From: Sivash Date: Thu, 30 May 2024 06:57:49 +0330 Subject: [PATCH 114/162] Adaptive brightness shortcut: changed icon color to white when active --- .../siava/pixelxpert/modpacks/systemui/BrightnessSlider.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BrightnessSlider.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BrightnessSlider.java index 55f769732..87672fd26 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BrightnessSlider.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BrightnessSlider.java @@ -343,7 +343,9 @@ private void setAutoBrightnessIcon(View brightnessToggle) { public int getBTIconColor(boolean enabled) { return (isDarkMode() || !LightQSPanel) == enabled ? Color.BLACK - : mContext.getColor(android.R.color.system_accent1_100); + : enabled + ? Color.WHITE //light theme, enabled + : mContext.getColor(android.R.color.system_accent1_100); //dark, disabled } public int getBTBackgroundColor(boolean enabled) From 31735af43e4fcacd6f08740449615fa77a3088b8 Mon Sep 17 00:00:00 2001 From: Sivash Date: Thu, 30 May 2024 14:22:20 +0330 Subject: [PATCH 115/162] Adaptive brightness shortcut: changed icon color to gray when inactive --- .../sh/siava/pixelxpert/modpacks/systemui/BrightnessSlider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BrightnessSlider.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BrightnessSlider.java index 87672fd26..5f863276f 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BrightnessSlider.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BrightnessSlider.java @@ -345,7 +345,7 @@ public int getBTIconColor(boolean enabled) { ? Color.BLACK : enabled ? Color.WHITE //light theme, enabled - : mContext.getColor(android.R.color.system_accent1_100); //dark, disabled + : mContext.getColor(android.R.color.system_neutral1_200); //dark, disabled } public int getBTBackgroundColor(boolean enabled) From 5035231c050b1b7a7b8185ae03605dac2d233b1b Mon Sep 17 00:00:00 2001 From: Sivash Date: Thu, 30 May 2024 19:13:34 +0330 Subject: [PATCH 116/162] Adaptive brightness shortcut: now taking icon colors from QS tiles (compatibility with other mods like iconify.. oh my!) --- .github/edit2MakeNewCanary | 2 +- .../modpacks/systemui/BrightnessSlider.java | 124 ++++++++++-------- 2 files changed, 68 insertions(+), 58 deletions(-) diff --git a/.github/edit2MakeNewCanary b/.github/edit2MakeNewCanary index 04ad0604c..65aeddb0b 100644 --- a/.github/edit2MakeNewCanary +++ b/.github/edit2MakeNewCanary @@ -1 +1 @@ -Editing this file will trigger the build script for a new canary.. \ No newline at end of file +Editing this file will trigger the build script for a new canary. \ No newline at end of file diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BrightnessSlider.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BrightnessSlider.java index 5f863276f..3f6d4b481 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BrightnessSlider.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BrightnessSlider.java @@ -11,7 +11,6 @@ import static de.robv.android.xposed.XposedHelpers.getObjectField; import static de.robv.android.xposed.XposedHelpers.setObjectField; import static sh.siava.pixelxpert.modpacks.XPrefs.Xprefs; -import static sh.siava.pixelxpert.modpacks.utils.SystemUtils.isDarkMode; import static sh.siava.pixelxpert.modpacks.utils.SystemUtils.sleep; import static sh.siava.pixelxpert.modpacks.utils.toolkit.ReflectionTools.findMethod; @@ -19,7 +18,6 @@ import android.content.Context; import android.content.res.Resources; import android.database.ContentObserver; -import android.graphics.Color; import android.graphics.drawable.Drawable; import android.graphics.drawable.LayerDrawable; import android.graphics.drawable.ShapeDrawable; @@ -81,7 +79,7 @@ public class BrightnessSlider extends XposedModPack { private static boolean QSAutoBrightnessToggle = false; private final ArrayList mQSAutoBrightnessCallbacks = new ArrayList<>(); private long mLastAutoToggleClick = 0; - private static boolean LightQSPanel = false; + private Object QSTV; //QS Tile View impl public BrightnessSlider(Context context) { super(context); @@ -113,7 +111,6 @@ public void updatePrefs(String... Key) { BrightnessSliderOnBottom = Xprefs.getBoolean("BrightnessSlierOnBottom", false); QQSBrightnessSupported = Xprefs.getBoolean("QQSBrightnessSupported", true); QSAutoBrightnessToggle = Xprefs.getBoolean("QSAutoBrightnessToggle", false); - LightQSPanel = Xprefs.getBoolean("LightQSPanel", false); if (QSBrightnessDisabled) QQSBrightnessEnabled = false; //if there's no slider, then ....... @@ -149,6 +146,15 @@ public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Th Class QSPanelClass = findClass("com.android.systemui.qs.QSPanel", lpParam.classLoader); Class BrightnessSliderControllerClass = findClass("com.android.systemui.settings.brightness.BrightnessSliderController", lpParam.classLoader); Class BrightnessSliderViewClass = findClass("com.android.systemui.settings.brightness.BrightnessSliderView", lpParam.classLoader); + Class QSTileViewImplClass = findClass("com.android.systemui.qs.tileimpl.QSTileViewImpl", lpParam.classLoader); + + hookAllConstructors(QSTileViewImplClass, new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + QSTV = param.thisObject; + } + }); + DejankUtilsClass = findClass("com.android.systemui.DejankUtils", lpParam.classLoader); BrightnessControllerClass = findClass("com.android.systemui.settings.brightness.BrightnessController", lpParam.classLoader); @@ -166,50 +172,61 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { @SuppressLint("DiscouragedApi") @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { - Resources res = mContext.getResources(); + new Thread(() -> { + try { + Thread.sleep(500); - View slider = (View) getObjectField(param.thisObject, "mSlider"); - FrameLayout parent = (FrameLayout) slider.getParent(); - parent.removeView(slider); + Resources res = mContext.getResources(); - LinearLayout innerLayout = new LinearLayout(mContext); - LinearLayout.LayoutParams innerLayoutParams = new LinearLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT); - innerLayout.setLayoutParams(innerLayoutParams); + View slider = (View) getObjectField(param.thisObject, "mSlider"); - parent.addView(innerLayout); + slider.post(() -> { + FrameLayout parent = (FrameLayout) slider.getParent(); + parent.removeView(slider); - View toggleView = new View(mContext); - int toggleSize = res.getDimensionPixelSize(res.getIdentifier("brightness_mirror_height", "dimen", mContext.getPackageName())); - LinearLayout.LayoutParams toggleViewParams = new LinearLayout.LayoutParams(toggleSize, toggleSize); - toggleViewParams.weight = 0; - toggleViewParams.setMarginStart(res.getDimensionPixelSize(res.getIdentifier("qs_tile_margin_horizontal", "dimen", mContext.getPackageName()))); - toggleView.setLayoutParams(toggleViewParams); + LinearLayout innerLayout = new LinearLayout(mContext); + LinearLayout.LayoutParams innerLayoutParams = new LinearLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT); + innerLayout.setLayoutParams(innerLayoutParams); - toggleView.setOnClickListener(v -> { - if(SystemClock.uptimeMillis() > mLastAutoToggleClick + 500) { //falsing prevention - mLastAutoToggleClick = SystemClock.uptimeMillis(); - toggleAutoBrightness(); - } - }); + parent.addView(innerLayout); - innerLayout.addView(slider); - innerLayout.addView(toggleView); + View toggleView = new View(mContext); + int toggleSize = res.getDimensionPixelSize(res.getIdentifier("brightness_mirror_height", "dimen", mContext.getPackageName())); + LinearLayout.LayoutParams toggleViewParams = new LinearLayout.LayoutParams(toggleSize, toggleSize); + toggleViewParams.weight = 0; + toggleViewParams.setMarginStart(res.getDimensionPixelSize(res.getIdentifier("qs_tile_margin_horizontal", "dimen", mContext.getPackageName()))); + toggleView.setLayoutParams(toggleViewParams); - LinearLayout.LayoutParams sliderParams = ((LinearLayout.LayoutParams)slider.getLayoutParams()); - sliderParams.weight = 100; - sliderParams.width = 1; + toggleView.setOnClickListener(v -> { + if(SystemClock.uptimeMillis() > mLastAutoToggleClick + 500) { //falsing prevention + mLastAutoToggleClick = SystemClock.uptimeMillis(); + toggleAutoBrightness(); + } + }); - setAutoBrightnessVisibility(toggleView); - setAutoBrightnessIcon(toggleView); + innerLayout.addView(slider); + innerLayout.addView(toggleView); - mContext.getContentResolver().registerContentObserver(Settings.System.getUriFor("screen_brightness_mode"), false, new ContentObserver(new Handler(mContext.getMainLooper())) { - @Override - public void onChange(boolean selfChange) { - setAutoBrightnessIcon(toggleView); - } - }); + LinearLayout.LayoutParams sliderParams = ((LinearLayout.LayoutParams)slider.getLayoutParams()); + sliderParams.weight = 100; + sliderParams.width = 1; + + setAutoBrightnessVisibility(toggleView); + setAutoBrightnessIcon(toggleView); + + mContext.getContentResolver().registerContentObserver(Settings.System.getUriFor("screen_brightness_mode"), false, new ContentObserver(new Handler(mContext.getMainLooper())) { + @Override + public void onChange(boolean selfChange) { + setAutoBrightnessIcon(toggleView); + } + }); - mQSAutoBrightnessCallbacks.add(() -> setAutoBrightnessVisibility(toggleView)); + mQSAutoBrightnessCallbacks.add(() -> setAutoBrightnessVisibility(toggleView)); + }); + } + catch (Throwable ignored) + {} + }).start(); } }); @@ -341,29 +358,22 @@ private void setAutoBrightnessIcon(View brightnessToggle) { } public int getBTIconColor(boolean enabled) { - return (isDarkMode() || !LightQSPanel) == enabled - ? Color.BLACK - : enabled - ? Color.WHITE //light theme, enabled - : mContext.getColor(android.R.color.system_neutral1_200); //dark, disabled + if(QSTV == null) return 0; + + if(enabled) + return getIntField(QSTV, "colorLabelActive"); + + return getIntField(QSTV, "colorLabelInactive"); } public int getBTBackgroundColor(boolean enabled) { - if(isDarkMode() || !LightQSPanel) - { - if(enabled) - return mContext.getColor(android.R.color.system_accent1_100); - else - return mContext.getColor(android.R.color.system_neutral1_800); - } - else - { - if(enabled) - return mContext.getColor(android.R.color.system_accent1_600); - else - return mContext.getColor(android.R.color.system_accent1_10); - } + if(QSTV == null) return 0; + + if(enabled) + return getIntField(QSTV, "colorActive"); + + return getIntField(QSTV, "colorInactive"); } private boolean isAutoBrightnessEnabled() { From 3709edd798fd8530c908bcc12d758c8525c478a1 Mon Sep 17 00:00:00 2001 From: GitHub Date: Thu, 30 May 2024 15:46:15 +0000 Subject: [PATCH 117/162] Version update: Release --- CanaryChangelog.md | 3 +++ MagiskModBase/module.prop | 4 ++-- MagiskModuleUpdate_Full.json | 4 ++-- MagiskModuleUpdate_Xposed.json | 4 ++-- app/build.gradle | 4 ++-- latestCanary.json | 4 ++-- 6 files changed, 13 insertions(+), 10 deletions(-) diff --git a/CanaryChangelog.md b/CanaryChangelog.md index 786d94613..02f5deb9e 100644 --- a/CanaryChangelog.md +++ b/CanaryChangelog.md @@ -1,3 +1,6 @@ +**canary-362** +- Adaptive brightness shortcut placement improved + **canary-361** - Added option to add adaptive brightness shortcut to QS panel - Depth wallpaper effect: compatibility with custom lockscreen dim values diff --git a/MagiskModBase/module.prop b/MagiskModBase/module.prop index acc4a3ea3..6a16710a2 100644 --- a/MagiskModBase/module.prop +++ b/MagiskModBase/module.prop @@ -1,7 +1,7 @@ id=PixelXpert name=Pixel Xpert -version=canary-361 -versionCode=361 +version=canary-362 +versionCode=362 author=Pixel Xpert Team description=Xposed based module for customizations on Pixel roms. Android 13+ updateJson=https://raw.githubusercontent.com/siavash79/PixelXpert/canary/MagiskModuleUpdate_Xposed.json diff --git a/MagiskModuleUpdate_Full.json b/MagiskModuleUpdate_Full.json index 80999b774..c443553ad 100644 --- a/MagiskModuleUpdate_Full.json +++ b/MagiskModuleUpdate_Full.json @@ -1,6 +1,6 @@ { - "version": "canary-361", - "versionCode": 361, + "version": "canary-362", + "versionCode": 362, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/MagiskModuleUpdate_Xposed.json b/MagiskModuleUpdate_Xposed.json index 80999b774..c443553ad 100644 --- a/MagiskModuleUpdate_Xposed.json +++ b/MagiskModuleUpdate_Xposed.json @@ -1,6 +1,6 @@ { - "version": "canary-361", - "versionCode": 361, + "version": "canary-362", + "versionCode": 362, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 33ed694a1..844504f35 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "sh.siava.pixelxpert" minSdk 33 targetSdk 34 - versionCode 361 - versionName "canary-361" + versionCode 362 + versionName "canary-362" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/latestCanary.json b/latestCanary.json index 0877b2b89..3e169f686 100644 --- a/latestCanary.json +++ b/latestCanary.json @@ -1,6 +1,6 @@ { - "version": "canary-361", - "versionCode": 361, + "version": "canary-362", + "versionCode": 362, "zipUrl_Xposed": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "zipUrl_Full": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" From 7d89d85f580a1b67716b3ed41e69dbd487ffb0d0 Mon Sep 17 00:00:00 2001 From: Crowdin Bot Date: Sun, 2 Jun 2024 00:51:28 +0000 Subject: [PATCH 118/162] New Crowdin translations by GitHub Action --- app/src/main/res/values-af-rZA/strings.xml | 1 + app/src/main/res/values-ar-rSA/strings.xml | 1 + app/src/main/res/values-cs-rCZ/strings.xml | 1 + app/src/main/res/values-da-rDK/strings.xml | 1 + app/src/main/res/values-de-rDE/strings.xml | 1 + app/src/main/res/values-el-rGR/strings.xml | 1 + app/src/main/res/values-es-rES/strings.xml | 1 + app/src/main/res/values-fa-rIR/strings.xml | 1 + app/src/main/res/values-fi-rFI/strings.xml | 1 + app/src/main/res/values-fr-rFR/strings.xml | 1 + app/src/main/res/values-hi-rIN/strings.xml | 1 + app/src/main/res/values-hu-rHU/strings.xml | 1 + app/src/main/res/values-it-rIT/strings.xml | 1 + app/src/main/res/values-iw-rIL/strings.xml | 1 + app/src/main/res/values-ja-rJP/strings.xml | 1 + app/src/main/res/values-ko-rKR/strings.xml | 1 + app/src/main/res/values-nl-rNL/strings.xml | 1 + app/src/main/res/values-no-rNO/strings.xml | 1 + app/src/main/res/values-pl-rPL/strings.xml | 1 + app/src/main/res/values-pt-rPT/strings.xml | 1 + app/src/main/res/values-ro-rRO/strings.xml | 1 + app/src/main/res/values-ru-rRU/strings.xml | 1 + app/src/main/res/values-sr-rSP/strings.xml | 1 + app/src/main/res/values-sv-rSE/strings.xml | 1 + app/src/main/res/values-tr-rTR/strings.xml | 1 + app/src/main/res/values-uk-rUA/strings.xml | 1 + app/src/main/res/values-vi-rVN/strings.xml | 3 ++- app/src/main/res/values-zh-rCN/strings.xml | 1 + app/src/main/res/values-zh-rTW/strings.xml | 1 + 29 files changed, 30 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml index 3f9778f59..29c7489c6 100644 --- a/app/src/main/res/values-af-rZA/strings.xml +++ b/app/src/main/res/values-af-rZA/strings.xml @@ -225,6 +225,7 @@ Gebruik aparte WiFi & Data-teëls Gebruik \'n enkele internetteël Helderheid glyer opsies + Adaptive brightness shortcut Wys helderheidsskuifbalk op QQS-paneel Skuif die helderheidsskuifbalk na onder Versteek helderheid-skuifbalk vanaf Vinnige instellings diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index f89785ec9..7701bfb9f 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -225,6 +225,7 @@ استخدام WiFi & بلاط البيانات استخدام مربع إنترنت واحد خيارات شريط تمرير السطوع + Adaptive brightness shortcut إظهار شريط تمرير السطوع على لوحة QQS نقل شريط تمرير السطوع إلى الأسفل إخفاء شريط تمرير السطوع من الإعدادات السريعة diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index ee5493a7b..e9b80416b 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -225,6 +225,7 @@ Použijte samostatné dlaždice WiFi & Data Použijte jednu internetovou dlaždici Možnosti posuvníku jasu + Adaptive brightness shortcut Zobrazit posuvník jasu na panelu QQS Posuňte posuvník jasu dolů Skrýt posuvník jasu v Rychlém nastavení diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml index f9e1ab02b..65737665c 100644 --- a/app/src/main/res/values-da-rDK/strings.xml +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -225,6 +225,7 @@ Brug separate WiFi & datafliser Brug en enkelt internetflise Indstillinger for lysstyrkeskyder + Adaptive brightness shortcut Vis lysstyrkeskyderen på QQS Panel Flyt lysstyrkeskyderen til bunden Skjul lysstyrkeskyderen fra Hurtige indstillinger diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index 1cc1cc82e..75e064418 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -225,6 +225,7 @@ Benutze getrennte Elemente für Wifi und Daten Benutze einzelnes Internet Element Helligkeitsregler Optionen + Adaptive brightness shortcut Zeige Helligkeitsregler in eingeklappten Schnelleinstellungen Bewegen den Helligkeitsregler nach unten Verstecke Helligkeitsregler in eingeklappten Schnelleinstellungen diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index 5ae2bf7d3..7b6756daf 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -225,6 +225,7 @@ Χρησιμοποιήστε ξεχωριστά πλακίδια δεδομένων WiFi & Χρησιμοποιήστε ένα μόνο πλακίδιο Διαδικτύου Επιλογές ρυθμιστικού φωτεινότητας + Adaptive brightness shortcut Εμφάνιση ρυθμιστικού φωτεινότητας στον πίνακα QQS Μετακινήστε το ρυθμιστικό φωτεινότητας στο κάτω μέρος Απόκρυψη του ρυθμιστικού φωτεινότητας από τις Γρήγορες ρυθμίσεις diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index ff7238f50..17398c07a 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -225,6 +225,7 @@ Usar Wifi y Datos por separado Usar solo el atajo de Internet Preferencias de la barra de brillo + Acceso directo de brillo adaptativo Mostrar la barra de brillo en el panel de ajustes rápidos Mover la barra de brillo abajo Ocultar el control deslizante de brillo de la configuración rápida diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml index 5f40e3a53..e7def50c3 100644 --- a/app/src/main/res/values-fa-rIR/strings.xml +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -225,6 +225,7 @@ جداسازی تنظیمات وای فای و اینترنت همراه تلفیق تنظیمات وای فای و اینترنت همراه تنظیمات نوار نور صفحه + Adaptive brightness shortcut نوار نور صفحه در پنل QQS نوار نور صفحه در پایین تنظیمات سریع باشد حذف نوار نور صفحه از تنظیمات سریع diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index 998b72391..90165e40d 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -225,6 +225,7 @@ Käytä erillisiä WiFi & -datalaattoja Käytä yhtä Internet-laattaa Kirkkauden liukusäätimen asetukset + Adaptive brightness shortcut Näytä kirkkauden liukusäädin QQS-paneelissa Siirrä kirkkauden liukusäädin alas Piilota kirkkauden liukusäädin pika-asetuksista diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index d303b2403..8e691d471 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -225,6 +225,7 @@ Utiliser deux blocs séparés pour les données mobiles et le Wi-Fi Utiliser un bloc Internet Préférence pour le curseur de luminosité + Adaptive brightness shortcut Montrer le curseur de luminosité dans la fenêtre de configuration rapide Bouger le curseur en bas Cacher le curseur diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index 153ad3c45..930833ce7 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -225,6 +225,7 @@ वाईफ़ाई और डेटा के लिए अलग-अलग तत्वों का उपयोग करें एकल इंटरनेट तत्व का उपयोग करें चमक स्लाइडर विकल्प + Adaptive brightness shortcut संक्षिप्त त्वरित सेटिंग में चमक नियंत्रण दिखाएं चमक स्लाइडर को नीचे ले जाएं संक्षिप्त त्वरित सेटिंग में चमक नियंत्रण छुपाएं diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index 151ae2862..80fde666d 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -225,6 +225,7 @@ Használjon külön WiFi & adatlapkákat Használjon egyetlen internetes csempét Fényerő-csúszka beállításai + Adaptive brightness shortcut Fényerő-csúszka megjelenítése a QQS panelen Mozgassa a fényerő csúszkát alul Fényerő-csúszka elrejtése a Gyorsbeállításokban diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index 8514aafb9..6165c2eeb 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -225,6 +225,7 @@ Usa tiles separati per WiFi & Data Usa un singolo tile Internet Opzioni slider luminosità + Scorciatoia luminosità adattiva Mostra slider luminosità nel pannello QQS Sposta slider luminosità sul fondo Nascondi slider luminosità dai QS diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index 3bb28a34e..98381078f 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -225,6 +225,7 @@ השתמש ב-WiFi נפרד & אריחי נתונים שימוש באריח אינטרנט יחיד אפשרויות מחוון בהירות + Adaptive brightness shortcut הצג את מחוון הבהירות בלוח QQS הזז את מחוון הבהירות לתחתית הסתר את מחוון הבהירות מהגדרות מהירות diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index e3b4a91c0..c502ff28d 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -225,6 +225,7 @@ Wi-Fiとモバイルデータのタイルを分離 インターネットタイルを単一表示 画面の明るさのスライダーの設定 + Adaptive brightness shortcut クイック設定パネルに画面の明るさのスライダーを表示 画面の明るさのスライダーを下部に移動 クイック設定から画面の明るさのスライダーを非表示 diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index bb1cfc07e..64b7a1ce5 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -225,6 +225,7 @@ WiFi 및 데이터 타일 분리 통합된 인터넷 타일 사용 밝기 조절 슬라이더 설정 + Adaptive brightness shortcut 알림 화면에 밝기 조절 슬라이더 표시 밝기 조절 슬라이더 하단 이동 빠른 설정 화면에서 밝기 조절 슬라이더 숨기기 diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index 9688b016b..afcdac141 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -225,6 +225,7 @@ Gebruik wifi en data aparte tegels Gebruik enkele internettegel Opties voor schuifregelaar helderheid + Adaptive brightness shortcut Helderheidsschuifregelaar weergeven op QQS-paneel Schuifregelaar voor helderheid naar beneden verplaatsen Schuifregelaar voor helderheid verbergen in Snelle instellingen diff --git a/app/src/main/res/values-no-rNO/strings.xml b/app/src/main/res/values-no-rNO/strings.xml index 131b1a2ae..3103fa67f 100644 --- a/app/src/main/res/values-no-rNO/strings.xml +++ b/app/src/main/res/values-no-rNO/strings.xml @@ -225,6 +225,7 @@ Bruk separate WiFi & datafliser Bruk en enkelt Internett-brikke Lysstyrkeskyvealternativer + Adaptive brightness shortcut Vis glidebryteren for lysstyrke på QQS-panelet Flytt lysstyrkeglidebryteren til bunnen Skjul lysstyrkeglidebryteren fra Hurtiginnstillinger diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index 04dda8601..7acdfea06 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -225,6 +225,7 @@ Użyj oddzielnego Wi-Fi Użyj jednego kafelka internetowego Opcje suwaka jasności + Adaptive brightness shortcut Pokaż suwak jasności na panelu QQS Przesuń suwak jasności na dół Ukryj suwak jasności w Szybkich ustawieniach diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 3f25eb479..cd50060ee 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -225,6 +225,7 @@ Usar WiFi e Dados em separado Usar apenas o atalho Internet Opções do controlo de brilho + Adaptive brightness shortcut Controlo de brilho no painel rápido das DR Controlo de brilho no fundo do painel Esconder o controlo de brilho diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index c463eb0d8..bdda39c45 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -225,6 +225,7 @@ Utilizează plăci separate pentru WiFi și date mobile Folosește o singură dală Internet Opțiuni glisor luminozitate + Comandă rapidă pentru luminozitatea adaptivă Arată glisorul de luminozitate în panoul setărilor rapide Mută glisorul de luminozitate în partea de jos Ascunde glisorul de luminozitate în setările rapide diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 96d0f5e1f..7f4549aa1 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -225,6 +225,7 @@ Использовать отдельные плитки для WiFi и мобильных данных Использовать одну плитку интернета Параметры ползунка яркости + Adaptive brightness shortcut Показывать ползунок яркости в полураскрытой панели быстрых настроек Переместить ползунок яркости в нижнюю часть быстрых настроек Скрыть ползунок яркости из быстрых настроек diff --git a/app/src/main/res/values-sr-rSP/strings.xml b/app/src/main/res/values-sr-rSP/strings.xml index 14036bc17..37b86a28f 100644 --- a/app/src/main/res/values-sr-rSP/strings.xml +++ b/app/src/main/res/values-sr-rSP/strings.xml @@ -225,6 +225,7 @@ Користите засебне ВиФи & плочице података Користите једну интернет плочицу Опције клизача за осветљеност + Adaptive brightness shortcut Прикажи клизач за осветљеност на ККС панелу Померите клизач за осветљеност на дно Сакриј клизач за осветљеност из Брзих подешавања diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index 0b998516e..0327e0eaa 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -225,6 +225,7 @@ Använd separata WiFi & -dataplattor Använd en enda Internetbricka Alternativ för skjutreglage för ljusstyrka + Adaptive brightness shortcut Visa skjutreglaget för ljusstyrka på QQS-panelen Flytta skjutreglaget för ljusstyrka till botten Dölj skjutreglaget för ljusstyrka från Snabbinställningar diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index 3a8961b51..2b32fcc61 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -225,6 +225,7 @@ Ayrı WiFi & Veri kutucukları kullan Tek bir İnternet kutucuğu kullan Parlaklık Kaydırıcı Ayarları + Uyarlanabilir parlaklık kısayolu QQS Panelinde parlaklık kaydırıcısını göster Parlaklık kaydırıcısını en alta taşı Parlaklık kaydırıcısını QS\'den gizle diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index 93c86503b..9cad5db42 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -225,6 +225,7 @@ Використовувати окремі плитки Wi-Fi та мобільних даних Використовувати одинарну плитку Інтернету Налаштування повзунка яскравості + Adaptive brightness shortcut Показувати повзунок яскравості на панелі QQS Перемістити повзунок яскравості вниз Сховати повзунок яскравості з панелі Швидких налаштувань diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index 881abc8f8..b07d5d2ab 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -56,7 +56,7 @@ Hình nền hiệu ứng chiều sâu Tích hợp động hình nền với đồng hồ Độ mờ nền trước hình nền - Gồm cả \"always on display\" + Bao gồm cả \"màn hình luôn bật\" Mẫu AI đã được tải xuống thiết bị Mẫu AI không khả dụng với thiết bị(hoặc chưa) Tắt hoạt ảnh gợi ý mở khóa @@ -225,6 +225,7 @@ Tách biệt WiFi & Dữ liệu di động Sử dụng một ô biểu tượng mạng duy nhất Tùy chỉnh thanh trượt độ sáng + Lối tắt độ sáng thích ứng Hiển thị thanh trượt độ sáng trên Bảng cài đặt nhanh Di chuyển thanh trượt độ sáng xuống dưới cùng Ẩn thanh trượt độ sáng khỏi Bảng cài đặt nhanh diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 3d3e38103..1231945eb 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -225,6 +225,7 @@ 分离 WIFI 和数据磁贴 合并 WIFI 和数据磁贴 亮度滑块选项 + Adaptive brightness shortcut 在下拉磁贴面板显示 将亮度条移动到底部 在磁贴面板中隐藏 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 6bd3971e3..a2adb26fa 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -225,6 +225,7 @@ 分離 WIFI 和資料方塊 合併 WIFI 和資料方塊 亮度滑塊選項 + Adaptive brightness shortcut 在下拉方塊面板顯示 將亮度條移動到底部 在方塊面板中隱藏 From 297821e37efd27f3da1ab8822e58a978c2d3db8a Mon Sep 17 00:00:00 2001 From: Siavash Date: Sun, 2 Jun 2024 15:09:54 +0330 Subject: [PATCH 119/162] code refactoring and cleanup --- .../modpacks/systemui/BrightnessSlider.java | 15 +++----- .../modpacks/systemui/ScreenGestures.java | 37 +++++++++---------- .../utils/toolkit/ReflectionTools.java | 13 +++++++ 3 files changed, 37 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BrightnessSlider.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BrightnessSlider.java index 3f6d4b481..9be5abaa4 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BrightnessSlider.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BrightnessSlider.java @@ -13,6 +13,7 @@ import static sh.siava.pixelxpert.modpacks.XPrefs.Xprefs; import static sh.siava.pixelxpert.modpacks.utils.SystemUtils.sleep; import static sh.siava.pixelxpert.modpacks.utils.toolkit.ReflectionTools.findMethod; +import static sh.siava.pixelxpert.modpacks.utils.toolkit.ReflectionTools.runDelayedOnMainThread; import android.annotation.SuppressLint; import android.content.Context; @@ -73,7 +74,6 @@ public class BrightnessSlider extends XposedModPack { private View QQSBrightnessSliderView; static Class BrightnessControllerClass = null; static Class DejankUtilsClass = null; - private boolean duringSliderPlacement = false; private Object QQSBrightnessSliderController; private static boolean QSAutoBrightnessToggle = false; @@ -172,14 +172,12 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { @SuppressLint("DiscouragedApi") @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { - new Thread(() -> { - try { - Thread.sleep(500); + View slider = (View) getObjectField(param.thisObject, "mSlider"); + runDelayedOnMainThread(slider, 500, () -> { + try { Resources res = mContext.getResources(); - View slider = (View) getObjectField(param.thisObject, "mSlider"); - slider.post(() -> { FrameLayout parent = (FrameLayout) slider.getParent(); parent.removeView(slider); @@ -224,9 +222,8 @@ public void onChange(boolean selfChange) { mQSAutoBrightnessCallbacks.add(() -> setAutoBrightnessVisibility(toggleView)); }); } - catch (Throwable ignored) - {} - }).start(); + catch (Throwable ignored){} + }); } }); diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ScreenGestures.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ScreenGestures.java index 01942e038..25d381e75 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ScreenGestures.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ScreenGestures.java @@ -249,24 +249,7 @@ protected void beforeHookedMethod(MethodHookParam param1) throws Throwable { XC_MethodHook doubleTapHook = new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param1) throws Throwable { - - boolean isQSExpanded; - if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) - { - isQSExpanded = (boolean)callMethod(NotificationPanelViewController, "isShadeFullyExpanded"); - } - else - { - try { //13QPR3 - isQSExpanded = getBooleanField( - getObjectField(NotificationPanelViewController, "mQsController"), - "mExpanded"); - } catch (Throwable ignored) { - isQSExpanded = getBooleanField(NotificationPanelViewController, "mQsExpanded"); //13QPR2,1 - } - } - - if (isQSExpanded || getBooleanField(NotificationPanelViewController, "mBouncerShowing")) { + if (isQSExpanded() || getBooleanField(NotificationPanelViewController, "mBouncerShowing")) { return; } doubleTap = true; @@ -317,7 +300,6 @@ protected void beforeHookedMethod(MethodHookParam param1) throws Throwable { new Thread(() -> { //if keyguard is dismissed for any reason (face or udfps touch), then: while (turnedByTTT) { try { - //noinspection BusyWait sleep(200); if (keyguardNotShowing(mStatusBarKeyguardViewManager)) { turnOffTTT(); @@ -333,6 +315,23 @@ protected void beforeHookedMethod(MethodHookParam param1) throws Throwable { }); } + private boolean isQSExpanded() { + if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) + { + return (boolean)callMethod(NotificationPanelViewController, "isShadeFullyExpanded"); + } + else + { + try { //13QPR3 + return getBooleanField( + getObjectField(NotificationPanelViewController, "mQsController"), + "mExpanded"); + } catch (Throwable ignored) { + return getBooleanField(NotificationPanelViewController, "mQsExpanded"); //13QPR2,1 + } + } + } + private boolean keyguardNotShowing(Object mStatusBarKeyguardViewManager) { try { return !((boolean) callMethod(mStatusBarKeyguardViewManager, "isShowing")); diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/toolkit/ReflectionTools.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/toolkit/ReflectionTools.java index 488468840..6ada3607e 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/toolkit/ReflectionTools.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/toolkit/ReflectionTools.java @@ -88,6 +88,19 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { return result; } + public static void runDelayedOnMainThread(View viewObject, long delay, Runnable runnable) + { + new Thread(() -> { + try + { + Thread.sleep(delay); + viewObject.post(runnable); + } + catch (Throwable ignored) + {} + }).start(); + } + public static Set hookAllMethodsMatchPattern(Class clazz, String namePatter, XC_MethodHook callback) { Set result = new ArraySet<>(); From 0657f659906c99266b89f829409b04c5f2555bbc Mon Sep 17 00:00:00 2001 From: DrDisagree Date: Mon, 3 Jun 2024 14:43:26 +0600 Subject: [PATCH 120/162] Update .gitignore --- .idea/.gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.idea/.gitignore b/.idea/.gitignore index 26d33521a..f329f8c82 100644 --- a/.idea/.gitignore +++ b/.idea/.gitignore @@ -1,3 +1,5 @@ # Default ignored files /shelf/ /workspace.xml +/deploymentTargetSelector.xml +/studiobot.xml From 97e9b2a71cfc9faef3b0b64fdcccd1488229c34c Mon Sep 17 00:00:00 2001 From: DrDisagree Date: Mon, 3 Jun 2024 14:43:38 +0600 Subject: [PATCH 121/162] Rearrange launcher related mods --- app/src/main/res/values/strings.xml | 1 + app/src/main/res/xml/misc_prefs.xml | 53 ++++++++++++++++------------- 2 files changed, 31 insertions(+), 23 deletions(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a1a4e91ca..1a250575e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -297,6 +297,7 @@ Enabled for the next 5 minutes + Launcher options Disable screenshot sound Allow screenshot from restricted content diff --git a/app/src/main/res/xml/misc_prefs.xml b/app/src/main/res/xml/misc_prefs.xml index 6ed049622..313cc18bd 100644 --- a/app/src/main/res/xml/misc_prefs.xml +++ b/app/src/main/res/xml/misc_prefs.xml @@ -8,14 +8,6 @@ app:iconSpaceReserved="false" search:ignore="true"> - - - - - - + + + + + + + + + + Date: Mon, 3 Jun 2024 17:22:23 +0600 Subject: [PATCH 122/162] Update .gitignore --- .idea/.gitignore | 1 + .idea/misc.xml | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.idea/.gitignore b/.idea/.gitignore index f329f8c82..c9843e267 100644 --- a/.idea/.gitignore +++ b/.idea/.gitignore @@ -3,3 +3,4 @@ /workspace.xml /deploymentTargetSelector.xml /studiobot.xml +/other.xml diff --git a/.idea/misc.xml b/.idea/misc.xml index eedeebfde..4db06c5b1 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,3 +1,4 @@ + - + From 0bf53524db415bedbd56838fa708b95e850cfe50 Mon Sep 17 00:00:00 2001 From: DrDisagree Date: Mon, 3 Jun 2024 18:15:29 +0600 Subject: [PATCH 123/162] Fix home icon color for monochrome theme --- app/src/main/res/drawable/icon_background.xml | 4 ++-- app/src/main/res/layout/custom_preference_main.xml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/drawable/icon_background.xml b/app/src/main/res/drawable/icon_background.xml index 1fe720555..1d785a67f 100644 --- a/app/src/main/res/drawable/icon_background.xml +++ b/app/src/main/res/drawable/icon_background.xml @@ -1,6 +1,6 @@ - + android:tint="?attr/colorPrimary"> + \ No newline at end of file diff --git a/app/src/main/res/layout/custom_preference_main.xml b/app/src/main/res/layout/custom_preference_main.xml index 746d28909..812b2e53d 100644 --- a/app/src/main/res/layout/custom_preference_main.xml +++ b/app/src/main/res/layout/custom_preference_main.xml @@ -26,7 +26,7 @@ android:contentDescription="@android:string/untitled" android:scaleType="centerInside" android:visibility="gone" - app:tint="?attr/colorOnPrimaryContainer" /> + app:tint="?attr/colorOnSurface" /> Date: Mon, 3 Jun 2024 19:03:34 +0600 Subject: [PATCH 124/162] UI: Add physical buttons remap fragment --- .../ui/activities/SettingsActivity.java | 16 ++- app/src/main/res/values/arrays.xml | 108 ++++++++++++++++++ app/src/main/res/values/strings.xml | 15 +++ app/src/main/res/xml/misc_prefs.xml | 23 ++-- .../main/res/xml/physical_buttons_prefs.xml | 73 ++++++++++++ 5 files changed, 219 insertions(+), 16 deletions(-) create mode 100644 app/src/main/res/xml/physical_buttons_prefs.xml diff --git a/app/src/main/java/sh/siava/pixelxpert/ui/activities/SettingsActivity.java b/app/src/main/java/sh/siava/pixelxpert/ui/activities/SettingsActivity.java index f0a040c0d..8f5bc55df 100644 --- a/app/src/main/java/sh/siava/pixelxpert/ui/activities/SettingsActivity.java +++ b/app/src/main/java/sh/siava/pixelxpert/ui/activities/SettingsActivity.java @@ -132,6 +132,7 @@ protected void onCreate(Bundle savedInstanceState) { prefsList.add(new Object[]{R.xml.statusbar_settings, R.string.statusbar_header, new StatusbarFragment()}); prefsList.add(new Object[]{R.xml.theming_prefs, R.string.theme_customization_category, new ThemingFragment()}); prefsList.add(new Object[]{R.xml.three_button_prefs, R.string.threebutton_header_title, new ThreeButtonNavFragment()}); + prefsList.add(new Object[]{R.xml.physical_buttons_prefs, R.string.remap_physical_buttons_title, new PhysicalButtonRemapFragment()}); PreferenceHelper.init(ExtendedSharedPreferences.from(getDefaultSharedPreferences(createDeviceProtectedStorageContext()))); @@ -695,7 +696,20 @@ public int getLayoutResource() { } } - + + public static class PhysicalButtonRemapFragment extends ControlledPreferenceFragmentCompat { + @Override + public String getTitle() { + return getString(R.string.remap_physical_buttons_title); + } + + @Override + public int getLayoutResource() { + return R.xml.physical_buttons_prefs; + } + } + + public static class StatusbarFragment extends ControlledPreferenceFragmentCompat { @Override public String getTitle() { diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 36a86e632..10f127f16 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -254,6 +254,114 @@ 2 + + @string/word_default + @string/torch + @string/camera + @string/do_not_disturb + @string/pause_media + @string/skip_media + + + + 0 + 1 + 2 + 3 + 4 + 5 + + + + @string/word_default + @string/torch + @string/camera + @string/do_not_disturb + @string/pause_media + @string/skip_media + + + + 0 + 1 + 2 + 3 + 4 + 5 + + + + @string/word_default + @string/torch + @string/camera + @string/do_not_disturb + @string/pause_media + @string/skip_media + + + + 0 + 1 + 2 + 3 + 4 + 5 + + + + @string/word_default + @string/torch + @string/camera + @string/do_not_disturb + @string/pause_media + @string/skip_media + + + + 0 + 1 + 2 + 3 + 4 + 5 + + + + @string/word_default + @string/torch + @string/camera + @string/do_not_disturb + @string/pause_media + @string/skip_media + + + + 0 + 1 + 2 + 3 + 4 + 5 + + + + @string/word_default + @string/torch + @string/camera + @string/do_not_disturb + @string/pause_media + @string/skip_media + + + + 0 + 1 + 2 + 3 + 4 + 5 + + @string/overlay_none_title Blender Pro diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1a250575e..e3030ddea 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -290,6 +290,7 @@ Force Enabled Force Disabled Auto hide + Remap physical buttons Bypass package signature check @@ -557,4 +558,18 @@ Hooks Settings + + While screen is off + While screen is on + Long press power button + Long press volume up button + Long press volume down button + Double press power button + + Torch + Camera + Do not disturb + Pause media + Skip media + diff --git a/app/src/main/res/xml/misc_prefs.xml b/app/src/main/res/xml/misc_prefs.xml index 313cc18bd..c1e2521fb 100644 --- a/app/src/main/res/xml/misc_prefs.xml +++ b/app/src/main/res/xml/misc_prefs.xml @@ -109,6 +109,12 @@ android:title="@string/disable_overscroll" app:iconSpaceReserved="false" /> + + @@ -218,19 +224,6 @@ android:title="@string/so_fingerprint_sensor_enabled" app:iconSpaceReserved="false" /> - - - - - + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 0c09b701639ec36e9bfe4762738484501c2e2ac6 Mon Sep 17 00:00:00 2001 From: Siavash Date: Tue, 4 Jun 2024 08:12:50 +0330 Subject: [PATCH 125/162] thread sleep refactoring --- .../java/sh/siava/pixelxpert/modpacks/XPLauncher.java | 9 ++++----- .../pixelxpert/modpacks/launcher/CustomNavGestures.java | 3 +-- .../pixelxpert/modpacks/launcher/TaskbarActivator.java | 3 +-- .../pixelxpert/modpacks/systemui/BrightnessSlider.java | 6 +++--- .../pixelxpert/modpacks/systemui/ScreenGestures.java | 4 ++-- .../pixelxpert/modpacks/systemui/ThemeManager_13.java | 3 +-- .../pixelxpert/modpacks/systemui/ThemeManager_14.java | 3 +-- .../sh/siava/pixelxpert/modpacks/utils/Overlays.java | 2 +- .../sh/siava/pixelxpert/modpacks/utils/SystemUtils.java | 6 +++--- 9 files changed, 17 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/XPLauncher.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/XPLauncher.java index 839214373..16a706c6d 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/XPLauncher.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/XPLauncher.java @@ -10,7 +10,6 @@ import static sh.siava.pixelxpert.modpacks.Constants.SYSTEM_UI_PACKAGE; import static sh.siava.pixelxpert.modpacks.XPrefs.Xprefs; import static sh.siava.pixelxpert.modpacks.utils.BootLoopProtector.isBootLooped; -import static sh.siava.pixelxpert.modpacks.utils.SystemUtils.sleep; import android.annotation.SuppressLint; import android.app.Instrumentation; @@ -163,14 +162,14 @@ private void forceConnectRootService() while(SystemUtils.UserManager() == null || !SystemUtils.UserManager().isUserUnlocked()) //device is still CE encrypted { - sleep(2000); + SystemUtils.threadSleep(2000); } - sleep(5000); //wait for the unlocked account to settle down a bit + SystemUtils.threadSleep(5000); //wait for the unlocked account to settle down a bit while(rootProxyIPC == null) { connectRootService(); - sleep(5000); + SystemUtils.threadSleep(5000); } }).start(); } @@ -214,7 +213,7 @@ private void waitForXprefsLoad(XC_LoadPackage.LoadPackageParam lpParam) { } catch (Throwable ignored) { - sleep(1000); + SystemUtils.threadSleep(1000); } } diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/CustomNavGestures.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/CustomNavGestures.java index f2e1e2fb2..8100fb875 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/CustomNavGestures.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/CustomNavGestures.java @@ -8,7 +8,6 @@ import static de.robv.android.xposed.XposedHelpers.getObjectField; import static de.robv.android.xposed.XposedHelpers.setObjectField; import static sh.siava.pixelxpert.modpacks.XPrefs.Xprefs; -import static sh.siava.pixelxpert.modpacks.utils.SystemUtils.sleep; import android.content.ComponentName; import android.content.Context; @@ -288,7 +287,7 @@ private void switchAppProfile() { new Thread(() -> { try { - sleep(200); //waiting for recents window to vanish + SystemUtils.threadSleep(200); //waiting for recents window to vanish mContext.sendBroadcast(Constants.getAppProfileSwitchIntent()); } diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/TaskbarActivator.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/TaskbarActivator.java index a544cf2d0..d54954c13 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/TaskbarActivator.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/TaskbarActivator.java @@ -14,7 +14,6 @@ import static de.robv.android.xposed.XposedHelpers.setAdditionalInstanceField; import static de.robv.android.xposed.XposedHelpers.setObjectField; import static sh.siava.pixelxpert.modpacks.XPrefs.Xprefs; -import static sh.siava.pixelxpert.modpacks.utils.SystemUtils.sleep; import android.annotation.SuppressLint; import android.app.TaskInfo; @@ -263,7 +262,7 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { return; new Thread(() -> { refreshing = true; - sleep(100); + SystemUtils.threadSleep(100); TaskBarView.post(() -> { try { diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BrightnessSlider.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BrightnessSlider.java index 9be5abaa4..61b277bc8 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BrightnessSlider.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/BrightnessSlider.java @@ -11,7 +11,6 @@ import static de.robv.android.xposed.XposedHelpers.getObjectField; import static de.robv.android.xposed.XposedHelpers.setObjectField; import static sh.siava.pixelxpert.modpacks.XPrefs.Xprefs; -import static sh.siava.pixelxpert.modpacks.utils.SystemUtils.sleep; import static sh.siava.pixelxpert.modpacks.utils.toolkit.ReflectionTools.findMethod; import static sh.siava.pixelxpert.modpacks.utils.toolkit.ReflectionTools.runDelayedOnMainThread; @@ -49,6 +48,7 @@ import sh.siava.pixelxpert.modpacks.ResourceManager; import sh.siava.pixelxpert.modpacks.XPLauncher; import sh.siava.pixelxpert.modpacks.XposedModPack; +import sh.siava.pixelxpert.modpacks.utils.SystemUtils; @SuppressWarnings({"RedundantThrows", "unchecked", "rawtypes"}) public class BrightnessSlider extends XposedModPack { @@ -93,7 +93,7 @@ private void dataCollected(int id, Class BrightnessMirrorHandlerClass) { if (collectedFields.size() == 3) { new Thread(() -> { try { - sleep(5000); + SystemUtils.threadSleep(5000); createQQSBrightness(BrightnessMirrorHandlerClass); } catch (Throwable ignored) { } @@ -241,7 +241,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { new Thread(() -> { try { while (mBrightnessMirrorController == null) { - sleep(500); + SystemUtils.threadSleep(500); mBrightnessMirrorController = getObjectField(param.thisObject, "mBrightnessMirrorController"); } dataCollected(2, BrightnessMirrorHandlerClass); diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ScreenGestures.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ScreenGestures.java index 25d381e75..8d6cc6857 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ScreenGestures.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ScreenGestures.java @@ -149,7 +149,7 @@ public void run() { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { new Thread(() -> { - sleep(5000); //for some reason lsposed doesn't find methods in the class. so we'll hook to constructor and wait a bit! + SystemUtils.threadSleep(5000); //for some reason lsposed doesn't find methods in the class. so we'll hook to constructor and wait a bit! setHooks(param); }).start(); } @@ -300,7 +300,7 @@ protected void beforeHookedMethod(MethodHookParam param1) throws Throwable { new Thread(() -> { //if keyguard is dismissed for any reason (face or udfps touch), then: while (turnedByTTT) { try { - sleep(200); + SystemUtils.threadSleep(200); if (keyguardNotShowing(mStatusBarKeyguardViewManager)) { turnOffTTT(); } diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ThemeManager_13.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ThemeManager_13.java index 0e409e4b6..8a0cbda7b 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ThemeManager_13.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ThemeManager_13.java @@ -11,7 +11,6 @@ import static de.robv.android.xposed.XposedHelpers.getObjectField; import static de.robv.android.xposed.XposedHelpers.setObjectField; import static sh.siava.pixelxpert.modpacks.XPrefs.Xprefs; -import static sh.siava.pixelxpert.modpacks.utils.SystemUtils.sleep; import static sh.siava.pixelxpert.modpacks.utils.toolkit.ColorUtils.getColorAttrDefaultColor; import static sh.siava.pixelxpert.modpacks.utils.toolkit.OverlayTools.setOverlay; @@ -439,7 +438,7 @@ private void applyOverlays(boolean force) { setOverlay("QSLightThemeOverlay", false, true, false); setOverlay("QSLightThemeBSTOverlay", false, false, false); - sleep(50); + SystemUtils.threadSleep(50); if (lightQSHeaderEnabled && !isCurrentlyDark) { diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ThemeManager_14.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ThemeManager_14.java index d16f2a6c7..5f4445bf6 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ThemeManager_14.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ThemeManager_14.java @@ -14,7 +14,6 @@ import static de.robv.android.xposed.XposedHelpers.getObjectField; import static de.robv.android.xposed.XposedHelpers.setObjectField; import static sh.siava.pixelxpert.modpacks.XPrefs.Xprefs; -import static sh.siava.pixelxpert.modpacks.utils.SystemUtils.sleep; import static sh.siava.pixelxpert.modpacks.utils.toolkit.ColorUtils.getColorAttrDefaultColor; import static sh.siava.pixelxpert.modpacks.utils.toolkit.ReflectionTools.hookAllMethodsMatchPattern; @@ -506,7 +505,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { protected void afterHookedMethod(MethodHookParam param) throws Throwable { new Thread(() -> { try { - sleep(5000); + SystemUtils.threadSleep(5000); rebuildSysUI(true); } catch (Throwable ignored) {} }).start(); diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/Overlays.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/Overlays.java index a5856867d..e3a23e943 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/Overlays.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/Overlays.java @@ -127,7 +127,7 @@ class overlayStartupThread extends Thread { public void run() { for (int i = 0; i < 2; i++) { setAllInternal(false); - SystemUtils.sleep(20000);//wait some seconds in case any other mod plays with us at system startup, and apply again in background + SystemUtils.threadSleep(20000);//wait some seconds in case any other mod plays with us at system startup, and apply again in background } } } diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/SystemUtils.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/SystemUtils.java index eff601c12..002a5147d 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/SystemUtils.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/SystemUtils.java @@ -246,7 +246,7 @@ public SystemUtils(Context context) { registerVolumeChangeReceiver(); } - public static void sleep(int millis) + public static void threadSleep(int millis) { try { Thread.sleep(millis); @@ -451,10 +451,10 @@ public static void doubleToggleDarkMode() { darkSwitching = true; proxy.runCommand("cmd uimode night " + (isDark ? "no" : "yes")); - sleep(1000); + threadSleep(1000); proxy.runCommand("cmd uimode night " + (isDark ? "yes" : "no")); - sleep(500); + threadSleep(500); darkSwitching = false; } catch (Exception ignored) { } From 9e1f40a06665e000ac57d589664c22b4e321eab5 Mon Sep 17 00:00:00 2001 From: DrDisagree Date: Wed, 5 Jun 2024 01:15:14 +0600 Subject: [PATCH 126/162] Refactor searchable preference items --- .../ui/activities/SettingsActivity.java | 150 +++++++++--------- .../ui/models/SearchPreferenceItem.java | 31 ++++ 2 files changed, 103 insertions(+), 78 deletions(-) create mode 100644 app/src/main/java/sh/siava/pixelxpert/ui/models/SearchPreferenceItem.java diff --git a/app/src/main/java/sh/siava/pixelxpert/ui/activities/SettingsActivity.java b/app/src/main/java/sh/siava/pixelxpert/ui/activities/SettingsActivity.java index 8f5bc55df..9c6e97fd0 100644 --- a/app/src/main/java/sh/siava/pixelxpert/ui/activities/SettingsActivity.java +++ b/app/src/main/java/sh/siava/pixelxpert/ui/activities/SettingsActivity.java @@ -40,14 +40,13 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.topjohnwu.superuser.Shell; -import java.util.ArrayList; -import java.util.List; import java.util.Locale; import java.util.Objects; import sh.siava.pixelxpert.BuildConfig; import sh.siava.pixelxpert.R; import sh.siava.pixelxpert.databinding.SettingsActivityBinding; +import sh.siava.pixelxpert.ui.models.SearchPreferenceItem; import sh.siava.pixelxpert.utils.BitmapSubjectSegmenter; import sh.siava.pixelxpert.ui.fragments.HooksFragment; import sh.siava.pixelxpert.ui.fragments.UpdateFragment; @@ -72,11 +71,9 @@ public class SettingsActivity extends BaseActivity implements PreferenceFragment private static final String mData = "mDataKey"; private Integer selectedFragment = null; - String TAG = getClass().getSimpleName(); - private static FragmentManager fragmentManager; private HeaderFragment headerFragment; - private static final List prefsList = new ArrayList<>(); + private static SearchPreferenceItem[] searchItems = null; private static ActionBar actionBar; @@ -112,27 +109,7 @@ protected void onCreate(Bundle savedInstanceState) { fragmentManager = getSupportFragmentManager(); setSupportActionBar(binding.header.toolbar); actionBar = getSupportActionBar(); - - prefsList.add(new Object[]{R.xml.header_preferences, R.string.app_name, new HeaderFragment()}); - prefsList.add(new Object[]{R.xml.dialer_prefs, R.string.dialer_header, new DialerFragment()}); - prefsList.add(new Object[]{R.xml.gesture_nav_prefs, R.string.gesturenav_header, new GestureNavFragment()}); - prefsList.add(new Object[]{R.xml.hotspot_prefs, R.string.hotspot_header, new HotSpotFragment()}); - prefsList.add(new Object[]{R.xml.lock_screen_prefs, R.string.lockscreen_header_title, new LockScreenFragment()}); - prefsList.add(new Object[]{R.xml.lsqs_custom_text, R.string.netstat_header, new NetworkStatFragment()}); - prefsList.add(new Object[]{R.xml.misc_prefs, R.string.misc_header, new MiscFragment()}); - prefsList.add(new Object[]{R.xml.nav_prefs, R.string.nav_header, new NavFragment()}); - prefsList.add(new Object[]{R.xml.own_prefs_header, R.string.own_prefs_header, new OwnPrefsFragment()}); - prefsList.add(new Object[]{R.xml.packagemanger_prefs, R.string.pm_header, new PackageManagerFragment()}); - prefsList.add(new Object[]{R.xml.qs_tile_qty_prefs, R.string.qs_tile_qty_title, new QSTileQtyFragment()}); - prefsList.add(new Object[]{R.xml.quicksettings_prefs, R.string.qs_panel_category_title, new QuickSettingsFragment()}); - prefsList.add(new Object[]{R.xml.sbqs_network_prefs, R.string.ntsb_category_title, new NetworkFragment()}); - prefsList.add(new Object[]{R.xml.statusbar_batterybar_prefs, R.string.sbbb_header, new SBBBFragment()}); - prefsList.add(new Object[]{R.xml.statusbar_batteryicon_prefs, R.string.sbbIcon_header, new SBBIconFragment()}); - prefsList.add(new Object[]{R.xml.statusbar_clock_prefs, R.string.sbc_header, new SBCFragment()}); - prefsList.add(new Object[]{R.xml.statusbar_settings, R.string.statusbar_header, new StatusbarFragment()}); - prefsList.add(new Object[]{R.xml.theming_prefs, R.string.theme_customization_category, new ThemingFragment()}); - prefsList.add(new Object[]{R.xml.three_button_prefs, R.string.threebutton_header_title, new ThreeButtonNavFragment()}); - prefsList.add(new Object[]{R.xml.physical_buttons_prefs, R.string.remap_physical_buttons_title, new PhysicalButtonRemapFragment()}); + initSearchableItems(); PreferenceHelper.init(ExtendedSharedPreferences.from(getDefaultSharedPreferences(createDeviceProtectedStorageContext()))); @@ -175,6 +152,31 @@ protected void onCreate(Bundle savedInstanceState) { } } + private void initSearchableItems() { + searchItems = new SearchPreferenceItem[]{ + new SearchPreferenceItem(R.xml.header_preferences, R.string.app_name, new HeaderFragment()), + new SearchPreferenceItem(R.xml.dialer_prefs, R.string.dialer_header, new DialerFragment()), + new SearchPreferenceItem(R.xml.gesture_nav_prefs, R.string.gesturenav_header, new GestureNavFragment()), + new SearchPreferenceItem(R.xml.hotspot_prefs, R.string.hotspot_header, new HotSpotFragment()), + new SearchPreferenceItem(R.xml.lock_screen_prefs, R.string.lockscreen_header_title, new LockScreenFragment()), + new SearchPreferenceItem(R.xml.lsqs_custom_text, R.string.netstat_header, new NetworkStatFragment()), + new SearchPreferenceItem(R.xml.misc_prefs, R.string.misc_header, new MiscFragment()), + new SearchPreferenceItem(R.xml.nav_prefs, R.string.nav_header, new NavFragment()), + new SearchPreferenceItem(R.xml.own_prefs_header, R.string.own_prefs_header, new OwnPrefsFragment()), + new SearchPreferenceItem(R.xml.packagemanger_prefs, R.string.pm_header, new PackageManagerFragment()), + new SearchPreferenceItem(R.xml.qs_tile_qty_prefs, R.string.qs_tile_qty_title, new QSTileQtyFragment()), + new SearchPreferenceItem(R.xml.quicksettings_prefs, R.string.qs_panel_category_title, new QuickSettingsFragment()), + new SearchPreferenceItem(R.xml.sbqs_network_prefs, R.string.ntsb_category_title, new NetworkFragment()), + new SearchPreferenceItem(R.xml.statusbar_batterybar_prefs, R.string.sbbb_header, new SBBBFragment()), + new SearchPreferenceItem(R.xml.statusbar_batteryicon_prefs, R.string.sbbIcon_header, new SBBIconFragment()), + new SearchPreferenceItem(R.xml.statusbar_clock_prefs, R.string.sbc_header, new SBCFragment()), + new SearchPreferenceItem(R.xml.statusbar_settings, R.string.statusbar_header, new StatusbarFragment()), + new SearchPreferenceItem(R.xml.theming_prefs, R.string.theme_customization_category, new ThemingFragment()), + new SearchPreferenceItem(R.xml.three_button_prefs, R.string.threebutton_header_title, new ThreeButtonNavFragment()), + new SearchPreferenceItem(R.xml.physical_buttons_prefs, R.string.remap_physical_buttons_title, new PhysicalButtonRemapFragment()), + }; + } + @SuppressLint("NonConstantResourceId") private void setupBottomNavigationView() { getSupportFragmentManager().addOnBackStackChangedListener(() -> { @@ -276,7 +278,7 @@ private void tryMigratePrefs() { String migrateFileName = "PX_migrate.tmp"; @SuppressLint("SdCardPath") String migrateFilePath = "/sdcard/" + migrateFileName; - if (Shell.cmd(String.format("stat %s", migrateFilePath)).exec().getOut().size() > 0) { + if (!Shell.cmd(String.format("stat %s", migrateFilePath)).exec().getOut().isEmpty()) { String PXPrefsPath = "/data/user_de/0/sh.siava.pixelxpert/shared_prefs/sh.siava.pixelxpert_preferences.xml"; Shell.cmd(String.format("mv %s %s", migrateFilePath, PXPrefsPath)).exec(); Shell.cmd(String.format("chmod 777 %s", PXPrefsPath)).exec(); //system will correct the permissions upon next launch. let's just give it access to do so @@ -431,17 +433,20 @@ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { super.onCreatePreferences(savedInstanceState, rootKey); searchPreference = findPreference("searchPreference"); - SearchConfiguration config = searchPreference.getSearchConfiguration(); - config.setActivity((AppCompatActivity) getActivity()); - config.setFragmentContainerViewId(R.id.settings); - for (Object[] obj : prefsList) { - config.index((Integer) obj[0]).addBreadcrumb(this.getResources().getString((Integer) obj[1])); - } + if (searchPreference != null && getActivity() != null) { + SearchConfiguration config = searchPreference.getSearchConfiguration(); + config.setActivity((AppCompatActivity) getActivity()); + config.setFragmentContainerViewId(R.id.settings); + + for (SearchPreferenceItem searchItem : searchItems) { + config.index(searchItem.getXml()).addBreadcrumb(this.getResources().getString(searchItem.getTitle())); + } - config.setBreadcrumbsEnabled(true); - config.setHistoryEnabled(true); - config.setFuzzySearchEnabled(false); + config.setBreadcrumbsEnabled(true); + config.setHistoryEnabled(true); + config.setFuzzySearchEnabled(false); + } } private void onSearchResultClicked(SearchPreferenceResult result) { @@ -449,10 +454,10 @@ private void onSearchResultClicked(SearchPreferenceResult result) { searchPreference.setVisible(false); SearchPreferenceResult.highlight(new HeaderFragment(), result.getKey()); } else { - for (Object[] obj : prefsList) { - if ((Integer) obj[0] == result.getResourceFile()) { - replaceFragment((PreferenceFragmentCompat) obj[2]); - SearchPreferenceResult.highlight((PreferenceFragmentCompat) obj[2], result.getKey()); + for (SearchPreferenceItem searchItem : searchItems) { + if (searchItem.getXml() == result.getResourceFile()) { + replaceFragment(searchItem.getFragment()); + SearchPreferenceResult.highlight(searchItem.getFragment(), result.getKey()); break; } } @@ -517,11 +522,12 @@ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) new BitmapSubjectSegmenter(getActivity()).checkModelAvailability(moduleAvailabilityResponse -> findPreference("DWallpaperEnabled") - .setSummary( - moduleAvailabilityResponse.areModulesAvailable() - ? R.string.depth_wallpaper_model_ready - : R.string.depth_wallpaper_model_not_available)); + .setSummary( + moduleAvailabilityResponse.areModulesAvailable() + ? R.string.depth_wallpaper_model_ready + : R.string.depth_wallpaper_model_not_available)); } + @Override public String getTitle() { return getString(R.string.lockscreen_header_title); @@ -538,22 +544,20 @@ public void updateScreen(String key) { if (key == null) return; - switch (key) { - case "DWallpaperEnabled": - try { - boolean DepthEffectEnabled = mPreferences.getBoolean("DWallpaperEnabled", false); - - if (DepthEffectEnabled) { - new MaterialAlertDialogBuilder(getContext(), R.style.MaterialComponents_MaterialAlertDialog) - .setTitle(R.string.depth_effect_alert_title) - .setMessage(getString(R.string.depth_effect_alert_body, getString(R.string.sysui_restart_needed))) - .setPositiveButton(R.string.depth_effect_ok_btn, (dialog, which) -> AppUtils.Restart("systemui")) - .setCancelable(false) - .show(); - } - } catch (Exception ignored) { + if (key.equals("DWallpaperEnabled")) { + try { + boolean DepthEffectEnabled = mPreferences.getBoolean("DWallpaperEnabled", false); + + if (DepthEffectEnabled && getContext() != null) { + new MaterialAlertDialogBuilder(getContext(), R.style.MaterialComponents_MaterialAlertDialog) + .setTitle(R.string.depth_effect_alert_title) + .setMessage(getString(R.string.depth_effect_alert_body, getString(R.string.sysui_restart_needed))) + .setPositiveButton(R.string.depth_effect_ok_btn, (dialog, which) -> AppUtils.Restart("systemui")) + .setCancelable(false) + .show(); } - break; + } catch (Exception ignored) { + } } } } @@ -570,7 +574,6 @@ public int getLayoutResource() { } } - public static class NetworkFragment extends ControlledPreferenceFragmentCompat { @Override public String getTitle() { @@ -583,8 +586,6 @@ public int getLayoutResource() { } } - - public static class SBBIconFragment extends ControlledPreferenceFragmentCompat { @Override public String getTitle() { @@ -669,8 +670,6 @@ public int getLayoutResource() { } } - - public static class SBCFragment extends ControlledPreferenceFragmentCompat { @Override public String getTitle() { @@ -683,7 +682,6 @@ public int getLayoutResource() { } } - public static class ThreeButtonNavFragment extends ControlledPreferenceFragmentCompat { @Override public String getTitle() { @@ -709,7 +707,6 @@ public int getLayoutResource() { } } - public static class StatusbarFragment extends ControlledPreferenceFragmentCompat { @Override public String getTitle() { @@ -734,7 +731,6 @@ public int getLayoutResource() { } } - public static class QuickSettingsFragment extends ControlledPreferenceFragmentCompat { private FrameLayout pullDownIndicator; @@ -770,7 +766,7 @@ public void updateScreen(String key) { pullDownIndicator.setVisibility(PreferenceHelper.isVisible("QSPulldownPercent") ? View.VISIBLE : View.GONE); FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) pullDownIndicator.getLayoutParams(); - lp.width = Math.round(mPreferences.getSliderInt( "QSPulldownPercent", 25) * displayWidth / 100f); + lp.width = Math.round(mPreferences.getSliderInt("QSPulldownPercent", 25) * displayWidth / 100f); lp.gravity = Gravity.TOP | (Integer.parseInt(mPreferences.getString("QSPulldownSide", "1")) == 1 ? Gravity.RIGHT : Gravity.LEFT); pullDownIndicator.setLayoutParams(lp); } catch (Exception ignored) { @@ -791,7 +787,6 @@ private void createPullDownIndicator() { } } - public static class GestureNavFragment extends ControlledPreferenceFragmentCompat { FrameLayout leftBackGestureIndicator, rightBackGestureIndicator; @@ -826,9 +821,9 @@ public void updateScreen(String key) { int displayHeight = getActivity().getWindowManager().getCurrentWindowMetrics().getBounds().height(); int displayWidth = getActivity().getWindowManager().getCurrentWindowMetrics().getBounds().width(); - float leftSwipeUpPercentage = mPreferences.getSliderFloat( "leftSwipeUpPercentage", 25); + float leftSwipeUpPercentage = mPreferences.getSliderFloat("leftSwipeUpPercentage", 25); - float rightSwipeUpPercentage = mPreferences.getSliderFloat( "rightSwipeUpPercentage", 25); + float rightSwipeUpPercentage = mPreferences.getSliderFloat("rightSwipeUpPercentage", 25); int edgeWidth = Math.round(displayWidth * leftSwipeUpPercentage / 100f); ViewGroup.LayoutParams lp = leftSwipeGestureIndicator.getLayoutParams(); @@ -846,12 +841,12 @@ public void updateScreen(String key) { setVisibility(rightBackGestureIndicator, PreferenceHelper.isVisible("BackRightHeight"), 400); setVisibility(leftBackGestureIndicator, PreferenceHelper.isVisible("BackLeftHeight"), 400); - int edgeHeight = Math.round(displayHeight * mPreferences.getSliderInt( "BackRightHeight", 100) / 100f); + int edgeHeight = Math.round(displayHeight * mPreferences.getSliderInt("BackRightHeight", 100) / 100f); lp = rightBackGestureIndicator.getLayoutParams(); lp.height = edgeHeight; rightBackGestureIndicator.setLayoutParams(lp); - edgeHeight = Math.round(displayHeight * mPreferences.getSliderInt( "BackLeftHeight", 100) / 100f); + edgeHeight = Math.round(displayHeight * mPreferences.getSliderInt("BackLeftHeight", 100) / 100f); lp = leftBackGestureIndicator.getLayoutParams(); lp.height = edgeHeight; leftBackGestureIndicator.setLayoutParams(lp); @@ -945,7 +940,6 @@ public void onDestroy() { } } - public static class NetworkStatFragment extends ControlledPreferenceFragmentCompat { @Override public String getTitle() { @@ -958,7 +952,6 @@ public int getLayoutResource() { } } - public static class DialerFragment extends ControlledPreferenceFragmentCompat { @Override public String getTitle() { @@ -971,7 +964,6 @@ public int getLayoutResource() { } } - public static class OwnPrefsFragment extends ControlledPreferenceFragmentCompat { @Override public String getTitle() { @@ -1052,7 +1044,9 @@ public void updateScreen(String key) { switch (key) { case "appLanguage": try { - getActivity().recreate(); + if (getActivity() != null) { + getActivity().recreate(); + } } catch (Exception ignored) { } break; @@ -1098,7 +1092,7 @@ private void setAlternativeAppIcon(boolean alternativeThemedAppIconEnabled) { } @Override - protected void onNewIntent(Intent intent) { + protected void onNewIntent(@NonNull Intent intent) { super.onNewIntent(intent); setIntent(intent); } diff --git a/app/src/main/java/sh/siava/pixelxpert/ui/models/SearchPreferenceItem.java b/app/src/main/java/sh/siava/pixelxpert/ui/models/SearchPreferenceItem.java new file mode 100644 index 000000000..d57259fc1 --- /dev/null +++ b/app/src/main/java/sh/siava/pixelxpert/ui/models/SearchPreferenceItem.java @@ -0,0 +1,31 @@ +package sh.siava.pixelxpert.ui.models; + +import androidx.annotation.StringRes; +import androidx.annotation.XmlRes; + +import sh.siava.pixelxpert.utils.ControlledPreferenceFragmentCompat; + +public class SearchPreferenceItem { + + private final @XmlRes int xml; + private final @StringRes int title; + private final ControlledPreferenceFragmentCompat fragment; + + public SearchPreferenceItem(int xml, int title, ControlledPreferenceFragmentCompat fragment) { + this.xml = xml; + this.title = title; + this.fragment = fragment; + } + + public int getXml() { + return xml; + } + + public int getTitle() { + return title; + } + + public ControlledPreferenceFragmentCompat getFragment() { + return fragment; + } +} From 9b995114f8e298560e047b88e7fc885b44282832 Mon Sep 17 00:00:00 2001 From: DrDisagree Date: Wed, 5 Jun 2024 01:50:04 +0600 Subject: [PATCH 127/162] Make category titles more noticeable --- .../drawable/preference_category_background.xml | 6 ++++++ .../main/res/layout/custom_preference_category.xml | 14 ++++++++------ app/src/main/res/xml/quicksettings_prefs.xml | 8 +++----- 3 files changed, 17 insertions(+), 11 deletions(-) create mode 100644 app/src/main/res/drawable/preference_category_background.xml diff --git a/app/src/main/res/drawable/preference_category_background.xml b/app/src/main/res/drawable/preference_category_background.xml new file mode 100644 index 000000000..8e172ced2 --- /dev/null +++ b/app/src/main/res/drawable/preference_category_background.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/custom_preference_category.xml b/app/src/main/res/layout/custom_preference_category.xml index 362e7a780..9020d42fd 100644 --- a/app/src/main/res/layout/custom_preference_category.xml +++ b/app/src/main/res/layout/custom_preference_category.xml @@ -6,9 +6,7 @@ android:clickable="true" android:focusable="true" android:foreground="?android:selectableItemBackgroundBorderless" - android:minHeight="?android:attr/listPreferredItemHeight" - android:paddingHorizontal="32dp" - android:paddingTop="16dp"> + android:paddingHorizontal="32dp"> + android:layout_marginTop="8dp" + android:background="@drawable/preference_category_background" + android:paddingHorizontal="12dp" + android:paddingVertical="6dp" + android:textColor="?attr/colorOnPrimaryContainer" /> @@ -101,7 +101,6 @@ @@ -109,8 +108,7 @@ @@ -186,9 +184,9 @@ app:iconSpaceReserved="false" /> From 028a416876c21e2ccacb82b8416c6ba076b63f98 Mon Sep 17 00:00:00 2001 From: Siavash Date: Wed, 5 Jun 2024 16:40:15 +0330 Subject: [PATCH 128/162] CHANGELOG: Added option to remap physical buttons to custom actions --- .github/edit2MakeNewCanary | 2 +- .../modpacks/android/ScreenOffKeys.java | 304 +++++++++++++----- app/src/main/res/values/arrays.xml | 105 +----- app/src/main/res/values/strings.xml | 12 +- .../main/res/xml/physical_buttons_prefs.xml | 24 +- 5 files changed, 246 insertions(+), 201 deletions(-) diff --git a/.github/edit2MakeNewCanary b/.github/edit2MakeNewCanary index 65aeddb0b..04ad0604c 100644 --- a/.github/edit2MakeNewCanary +++ b/.github/edit2MakeNewCanary @@ -1 +1 @@ -Editing this file will trigger the build script for a new canary. \ No newline at end of file +Editing this file will trigger the build script for a new canary.. \ No newline at end of file diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/android/ScreenOffKeys.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/android/ScreenOffKeys.java index eb9a18d55..fa47f057a 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/android/ScreenOffKeys.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/android/ScreenOffKeys.java @@ -1,21 +1,25 @@ package sh.siava.pixelxpert.modpacks.android; +import static android.os.VibrationAttributes.USAGE_ACCESSIBILITY; +import static android.os.VibrationEffect.EFFECT_TICK; +import static android.view.KeyEvent.ACTION_DOWN; +import static android.view.KeyEvent.KEYCODE_VOLUME_DOWN; +import static android.view.KeyEvent.KEYCODE_VOLUME_UP; import static de.robv.android.xposed.XposedBridge.hookAllMethods; -import static de.robv.android.xposed.XposedBridge.hookMethod; -import static de.robv.android.xposed.XposedBridge.log; import static de.robv.android.xposed.XposedHelpers.callMethod; import static de.robv.android.xposed.XposedHelpers.findClass; -import static de.robv.android.xposed.XposedHelpers.findMethodExact; import static de.robv.android.xposed.XposedHelpers.getObjectField; +import static de.robv.android.xposed.XposedHelpers.setObjectField; import static sh.siava.pixelxpert.modpacks.XPrefs.Xprefs; +import static sh.siava.pixelxpert.modpacks.utils.SystemUtils.sleep; +import static sh.siava.pixelxpert.modpacks.utils.SystemUtils.threadSleep; +import android.annotation.SuppressLint; import android.content.Context; -import android.content.Intent; import android.media.AudioManager; import android.os.Handler; import android.os.SystemClock; -import android.os.VibrationAttributes; -import android.os.VibrationEffect; +import android.view.Display; import android.view.KeyEvent; import android.view.ViewConfiguration; @@ -26,133 +30,242 @@ import sh.siava.pixelxpert.modpacks.Constants; import sh.siava.pixelxpert.modpacks.XposedModPack; import sh.siava.pixelxpert.modpacks.utils.SystemUtils; +import sh.siava.pixelxpert.modpacks.utils.toolkit.ReflectionTools; @SuppressWarnings("RedundantThrows") public class ScreenOffKeys extends XposedModPack { public static final String listenPackage = Constants.SYSTEM_FRAMEWORK_PACKAGE; - public static final int LONG_PRESS_POWER_SHUT_OFF_NO_CONFIRM = 3; - private static boolean replaceAssistantWithTorch = false; - private static boolean holdVolumeToSkip = false; - private long wakeTime = 0; - // private boolean isVolumeLongPress = false; - private boolean isVolDown = false; + + public static final int PHYSICAL_ACTION_NONE = 0; + public static final int PHYSICAL_ACTION_TORCH = 1; + public static final int PHYSICAL_ACTION_CAMERA = 2; + public static final int PHYSICAL_ACTION_ASSISTANT = 3; + /** @noinspection unused*/ + public static final int PHYSICAL_ACTION_DND = 4; + public static final int PHYSICAL_ACTION_PLAY_PAUSE = 5; + public static final int PHYSICAL_ACTION_MEDIA_NEXT = 6; + public static final int PHYSICAL_ACTION_MEDIA_PREV = 7; + public static final int WAKE_REASON_POWER_BUTTON = 1; + public static final int CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP = 1; + private static final int INVOCATION_TYPE_POWER_BUTTON_LONG_PRESS = 6; + + + private static int longPressPowerButtonScreenOff = 0; + private static int longPressPowerButtonScreenOn = 0; + private static int doublePressPowerButtonScreenOff = 0; + private static int doublePressPowerButtonScreenOn = 0; + private static int longPressVolumeUpButtonScreenOff = 0; + private static int longPressVolumeDownButtonScreenOff = 0; + + Method launchAssistActionMethod; + private Object windowMan; + private long mWakeTime = 0; + + VolumeLongPressRunnable mVolumeLongPress = new VolumeLongPressRunnable(false); public ScreenOffKeys(Context context) { super(context); } + @SuppressLint("CheckResult") @Override public void updatePrefs(String... Key) { - holdVolumeToSkip = Xprefs.getBoolean("holdVolumeToSkip", false); - replaceAssistantWithTorch = Xprefs.getBoolean("replaceAssistantwithTorch", false); + try { + longPressPowerButtonScreenOff = Integer.parseInt(Xprefs.getString("longPressPowerButtonScreenOff", "0")); + longPressPowerButtonScreenOn = Integer.parseInt(Xprefs.getString("longPressPowerButtonScreenOn", "0")); - //make sure camera manager is ready and registered flashlight events - if(replaceAssistantWithTorch) //noinspection ResultOfMethodCallIgnored - SystemUtils.CameraManager(); + doublePressPowerButtonScreenOff = Integer.parseInt(Xprefs.getString("doublePressPowerButtonScreenOff", "0")); + doublePressPowerButtonScreenOn = Integer.parseInt(Xprefs.getString("doublePressPowerButtonScreenOn", "0")); + + longPressVolumeUpButtonScreenOff = Integer.parseInt(Xprefs.getString("longPressVolumeUpButtonScreenOff", "0")); + longPressVolumeDownButtonScreenOff = Integer.parseInt(Xprefs.getString("longPressVolumeDownButtonScreenOff", "0")); + //noinspection ResultOfMethodCallIgnored + SystemUtils.CameraManager(); //init CameraManager to listen to flash status + } + catch (Throwable ignored){} } @Override public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { - Class PhoneWindowManagerClass; - Method powerLongPressMethod; - Method interceptKeyBeforeQueueingMethod; - try { - PhoneWindowManagerClass = findClass("com.android.server.policy.PhoneWindowManager", lpParam.classLoader); + Class PhoneWindowManagerClass = findClass("com.android.server.policy.PhoneWindowManager", lpParam.classLoader); + Class PowerKeyRuleClass = findClass("com.android.server.policy.PhoneWindowManager$PowerKeyRule", lpParam.classLoader); + Class GestureLauncherServiceClass = findClass("com.android.server.GestureLauncherService", lpParam.classLoader); + launchAssistActionMethod = ReflectionTools.findMethod(PhoneWindowManagerClass, "launchAssistAction"); - powerLongPressMethod = findMethodExact(PhoneWindowManagerClass, "powerLongPress", long.class); - interceptKeyBeforeQueueingMethod = findMethodExact(PhoneWindowManagerClass, "interceptKeyBeforeQueueing", KeyEvent.class, int.class); + hookAllMethods(GestureLauncherServiceClass, "handleCameraGesture", new XC_MethodHook() { //double tap on power is handled here + @Override + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + boolean screenIsOn = screenIsOn(true); + boolean forceScreenOffAction = longPressPowerButtonScreenOff == PHYSICAL_ACTION_TORCH && SystemUtils.isFlashOn(); - Runnable mVolumeLongPress = () -> { - try { - Intent keyIntent = new Intent(Intent.ACTION_MEDIA_BUTTON, null); - KeyEvent keyEvent = new KeyEvent(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), KeyEvent.ACTION_DOWN, (isVolDown) ? KeyEvent.KEYCODE_MEDIA_PREVIOUS : KeyEvent.KEYCODE_MEDIA_NEXT, 0); - keyIntent.putExtra(Intent.EXTRA_KEY_EVENT, keyEvent); - SystemUtils.AudioManager().dispatchMediaKeyEvent(keyEvent); - - keyEvent = KeyEvent.changeAction(keyEvent, KeyEvent.ACTION_UP); - keyIntent.putExtra(Intent.EXTRA_KEY_EVENT, keyEvent); - SystemUtils.AudioManager().dispatchMediaKeyEvent(keyEvent); + if(doublePressPowerButtonScreenOff != PHYSICAL_ACTION_NONE && (!screenIsOn || forceScreenOffAction)) + { + param.setResult(launchAction(doublePressPowerButtonScreenOff, screenIsOn, true)); + } + else if(doublePressPowerButtonScreenOn != PHYSICAL_ACTION_NONE && screenIsOn) + { + param.setResult(launchAction(doublePressPowerButtonScreenOn, screenIsOn, true)); + } + } + }); - SystemUtils.vibrate(VibrationEffect.EFFECT_TICK, VibrationAttributes.USAGE_ACCESSIBILITY); - } catch (Throwable ignored) { - } - }; + hookAllMethods(PhoneWindowManagerClass, "enableScreen", new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + windowMan = param.thisObject; + Object gm = getObjectField(param.thisObject,"mGestureLauncherService"); + setObjectField(gm, "mCameraDoubleTapPowerEnabled", true); + } + }); - hookMethod(interceptKeyBeforeQueueingMethod, new XC_MethodHook() { + hookAllMethods(PowerKeyRuleClass, "onLongPress", new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - if (!holdVolumeToSkip) return; - try { - Handler mHandler = (Handler) getObjectField(param.thisObject, "mHandler"); - - KeyEvent e = (KeyEvent) param.args[0]; - int Keycode = e.getKeyCode(); - - switch (e.getAction()) { - case KeyEvent.ACTION_UP: - if (mHandler.hasCallbacks(mVolumeLongPress)) { - SystemUtils.AudioManager().adjustStreamVolume(AudioManager.STREAM_MUSIC, Keycode == KeyEvent.KEYCODE_VOLUME_DOWN ? AudioManager.ADJUST_LOWER : AudioManager.ADJUST_RAISE, 0); - mHandler.removeCallbacks(mVolumeLongPress); - } - return; - case KeyEvent.ACTION_DOWN: - if (!SystemUtils.PowerManager().isInteractive() && (Keycode == KeyEvent.KEYCODE_VOLUME_DOWN || Keycode == KeyEvent.KEYCODE_VOLUME_UP) && SystemUtils.AudioManager().isMusicActive()) { - isVolDown = (Keycode == KeyEvent.KEYCODE_VOLUME_DOWN); - mHandler.postDelayed(mVolumeLongPress, ViewConfiguration.getLongPressTimeout()); - param.setResult(0); - } - } - } catch (Throwable ignored) { + boolean screenIsOn = screenIsOn(true); + boolean handled = false; + + boolean forceScreenOffAction = longPressPowerButtonScreenOff == PHYSICAL_ACTION_TORCH && SystemUtils.isFlashOn(); + + if(longPressPowerButtonScreenOff != PHYSICAL_ACTION_NONE && (!screenIsOn || forceScreenOffAction)) + { + handled = launchAction(longPressPowerButtonScreenOff, screenIsOn, false); + } else if (longPressPowerButtonScreenOn != PHYSICAL_ACTION_NONE && screenIsOn) { + handled = launchAction(longPressPowerButtonScreenOn, screenIsOn, false); } + + if(handled) + param.setResult(null); } }); hookAllMethods(PhoneWindowManagerClass, "startedWakingUp", new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - if (!replaceAssistantWithTorch) return; - int r = (int) param.args[param.args.length-1]; - - if (r == 1) { - wakeTime = SystemClock.uptimeMillis(); + if ((int) param.args[param.args.length-1] == WAKE_REASON_POWER_BUTTON) { + mWakeTime = SystemClock.uptimeMillis(); } } }); - - hookMethod(powerLongPressMethod, new XC_MethodHook() { + hookAllMethods(PhoneWindowManagerClass, "interceptKeyBeforeQueueing", new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - boolean screenIsOn = SystemClock.uptimeMillis() - wakeTime > 1000; - if (!replaceAssistantWithTorch - || (screenIsOn - && !SystemUtils.isFlashOn())) - return; - try { - if ((int) callMethod(param.thisObject, "getResolvedLongPressOnPowerBehavior") - == LONG_PRESS_POWER_SHUT_OFF_NO_CONFIRM) // this is a force shutdown event. never play with it + KeyEvent event = (KeyEvent) param.args[0]; + int keyCode = event.getKeyCode(); + + if(!screenIsOn(false) && + ((keyCode == KEYCODE_VOLUME_UP && longPressVolumeUpButtonScreenOff != PHYSICAL_ACTION_NONE) || + (keyCode == KEYCODE_VOLUME_DOWN && longPressVolumeDownButtonScreenOff != PHYSICAL_ACTION_NONE))) { - return; + Handler handler = (Handler) getObjectField(param.thisObject, "mHandler"); + + switch (event.getAction()) { + case KeyEvent.ACTION_UP: + if (handler.hasCallbacks(mVolumeLongPress)) { + SystemUtils.AudioManager().adjustStreamVolume(AudioManager.STREAM_MUSIC, keyCode == KeyEvent.KEYCODE_VOLUME_DOWN ? AudioManager.ADJUST_LOWER : AudioManager.ADJUST_RAISE, 0); + handler.removeCallbacks(mVolumeLongPress); + } + return; + case KeyEvent.ACTION_DOWN: + mVolumeLongPress = new VolumeLongPressRunnable(keyCode == KEYCODE_VOLUME_UP); + handler.postDelayed(mVolumeLongPress, ViewConfiguration.getLongPressTimeout()); + param.setResult(0); + break; + } } + } catch (Throwable ignored) + {} - SystemUtils.toggleFlash(); + } + }); + } catch (Throwable ignored) {} + } - SystemUtils.vibrate(VibrationEffect.EFFECT_TICK, VibrationAttributes.USAGE_ACCESSIBILITY); + private boolean screenIsOn(boolean useWakeTime) { //for power button, display state isn't reliable enough because pressing power will trigger it + if(useWakeTime) { + return SystemClock.uptimeMillis() - mWakeTime > 1000; + } + Display defaultDisplay = (Display) getObjectField(windowMan, "mDefaultDisplay"); + return defaultDisplay.getState() == Display.STATE_ON; + } - param.setResult(null); + /** @noinspection DataFlowIssue*/ + private boolean launchAction(int action, boolean screenIsOn, boolean delaySleep) + { + try { + boolean handled = false; + boolean shouldSleep = true; - if(!screenIsOn) - callMethod(SystemUtils.PowerManager(), "goToSleep", SystemClock.uptimeMillis()); - } catch (Throwable T) { - log(T); + switch (action) + { + case PHYSICAL_ACTION_TORCH: + SystemUtils.toggleFlash(); + if(!screenIsOn) sleep(); + handled = true; + break; + case PHYSICAL_ACTION_CAMERA: + try { + Object gestureLauncherService = getObjectField(windowMan, "mGestureLauncherService"); + handled = (boolean) callMethod(gestureLauncherService, "handleCameraGesture", false, CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP); + shouldSleep = false; + } catch (Throwable ignored){} + break; + case PHYSICAL_ACTION_ASSISTANT: + try { + launchAssistActionMethod.invoke(windowMan, null, -2, SystemClock.uptimeMillis(), INVOCATION_TYPE_POWER_BUTTON_LONG_PRESS); + handled = true; + shouldSleep = false; + } + catch (Throwable ignored){} + break; + case PHYSICAL_ACTION_PLAY_PAUSE: + dispatchAudioKey(KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE); + handled = true; + break; + case PHYSICAL_ACTION_MEDIA_NEXT: + if(SystemUtils.AudioManager().isMusicActive()) + { + dispatchAudioKey(KeyEvent.KEYCODE_MEDIA_NEXT); } + handled = true; + break; + case PHYSICAL_ACTION_MEDIA_PREV: + if(SystemUtils.AudioManager().isMusicActive()) + { + dispatchAudioKey(KeyEvent.KEYCODE_MEDIA_PREVIOUS); + } + handled = true; + break; + } + + if(handled) + { + SystemUtils.vibrate(EFFECT_TICK, USAGE_ACCESSIBILITY); + if(!screenIsOn && shouldSleep) + { + new Thread(() -> { + if(delaySleep) + { + threadSleep(500); + } + sleep(); + }).start(); } - }); - } catch (Throwable t) { - log(t); + } + + return handled; } + catch (Throwable ignored){} + return false; + } + + private void dispatchAudioKey(int keyCode) { + //noinspection DataFlowIssue + SystemUtils.AudioManager().dispatchMediaKeyEvent(new KeyEvent(ACTION_DOWN, keyCode)); + + SystemUtils.AudioManager().dispatchMediaKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, keyCode)); } @Override @@ -160,4 +273,19 @@ public boolean listensTo(String packageName) { return listenPackage.equals(packageName); } -} + class VolumeLongPressRunnable implements Runnable { + boolean mIsVolumeUp; + public VolumeLongPressRunnable(boolean isVolumeUp) + { + mIsVolumeUp = isVolumeUp; + } + @Override + public void run() { + launchAction(mIsVolumeUp + ? longPressVolumeUpButtonScreenOff + : longPressVolumeDownButtonScreenOff, + false, + false); + } + } +} \ No newline at end of file diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 10f127f16..6c79dc978 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -254,112 +254,27 @@ 2 - + @string/word_default @string/torch @string/camera - @string/do_not_disturb + @string/assistant + @string/pause_media - @string/skip_media + @string/skip_media_next + @string/skip_media_prev - + 0 1 2 3 - 4 - 5 - - - - @string/word_default - @string/torch - @string/camera - @string/do_not_disturb - @string/pause_media - @string/skip_media - - - - 0 - 1 - 2 - 3 - 4 - 5 - - - - @string/word_default - @string/torch - @string/camera - @string/do_not_disturb - @string/pause_media - @string/skip_media - - - - 0 - 1 - 2 - 3 - 4 - 5 - - - - @string/word_default - @string/torch - @string/camera - @string/do_not_disturb - @string/pause_media - @string/skip_media - - - - 0 - 1 - 2 - 3 - 4 - 5 - - - - @string/word_default - @string/torch - @string/camera - @string/do_not_disturb - @string/pause_media - @string/skip_media - - - - 0 - 1 - 2 - 3 - 4 - 5 - - - - @string/word_default - @string/torch - @string/camera - @string/do_not_disturb - @string/pause_media - @string/skip_media - - - - 0 - 1 - 2 - 3 - 4 + 5 + 6 + 7 + 8 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e3030ddea..cb9b59771 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -566,10 +566,12 @@ Long press volume down button Double press power button - Torch - Camera - Do not disturb - Pause media - Skip media + Toggle torch + Launch camera + Launch assistant + Toggle Do not disturb + Play/Pause media + Media control - Skip + Media control - Previous diff --git a/app/src/main/res/xml/physical_buttons_prefs.xml b/app/src/main/res/xml/physical_buttons_prefs.xml index 76012ae50..a25237ef8 100644 --- a/app/src/main/res/xml/physical_buttons_prefs.xml +++ b/app/src/main/res/xml/physical_buttons_prefs.xml @@ -10,8 +10,8 @@ Date: Wed, 5 Jun 2024 13:19:47 +0000 Subject: [PATCH 129/162] Version update: Release --- CanaryChangelog.md | 3 +++ MagiskModBase/module.prop | 4 ++-- MagiskModuleUpdate_Full.json | 4 ++-- MagiskModuleUpdate_Xposed.json | 4 ++-- app/build.gradle | 4 ++-- latestCanary.json | 4 ++-- 6 files changed, 13 insertions(+), 10 deletions(-) diff --git a/CanaryChangelog.md b/CanaryChangelog.md index 02f5deb9e..688677c57 100644 --- a/CanaryChangelog.md +++ b/CanaryChangelog.md @@ -1,3 +1,6 @@ +**canary-363** +- Added option to remap physical buttons to custom actions + **canary-362** - Adaptive brightness shortcut placement improved diff --git a/MagiskModBase/module.prop b/MagiskModBase/module.prop index 6a16710a2..ce8b89f7e 100644 --- a/MagiskModBase/module.prop +++ b/MagiskModBase/module.prop @@ -1,7 +1,7 @@ id=PixelXpert name=Pixel Xpert -version=canary-362 -versionCode=362 +version=canary-363 +versionCode=363 author=Pixel Xpert Team description=Xposed based module for customizations on Pixel roms. Android 13+ updateJson=https://raw.githubusercontent.com/siavash79/PixelXpert/canary/MagiskModuleUpdate_Xposed.json diff --git a/MagiskModuleUpdate_Full.json b/MagiskModuleUpdate_Full.json index c443553ad..ef0dff49a 100644 --- a/MagiskModuleUpdate_Full.json +++ b/MagiskModuleUpdate_Full.json @@ -1,6 +1,6 @@ { - "version": "canary-362", - "versionCode": 362, + "version": "canary-363", + "versionCode": 363, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/MagiskModuleUpdate_Xposed.json b/MagiskModuleUpdate_Xposed.json index c443553ad..ef0dff49a 100644 --- a/MagiskModuleUpdate_Xposed.json +++ b/MagiskModuleUpdate_Xposed.json @@ -1,6 +1,6 @@ { - "version": "canary-362", - "versionCode": 362, + "version": "canary-363", + "versionCode": 363, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 844504f35..7195dbedc 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "sh.siava.pixelxpert" minSdk 33 targetSdk 34 - versionCode 362 - versionName "canary-362" + versionCode 363 + versionName "canary-363" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/latestCanary.json b/latestCanary.json index 3e169f686..edc3e4ade 100644 --- a/latestCanary.json +++ b/latestCanary.json @@ -1,6 +1,6 @@ { - "version": "canary-362", - "versionCode": 362, + "version": "canary-363", + "versionCode": 363, "zipUrl_Xposed": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "zipUrl_Full": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" From 91b18328c81c03790a41b0ca34ef6deb3f6403a9 Mon Sep 17 00:00:00 2001 From: Siavash Date: Sat, 8 Jun 2024 09:08:46 +0330 Subject: [PATCH 130/162] forcing power double click to work for double click gestures --- .../sh/siava/pixelxpert/modpacks/android/ScreenOffKeys.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/android/ScreenOffKeys.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/android/ScreenOffKeys.java index fa47f057a..8bc82be26 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/android/ScreenOffKeys.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/android/ScreenOffKeys.java @@ -114,8 +114,10 @@ else if(doublePressPowerButtonScreenOn != PHYSICAL_ACTION_NONE && screenIsOn) @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { windowMan = param.thisObject; - Object gm = getObjectField(param.thisObject,"mGestureLauncherService"); - setObjectField(gm, "mCameraDoubleTapPowerEnabled", true); + + setObjectField(getObjectField(param.thisObject,"mGestureLauncherService"), + "mCameraDoubleTapPowerEnabled", + true); } }); From 5f51c2a96cd1c62c23cd7775bbbc5eb0c3322f7c Mon Sep 17 00:00:00 2001 From: Siavash Date: Sat, 8 Jun 2024 15:27:22 +0330 Subject: [PATCH 131/162] CHANGELOG: Fixed notification icon count limit. The setting might (... will) not work on older android versions anymore --- .../modpacks/systemui/StatusbarMods.java | 53 +++++++++++++++++-- .../NotificationIconContainerOverride.java | 22 +++++--- 2 files changed, 64 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/StatusbarMods.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/StatusbarMods.java index d015be7ae..ed7b2864a 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/StatusbarMods.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/StatusbarMods.java @@ -150,7 +150,10 @@ public class StatusbarMods extends XposedModPack { private Object QSBH = null; private ViewGroup mStatusBar; private static boolean notificationAreaMultiRow = false; - + private static int NotificationAODIconLimit = 3; + private static int NotificationIconLimit = 4; + private Object AODNIC; + private Object SBNIC; private Object mCollapsedStatusBarFragment = null; private ViewGroup mStatusbarStartSide = null; private View mCenteredIconArea = null; @@ -271,15 +274,22 @@ public void updatePrefs(String... Key) { notificationAreaMultiRow = Xprefs.getBoolean("notificationAreaMultiRow", false); try { - NotificationIconContainerOverride.MAX_STATIC_ICONS = Integer.parseInt(Xprefs.getString("NotificationIconLimit", "").trim()); + NotificationIconLimit = Integer.parseInt(Xprefs.getString("NotificationIconLimit", "").trim()); } catch (Throwable ignored) { - NotificationIconContainerOverride.MAX_STATIC_ICONS = 4; + NotificationIconLimit = getIntegerResource("max_notif_static_icons", 4); } + try { - NotificationIconContainerOverride.MAX_ICONS_ON_AOD = Integer.parseInt(Xprefs.getString("NotificationAODIconLimit", "").trim()); + NotificationAODIconLimit = Integer.parseInt(Xprefs.getString("NotificationAODIconLimit", "").trim()); } catch (Throwable ignored) { - NotificationIconContainerOverride.MAX_ICONS_ON_AOD = 3; + NotificationAODIconLimit = getIntegerResource("max_notif_icons_on_aod", 3); + } + + if(AODNIC != null) + { + setObjectField(AODNIC, "maxIcons", NotificationAODIconLimit); + setObjectField(SBNIC, "maxIcons", NotificationIconLimit); } List paddings = Xprefs.getSliderValues("statusbarPaddings", 0); @@ -471,6 +481,17 @@ public void updatePrefs(String... Key) { } } + @SuppressLint("DiscouragedApi") + private int getIntegerResource(String resourceName, int defaultValue) { + try { + return mContext.getResources().getInteger(mContext.getResources().getIdentifier(resourceName, "integer", mContext.getPackageName())); + } + catch (Throwable ignored) + { + return defaultValue; + } + } + private void updateClock() { try { mClockView.post(() -> { //the builtin update method doesn't care about the format. Just the text sadly @@ -521,11 +542,33 @@ public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Th Class TunerServiceImplClass = findClass("com.android.systemui.tuner.TunerServiceImpl", lpParam.classLoader); Class ConnectivityCallbackHandlerClass = findClass("com.android.systemui.statusbar.connectivity.CallbackHandler", lpParam.classLoader); Class HeadsUpStatusBarViewClass = findClass("com.android.systemui.statusbar.HeadsUpStatusBarView", lpParam.classLoader); + Class NotificationIconContainerAlwaysOnDisplayViewModelClass = findClassIfExists("com.android.systemui.statusbar.notification.icon.ui.viewmodel.NotificationIconContainerAlwaysOnDisplayViewModel", lpParam.classLoader); + Class NotificationIconContainerStatusBarViewModelClass = findClassIfExists("com.android.systemui.statusbar.notification.icon.ui.viewmodel.NotificationIconContainerStatusBarViewModel", lpParam.classLoader); StatusBarIconClass = findClass("com.android.internal.statusbar.StatusBarIcon", lpParam.classLoader); StatusBarIconHolderClass = findClass("com.android.systemui.statusbar.phone.StatusBarIconHolder", lpParam.classLoader); SystemUIDialogClass = findClass("com.android.systemui.statusbar.phone.SystemUIDialog", lpParam.classLoader); //endregion + + if(NotificationIconContainerAlwaysOnDisplayViewModelClass != null) //Viewbinder implementation of the notification icon container + { + hookAllConstructors(NotificationIconContainerAlwaysOnDisplayViewModelClass, new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + AODNIC = param.thisObject; + setObjectField(AODNIC, "maxIcons", NotificationAODIconLimit); + } + }); + hookAllConstructors(NotificationIconContainerStatusBarViewModelClass, new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + SBNIC = param.thisObject; + setObjectField(SBNIC, "maxIcons", NotificationIconLimit); + } + }); + } + + initSwitchIcon(); //forcing a refresh on statusbar once the charging chip goes away to avoid layout issues diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/NotificationIconContainerOverride.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/NotificationIconContainerOverride.java index cf012df11..8985ecd2b 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/NotificationIconContainerOverride.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/NotificationIconContainerOverride.java @@ -17,11 +17,9 @@ public class NotificationIconContainerOverride { public static final int STATE_ICON = 0; public static final int STATE_DOT = 1; public static final int STATE_HIDDEN = 2; - - public static int MAX_STATIC_ICONS = 4; - public static int MAX_ICONS_ON_AOD = 3; private static final int MAX_DOTS = 1; private static final int NO_VALUE = Integer.MIN_VALUE; + public static final int LEGACY_MAX_ICONS = 4; public static void calculateIconXTranslations(XC_MethodHook.MethodHookParam param) { //A13 ViewGroup thisObject = (ViewGroup) param.thisObject; @@ -58,8 +56,15 @@ public static void calculateIconXTranslations(XC_MethodHook.MethodHookParam para setObjectField(thisObject, "mFirstVisibleIconState", iconState); } int mSpeedBumpIndex = getIntField(thisObject, "mSpeedBumpIndex"); - boolean forceOverflow = mSpeedBumpIndex != -1 && i >= mSpeedBumpIndex - && getFloatField(iconState, "iconAppearAmount") > 0.0f; + + int maxIcons = LEGACY_MAX_ICONS; //legacy versions + try { //viewmodel versions of the class + maxIcons = getIntField(thisObject, "mMaxIcons"); + } + catch (Throwable ignored){} + + boolean forceOverflow = shouldForceOverflow(i, mSpeedBumpIndex, getFloatField(iconState, "iconAppearAmount"), maxIcons); + boolean isLastChild = i == childCount - 1; float drawingScale; @@ -154,7 +159,12 @@ public static void calculateIconXTranslations(XC_MethodHook.MethodHookParam para } } - //Since classloader can't find these methods, we implement them ourselves + private static boolean shouldForceOverflow(int i, int speedBumpIndex, float iconAppearAmount, + int maxVisibleIcons) { + return speedBumpIndex != -1 && i >= speedBumpIndex + && iconAppearAmount > 0.0f || i >= maxVisibleIcons; + } +//Since classloader can't find these methods, we implement them ourselves private static float getLayoutEnd(View v) { return getActualWidth(v) - getActualPaddingEnd(v); } From 8c329e9ff7098017f6213a46216d55a823db328c Mon Sep 17 00:00:00 2001 From: Siavash Date: Sat, 8 Jun 2024 15:59:45 +0330 Subject: [PATCH 132/162] canary release --- .github/edit2MakeNewCanary | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/edit2MakeNewCanary b/.github/edit2MakeNewCanary index 04ad0604c..65aeddb0b 100644 --- a/.github/edit2MakeNewCanary +++ b/.github/edit2MakeNewCanary @@ -1 +1 @@ -Editing this file will trigger the build script for a new canary.. \ No newline at end of file +Editing this file will trigger the build script for a new canary. \ No newline at end of file From 2f5d826e1d5daaede2c98046bf8852f41cd5b98e Mon Sep 17 00:00:00 2001 From: GitHub Date: Sat, 8 Jun 2024 12:32:41 +0000 Subject: [PATCH 133/162] Version update: Release --- CanaryChangelog.md | 3 +++ MagiskModBase/module.prop | 4 ++-- MagiskModuleUpdate_Full.json | 4 ++-- MagiskModuleUpdate_Xposed.json | 4 ++-- app/build.gradle | 4 ++-- latestCanary.json | 4 ++-- 6 files changed, 13 insertions(+), 10 deletions(-) diff --git a/CanaryChangelog.md b/CanaryChangelog.md index 688677c57..cc44357ec 100644 --- a/CanaryChangelog.md +++ b/CanaryChangelog.md @@ -1,3 +1,6 @@ +**canary-364** +- Fixed notification icon count limit. The setting might (... will) not work on older android versions anymore + **canary-363** - Added option to remap physical buttons to custom actions diff --git a/MagiskModBase/module.prop b/MagiskModBase/module.prop index ce8b89f7e..f9be7d8d3 100644 --- a/MagiskModBase/module.prop +++ b/MagiskModBase/module.prop @@ -1,7 +1,7 @@ id=PixelXpert name=Pixel Xpert -version=canary-363 -versionCode=363 +version=canary-364 +versionCode=364 author=Pixel Xpert Team description=Xposed based module for customizations on Pixel roms. Android 13+ updateJson=https://raw.githubusercontent.com/siavash79/PixelXpert/canary/MagiskModuleUpdate_Xposed.json diff --git a/MagiskModuleUpdate_Full.json b/MagiskModuleUpdate_Full.json index ef0dff49a..9857cdd09 100644 --- a/MagiskModuleUpdate_Full.json +++ b/MagiskModuleUpdate_Full.json @@ -1,6 +1,6 @@ { - "version": "canary-363", - "versionCode": 363, + "version": "canary-364", + "versionCode": 364, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/MagiskModuleUpdate_Xposed.json b/MagiskModuleUpdate_Xposed.json index ef0dff49a..9857cdd09 100644 --- a/MagiskModuleUpdate_Xposed.json +++ b/MagiskModuleUpdate_Xposed.json @@ -1,6 +1,6 @@ { - "version": "canary-363", - "versionCode": 363, + "version": "canary-364", + "versionCode": 364, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 7195dbedc..e1850be02 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "sh.siava.pixelxpert" minSdk 33 targetSdk 34 - versionCode 363 - versionName "canary-363" + versionCode 364 + versionName "canary-364" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/latestCanary.json b/latestCanary.json index edc3e4ade..a2c5c8068 100644 --- a/latestCanary.json +++ b/latestCanary.json @@ -1,6 +1,6 @@ { - "version": "canary-363", - "versionCode": 363, + "version": "canary-364", + "versionCode": 364, "zipUrl_Xposed": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "zipUrl_Full": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" From d01bbbd0682330666a25f58686d580ecde77d739 Mon Sep 17 00:00:00 2001 From: DrDisagree Date: Sat, 8 Jun 2024 20:13:04 +0600 Subject: [PATCH 134/162] Bump AGP --- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index ae6a1e382..53169f507 100644 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,7 @@ buildscript { maven { url 'https://mvnrepository.com' } } dependencies { - classpath 'com.android.tools.build:gradle:8.2.1' + classpath 'com.android.tools.build:gradle:8.4.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index b58c28cee..5218f1ab5 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Tue Jun 20 09:16:35 GMT+03:30 2023 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From 5e5ab76de5a06629215ece0efc87be08cc3cf4d9 Mon Sep 17 00:00:00 2001 From: DrDisagree Date: Sat, 8 Jun 2024 20:13:28 +0600 Subject: [PATCH 135/162] Bump dependencies --- app/build.gradle | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 844504f35..ffaa1555b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -20,8 +20,7 @@ android { final def keystorePropertiesFile = rootProject.file("ReleaseKey.properties") def releaseSignature = signingConfigs.debug - try(def keystorePropertiesStream = new FileInputStream(keystorePropertiesFile)) - { + try (def keystorePropertiesStream = new FileInputStream(keystorePropertiesFile)) { final def keystoreProperties = new Properties() keystoreProperties.load(keystorePropertiesStream) releaseSignature = signingConfigs.create("releaseSignature") @@ -32,8 +31,8 @@ android { storePassword keystoreProperties['storePassword'] } } - catch(ignored) - {} + catch (ignored) { + } buildTypes { release { @@ -86,18 +85,17 @@ dependencies { implementation 'androidx.navigation:navigation-ui-ktx:2.7.7' implementation 'androidx.navigation:navigation-fragment-ktx:2.7.7' implementation 'androidx.navigation:navigation-ui-ktx:2.7.7' - implementation 'androidx.appcompat:appcompat:1.6.1' - implementation 'androidx.annotation:annotation:1.7.1' + implementation 'androidx.appcompat:appcompat:1.7.0' + implementation 'androidx.annotation:annotation:1.8.0' implementation 'androidx.preference:preference-ktx:1.2.1' implementation 'androidx.recyclerview:recyclerview:1.3.2' - implementation 'com.google.android.material:material:1.12.0-rc01' - implementation 'androidx.compose.ui:ui-geometry:1.6.6' + implementation 'com.google.android.material:material:1.12.0' + implementation 'androidx.compose.ui:ui-geometry:1.6.7' //noinspection KtxExtensionAvailable implementation 'androidx.activity:activity:1.9.0' implementation 'androidx.work:work-runtime:2.9.0' implementation "androidx.concurrent:concurrent-futures:1.1.0" - // The core module that provides APIs to a shell implementation "com.github.topjohnwu.libsu:core:${libsuVersion}" // Optional: APIs for creating root services. Depends on ":core" @@ -128,5 +126,5 @@ dependencies { //Google Subject Segmentation - MLKit implementation 'com.google.android.gms:play-services-mlkit-subject-segmentation:16.0.0-beta1' - implementation 'com.google.android.gms:play-services-base:18.4.0' + implementation 'com.google.android.gms:play-services-base:18.5.0' } \ No newline at end of file From d839ab8e571a7fd6424efbf56d05f11aa441bcf6 Mon Sep 17 00:00:00 2001 From: DrDisagree Date: Sat, 8 Jun 2024 22:00:53 +0600 Subject: [PATCH 136/162] Fix splash screen crash in certain conditions --- app/src/main/res/layout/activity_splash_screen.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/layout/activity_splash_screen.xml b/app/src/main/res/layout/activity_splash_screen.xml index bfba924c8..aa39054a9 100644 --- a/app/src/main/res/layout/activity_splash_screen.xml +++ b/app/src/main/res/layout/activity_splash_screen.xml @@ -9,6 +9,7 @@ android:gravity="center" android:orientation="vertical" android:padding="16dp" + android:theme="@style/Theme.MaterialComponents.DayNight.NoActionBar" tools:context=".ui.activities.SplashScreenActivity"> Date: Sun, 9 Jun 2024 00:53:09 +0000 Subject: [PATCH 137/162] New Crowdin translations by GitHub Action --- app/src/main/res/values-af-rZA/strings.xml | 16 ++++++++++++++++ app/src/main/res/values-ar-rSA/strings.xml | 16 ++++++++++++++++ app/src/main/res/values-cs-rCZ/strings.xml | 16 ++++++++++++++++ app/src/main/res/values-da-rDK/strings.xml | 16 ++++++++++++++++ app/src/main/res/values-de-rDE/strings.xml | 16 ++++++++++++++++ app/src/main/res/values-el-rGR/strings.xml | 16 ++++++++++++++++ app/src/main/res/values-es-rES/strings.xml | 16 ++++++++++++++++ app/src/main/res/values-fa-rIR/strings.xml | 16 ++++++++++++++++ app/src/main/res/values-fi-rFI/strings.xml | 16 ++++++++++++++++ app/src/main/res/values-fr-rFR/strings.xml | 16 ++++++++++++++++ app/src/main/res/values-hi-rIN/strings.xml | 16 ++++++++++++++++ app/src/main/res/values-hu-rHU/strings.xml | 16 ++++++++++++++++ app/src/main/res/values-it-rIT/strings.xml | 16 ++++++++++++++++ app/src/main/res/values-iw-rIL/strings.xml | 16 ++++++++++++++++ app/src/main/res/values-ja-rJP/strings.xml | 16 ++++++++++++++++ app/src/main/res/values-ko-rKR/strings.xml | 16 ++++++++++++++++ app/src/main/res/values-nl-rNL/strings.xml | 16 ++++++++++++++++ app/src/main/res/values-no-rNO/strings.xml | 16 ++++++++++++++++ app/src/main/res/values-pl-rPL/strings.xml | 16 ++++++++++++++++ app/src/main/res/values-pt-rPT/strings.xml | 16 ++++++++++++++++ app/src/main/res/values-ro-rRO/strings.xml | 16 ++++++++++++++++ app/src/main/res/values-ru-rRU/strings.xml | 16 ++++++++++++++++ app/src/main/res/values-sr-rSP/strings.xml | 16 ++++++++++++++++ app/src/main/res/values-sv-rSE/strings.xml | 16 ++++++++++++++++ app/src/main/res/values-tr-rTR/strings.xml | 16 ++++++++++++++++ app/src/main/res/values-uk-rUA/strings.xml | 16 ++++++++++++++++ app/src/main/res/values-vi-rVN/strings.xml | 16 ++++++++++++++++ app/src/main/res/values-zh-rCN/strings.xml | 18 +++++++++++++++++- app/src/main/res/values-zh-rTW/strings.xml | 16 ++++++++++++++++ 29 files changed, 465 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml index 29c7489c6..8017494ed 100644 --- a/app/src/main/res/values-af-rZA/strings.xml +++ b/app/src/main/res/values-af-rZA/strings.xml @@ -258,11 +258,13 @@ Force geaktiveer Dwing gedeaktiveer Versteek outomaties + Remap physical buttons Omseil pakkethandtekeningkontrole Laat programafgradering toe Geaktiveer vir die volgende 5 minute + Launcher options Deaktiveer skermskootklank Laat skermkiekie van beperkte inhoud toe @@ -475,4 +477,18 @@ Update Hooks Settings + + While screen is off + While screen is on + Long press power button + Long press volume up button + Long press volume down button + Double press power button + Toggle torch + Launch camera + Launch assistant + Toggle Do not disturb + Play/Pause media + Media control - Skip + Media control - Previous diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index 7701bfb9f..4ab7e8c3f 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -258,11 +258,13 @@ تمكين إجباري تعطيل إجباري إخفاء تلقائي + Remap physical buttons تجاوز التحقق من توقيع الحزمة السماح بخفض مستوى التطبيق تمكين لمدة الدقائق الخمس التالية + Launcher options تعطيل صوت لقطة الشاشة السماح لقطة الشاشة من المحتوى المقيد @@ -475,4 +477,18 @@ تحديث Hooks الإعدادات + + While screen is off + While screen is on + Long press power button + Long press volume up button + Long press volume down button + Double press power button + Toggle torch + Launch camera + Launch assistant + Toggle Do not disturb + Play/Pause media + Media control - Skip + Media control - Previous diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index e9b80416b..f1a544927 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -258,11 +258,13 @@ Force Enabled Force Disabled Automatické skrytí + Remap physical buttons Obejít kontrolu podpisu balíčku Povolit přechod aplikace na nižší verzi Aktivováno na dalších 5 minut + Launcher options Zakázat zvuk snímku obrazovky Povolit snímek obrazovky z omezeného obsahu @@ -475,4 +477,18 @@ Update Hooks Settings + + While screen is off + While screen is on + Long press power button + Long press volume up button + Long press volume down button + Double press power button + Toggle torch + Launch camera + Launch assistant + Toggle Do not disturb + Play/Pause media + Media control - Skip + Media control - Previous diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml index 65737665c..767c4f895 100644 --- a/app/src/main/res/values-da-rDK/strings.xml +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -258,11 +258,13 @@ Tving aktiveret Tving deaktiveret Skjul automatisk + Remap physical buttons Omgå kontrol af pakkesignatur Tillad app-nedgradering Aktiveret i de næste 5 minutter + Launcher options Deaktiver skærmbilledelyd Tillad screenshot fra begrænset indhold @@ -475,4 +477,18 @@ Update Hooks Settings + + While screen is off + While screen is on + Long press power button + Long press volume up button + Long press volume down button + Double press power button + Toggle torch + Launch camera + Launch assistant + Toggle Do not disturb + Play/Pause media + Media control - Skip + Media control - Previous diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index 75e064418..2ab5408d9 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -258,11 +258,13 @@ erzwinge Ein erzwinge Aus Automatisches Ausblenden + Remap physical buttons Umgehen der Paketsignaturprüfung Downgrade von Anwendungen zulassen Aktiviert für die nächsten 5 Minuten + Launcher options Deaktiviere Screenshot Ton Screenshot von eingeschränkten Inhalten zulassen @@ -475,4 +477,18 @@ Update Hooks Einstellungen + + While screen is off + While screen is on + Long press power button + Long press volume up button + Long press volume down button + Double press power button + Toggle torch + Launch camera + Launch assistant + Toggle Do not disturb + Play/Pause media + Media control - Skip + Media control - Previous diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index 7b6756daf..13f6e1009 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -258,11 +258,13 @@ Αναγκαστική ενεργοποίηση Αναγκαστική Απενεργοποίηση Αυτόματη απόκρυψη + Remap physical buttons Παράκαμψη ελέγχου υπογραφής πακέτου Να επιτρέπεται η υποβάθμιση της εφαρμογής Ενεργοποιήθηκε για τα επόμενα 5 λεπτά + Launcher options Απενεργοποίηση ήχου στιγμιότυπου οθόνης Να επιτρέπεται στιγμιότυπο οθόνης από περιορισμένο περιεχόμενο @@ -475,4 +477,18 @@ Update Hooks Settings + + While screen is off + While screen is on + Long press power button + Long press volume up button + Long press volume down button + Double press power button + Toggle torch + Launch camera + Launch assistant + Toggle Do not disturb + Play/Pause media + Media control - Skip + Media control - Previous diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 17398c07a..b6617647c 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -258,11 +258,13 @@ Forzar activada Forzar desactivada Esconder automáticamente + Mapear botones físicos Pasar por alto la verificación de la firma del paquete Permitir degradar la aplicación Habilitado durante los próximos 5 minutos + Opciones del Lanzador Desactivar sonido de captura de pantalla Permitir captura de pantalla de contenido restringido @@ -475,4 +477,18 @@ Actualizar Conexiones Ajustes + + Cuando la pantalla está apagada + Con la pantalla activada + Pulsación larga del botón de encendido + Pulsación larga del botón de volumen arriba + Pulsación larga del botón de volumen abajo + Doble clic en el botón de encendido + Linterna + Abrir cámara + Iniciar el Asistente + Mosaico No molestar + Reproducir/Pausa + Control Multimedia - Omitir + Control Multimedia - Anterior diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml index e7def50c3..b7c5e4ebe 100644 --- a/app/src/main/res/values-fa-rIR/strings.xml +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -258,11 +258,13 @@ فعال باشد غیر فعال باشد پنهان کردن خودکار + Remap physical buttons دور زدن چک امضای بسته اجازه تنزل برنامه موقتا فعال شد + Launcher options غیرفعال کردن صدای اسکرین شات اجازه گرفتن اسکرین شات از محتوای محدود شده @@ -475,4 +477,18 @@ به‌روزرسانی اتصالات تنظیمات + + While screen is off + While screen is on + Long press power button + Long press volume up button + Long press volume down button + Double press power button + Toggle torch + Launch camera + Launch assistant + Toggle Do not disturb + Play/Pause media + Media control - Skip + Media control - Previous diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index 90165e40d..6926020b2 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -258,11 +258,13 @@ Pakota käytössä Pakota käytöstä Automaattinen piilotus + Remap physical buttons Ohita paketin allekirjoituksen tarkistus Salli sovelluksen päivittäminen vanhaan versioon Käytössä seuraavat 5 minuuttia + Launcher options Poista kuvakaappauksen ääni käytöstä Salli kuvakaappaus rajoitetusta sisällöstä @@ -475,4 +477,18 @@ Update Hooks Settings + + While screen is off + While screen is on + Long press power button + Long press volume up button + Long press volume down button + Double press power button + Toggle torch + Launch camera + Launch assistant + Toggle Do not disturb + Play/Pause media + Media control - Skip + Media control - Previous diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index 8e691d471..e9538a21f 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -258,11 +258,13 @@ Forcer l’activation Forcer la désactivation Masquage automatique + Remap physical buttons Contourner la vérification des signatures des paquets Autoriser le rétrogradage des applications Actif pour les cinq prochaines minutes + Launcher options Désactiver le son des captures d’écran Autoriser les captures d\'écran à partir de contenus restreints @@ -475,4 +477,18 @@ Mise à jour Crochets Paramètres + + While screen is off + While screen is on + Long press power button + Long press volume up button + Long press volume down button + Double press power button + Toggle torch + Launch camera + Launch assistant + Toggle Do not disturb + Play/Pause media + Media control - Skip + Media control - Previous diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index 930833ce7..81bbf9714 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -258,11 +258,13 @@ बलपूर्वक चालू करें बलपूर्वक बंद करें खुद से छिपना + Remap physical buttons पैकेज सिग्नेचर चेक को बायपास करना अनुप्रयोगों को डाउनग्रेड करने की अनुमति दें अगले 5 मिनट के लिए सक्षम + Launcher options स्क्रीनशॉट ध्वनि अक्षम करें प्रतिबंधित सामग्री से स्क्रीनशॉट की अनुमति दें @@ -475,4 +477,18 @@ Update Hooks Settings + + While screen is off + While screen is on + Long press power button + Long press volume up button + Long press volume down button + Double press power button + Toggle torch + Launch camera + Launch assistant + Toggle Do not disturb + Play/Pause media + Media control - Skip + Media control - Previous diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index 80fde666d..ede250e87 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -258,11 +258,13 @@ Kényszer engedélyezve Kényszer letiltva Automatikus elrejtés + Remap physical buttons Csomag aláírás-ellenőrzés megkerülése Alkalmazás visszaminősítésének engedélyezése Engedélyezve a következő 5 percben + Launcher options Képernyőkép hangjának letiltása Képernyőkép engedélyezése korlátozott tartalomból @@ -475,4 +477,18 @@ Frissítés Hooks Beállítások + + While screen is off + While screen is on + Long press power button + Long press volume up button + Long press volume down button + Double press power button + Toggle torch + Launch camera + Launch assistant + Toggle Do not disturb + Play/Pause media + Media control - Skip + Media control - Previous diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index 6165c2eeb..a3b9c5aa9 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -258,11 +258,13 @@ Forza abilitata Forza disabilitata Nascondi automaticamente + Rimappa pulsanti fisici Ignora controllo firma pacchetto Consenti downgrade applicazione Abilitato per i prossimi 5 minuti + Opzioni Launcher Disattiva suono screenshot Consenti screenshot per contenuti con restrizioni @@ -475,4 +477,18 @@ Aggiornamenti Hooks Impostazioni + + Mentre lo schermo è spento + Mentre lo schermo è acceso + Pressione prolungata sul tasto di accensione + Pressione prolungata del pulsante volume su + Pressione prolungata del pulsante volume giù + Premi due volte il pulsante di accensione + Accendi/Spegni torcia + Avvia fotocamera + Avvia assistente + Attiva/Disattiva Non disturbare + Riproduci/Pausa brano + Controllo multimediale - Salta + Controllo multimediale - Precedente diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index 98381078f..d70ad4f4b 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -258,11 +258,13 @@ כוח מופעל כפה מושבת הסתרה אוטומטית + Remap physical buttons עוקף את בדיקת חתימת החבילה אפשר שדרוג לאחור של האפליקציה מופעל למשך 5 הדקות הבאות + Launcher options השבת את צליל צילום המסך אפשר צילום מסך מתוכן מוגבל @@ -475,4 +477,18 @@ Update Hooks Settings + + While screen is off + While screen is on + Long press power button + Long press volume up button + Long press volume down button + Double press power button + Toggle torch + Launch camera + Launch assistant + Toggle Do not disturb + Play/Pause media + Media control - Skip + Media control - Previous diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index c502ff28d..1d02353a9 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -258,11 +258,13 @@ 強制的に有効 強制的に無効 自動非表示 + Remap physical buttons パッケージ署名チェックをバイパスする アプリのダウングレードを許可する 次の 5 分間有効になります + Launcher options スクリーンショットの音を無効化 制限されたコンテンツからのスクリーンショットを許可する @@ -475,4 +477,18 @@ 更新 フック 設定 + + While screen is off + While screen is on + Long press power button + Long press volume up button + Long press volume down button + Double press power button + Toggle torch + Launch camera + Launch assistant + Toggle Do not disturb + Play/Pause media + Media control - Skip + Media control - Previous diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index 64b7a1ce5..e79d7bf10 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -258,11 +258,13 @@ 강제 활성화 강제 비활성화 자동 숨김 + Remap physical buttons 패키지 인증서 확인 절차 우회 앱 다운그레이드 허용 다음 5분 간 활성화되었습니다 + Launcher options 스크린샷 효과음 비활성화 제한된 컨텐츠로부터 스크린샷 허용 @@ -475,4 +477,18 @@ Update Hooks 설정 + + While screen is off + While screen is on + Long press power button + Long press volume up button + Long press volume down button + Double press power button + Toggle torch + Launch camera + Launch assistant + Toggle Do not disturb + Play/Pause media + Media control - Skip + Media control - Previous diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index afcdac141..da6e286d3 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -258,11 +258,13 @@ Geforceerd ingeschakeld Kracht uitgeschakeld Automatisch verbergen + Remap physical buttons Omzeil de controle van de pakkethandtekening App-downgrade toestaan Ingeschakeld voor de komende 5 minuten + Launcher options Schermgeluid uitschakelen Schermafbeelding van beperkte inhoud toestaan @@ -475,4 +477,18 @@ Update Hooks Settings + + While screen is off + While screen is on + Long press power button + Long press volume up button + Long press volume down button + Double press power button + Toggle torch + Launch camera + Launch assistant + Toggle Do not disturb + Play/Pause media + Media control - Skip + Media control - Previous diff --git a/app/src/main/res/values-no-rNO/strings.xml b/app/src/main/res/values-no-rNO/strings.xml index 3103fa67f..f758485c0 100644 --- a/app/src/main/res/values-no-rNO/strings.xml +++ b/app/src/main/res/values-no-rNO/strings.xml @@ -258,11 +258,13 @@ Tving aktivert Tving deaktivert Skjul automatisk + Remap physical buttons Omgå pakkens signatursjekk Tillat app-nedgradering Aktivert for de neste 5 minuttene + Launcher options Deaktiver skjermbildelyd Tillat skjermdump fra begrenset innhold @@ -475,4 +477,18 @@ Update Hooks Settings + + While screen is off + While screen is on + Long press power button + Long press volume up button + Long press volume down button + Double press power button + Toggle torch + Launch camera + Launch assistant + Toggle Do not disturb + Play/Pause media + Media control - Skip + Media control - Previous diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index 7acdfea06..01d250e66 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -258,11 +258,13 @@ Wymuś włączone Wymuszanie wyłączone Automatyczne chowanie + Remap physical buttons Pomiń sprawdzanie podpisu pakietu Zezwalaj na niższą wersję aplikacji Włączone na następne 5 minut + Launcher options Wyłącz dźwięk zrzutu ekranu Zezwalaj na zrzuty ekranu z treści objętych ograniczeniami @@ -475,4 +477,18 @@ Update Hooks Settings + + While screen is off + While screen is on + Long press power button + Long press volume up button + Long press volume down button + Double press power button + Toggle torch + Launch camera + Launch assistant + Toggle Do not disturb + Play/Pause media + Media control - Skip + Media control - Previous diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index cd50060ee..c56cdae45 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -258,11 +258,13 @@ Forçar ativar Forçar desativar Ocultar automaticamente + Remapear botões físicos Ignorar a assinatura das aplicações Permitir o downgrade das apps Ativado pelos próximos 5 minutos + Opções da App Página Inicial Desativar som da captura de ecrã Permitir capturar ecrã de conteúdo protegido @@ -475,4 +477,18 @@ Atualizações \"Hooks\" Definições + + Quando o ecrã está desligado + Quando o ecrã está ligado + Manter premido o botão de energia + Manter premido o botão de volume para cima + Manter premido o botão de volume para baixo + Toque duplo no botão de energia + Ligar/desligar lanterna + Iniciar câmara + Iniciar Assistente + Ativar/desativar Não incomodar + Reproduzir/pausar mídia + Saltar mídia + Mídia Anterior diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index bdda39c45..653fe58af 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -258,11 +258,13 @@ Activată forțat Dezactivată forțat Ascundere automată + Realocare butoane fizice Ignoră verificarea semnăturii pachetului Permite retrogradarea aplicației Activat pentru următoarele 5 minute + Opțiuni lansator Dezactivare sunet captură ecran Permite capturi de ecran din conținut restricționat @@ -475,4 +477,18 @@ Actualizare Cârlige Setări + + În timp ce ecranul este oprit + În timp ce ecranul este pornit + Apăsare lungă pe butonul de alimentare + Apăsare lungă pe butonul de volum sus + Apăsare lungă pe butonul de volum în jos + Apăsare dublă a butonului de alimentare + Comutare lanternă + Lansare cameră foto + Lansare Asistent + Comutare Nu deranja + Redare/Pauză media + Control media - Omitere + Control media - Precedent diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 7f4549aa1..bee7f6535 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -258,11 +258,13 @@ Принудительно включена Принудительно отключена Автоматическое скрытие + Remap physical buttons Обход проверки подписи пакета Разрешить понижение версии приложения Включено на следующие 5 минут + Launcher options Отключить звука скриншота Разрешить снимок экрана из ограниченного содержимого @@ -475,4 +477,18 @@ Обновить Хуки Настройки + + While screen is off + While screen is on + Long press power button + Long press volume up button + Long press volume down button + Double press power button + Toggle torch + Launch camera + Launch assistant + Toggle Do not disturb + Play/Pause media + Media control - Skip + Media control - Previous diff --git a/app/src/main/res/values-sr-rSP/strings.xml b/app/src/main/res/values-sr-rSP/strings.xml index 37b86a28f..0cf6245b8 100644 --- a/app/src/main/res/values-sr-rSP/strings.xml +++ b/app/src/main/res/values-sr-rSP/strings.xml @@ -258,11 +258,13 @@ Форце Енаблед Форце Дисаблед Аутоматско сакривање + Remap physical buttons Заобиђите проверу потписа пакета Дозволите апликацију на старију верзију Омогућено наредних 5 минута + Launcher options Онемогућите звук снимка екрана Дозволи снимак екрана са ограниченог садржаја @@ -475,4 +477,18 @@ Ажурирање Hooks Подешавања + + While screen is off + While screen is on + Long press power button + Long press volume up button + Long press volume down button + Double press power button + Toggle torch + Launch camera + Launch assistant + Toggle Do not disturb + Play/Pause media + Media control - Skip + Media control - Previous diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index 0327e0eaa..b5c063e44 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -258,11 +258,13 @@ Force Enabled Tvinga inaktiverad Dölj automatiskt + Remap physical buttons Förbigå paketsignaturkontroll Tillåt appnedgradering Aktiverad under de kommande 5 minuterna + Launcher options Inaktivera skärmdumpljud Tillåt skärmdumpar från begränsat innehåll @@ -475,4 +477,18 @@ Uppdatera Hooks Inställningar + + While screen is off + While screen is on + Long press power button + Long press volume up button + Long press volume down button + Double press power button + Toggle torch + Launch camera + Launch assistant + Toggle Do not disturb + Play/Pause media + Media control - Skip + Media control - Previous diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index 2b32fcc61..ffa0442ff 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -258,11 +258,13 @@ Etkinleştirmeye Zorla Devre Dışı Bırakmaya Zorla Otomatik gizle + Fiziksel düğmeleri yeniden eşleştir Paket imza kontrolünü atla Uygulama sürümünü düşürmeye izin ver Önümüzdeki 5 dakika için etkin + Başlatıcı seçenekleri Ekran görüntüsü sesini devre dışı bırak Kısıtlanmış içerikten ekran görüntüsü alınmasına izin ver @@ -475,4 +477,18 @@ Güncelleme Modüller Ayarlar + + Ekran kapalıyken + Ekran açıkken + Güç düğmesine uzun bas + Ses açma düğmesine uzun bas + Ses kısma düğmesine uzun bas + Güç düğmesine çift bas + Feneri aç/kapat + Kamerayı başlat + Başlatma asistanı + Rahatsız etmeyin seçeneğini aç/kapat + Medyayı oynat/duraklat + Medya kontrolü - Atla + Medya kontrolü - Önceki diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index 9cad5db42..0d30f1afd 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -258,11 +258,13 @@ Примусово ввімкнено Примусово вимкнено Автоматичне приховування + Remap physical buttons Обійти перевірку підпису пакета Дозволити програмі повернутися до версії Увімкнено на наступні 5 хвилин + Launcher options Вимкнути звук знімку екрана Дозволити знімок екрана з обмеженого вмісту @@ -475,4 +477,18 @@ Оновити Хуки Налаштування + + While screen is off + While screen is on + Long press power button + Long press volume up button + Long press volume down button + Double press power button + Toggle torch + Launch camera + Launch assistant + Toggle Do not disturb + Play/Pause media + Media control - Skip + Media control - Previous diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index b07d5d2ab..4a67eece5 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -258,11 +258,13 @@ Bật Tắt Tự động ẩn + Sửa lại các nút vật lý Bỏ qua kiểm tra chữ ký gói Cho phép hạ cấp ứng dụng Kích hoạt trong 5 phút tiếp theo + Các tùy chọn trình khởi chạy Tắt âm thanh ảnh chụp màn hình Cho phép chụp ảnh màn hình từ nội dung bị hạn chế @@ -475,4 +477,18 @@ Cập nhật Các móc nối Cài đặt + + Khi màn hình tắt + Khi màn hình đang bật + Bấm giữ phím nguồn + Bấm giữ phím tăng âm lượng + Bấm giữ phím giảm âm lượng + Nhấn đúp phím Nguồn + Toggle torch + Launch camera + Launch assistant + Toggle Do not disturb + Play/Pause media + Media control - Skip + Media control - Previous diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 1231945eb..28d33c512 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -225,7 +225,7 @@ 分离 WIFI 和数据磁贴 合并 WIFI 和数据磁贴 亮度滑块选项 - Adaptive brightness shortcut + 自适应亮度快捷方式 在下拉磁贴面板显示 将亮度条移动到底部 在磁贴面板中隐藏 @@ -258,11 +258,13 @@ 强制开启 强制关闭 Auto hide + 重映射物理按钮 绕过应用签名检查 允许应用降级 在接下来的五分钟内保持开启 + 启动器选项 关闭截图提示音 在内容受限时允许截图 @@ -475,4 +477,18 @@ 更新 钩子 设置 + + 当屏幕关闭时 + 当屏幕开启时 + 长按电源键 + 长按 音量+ 键 + 长按 音量- 键 + 双击电源键 + 开关手电筒 + 启动相机 + 启动语音助手 + 切换勿扰模式 + 播放/暂停媒体 + 媒体控制 - 跳过 + 媒体控制 - 上一个 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index a2adb26fa..6e3490048 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -258,11 +258,13 @@ 強制開啟 強制關閉 Auto hide + Remap physical buttons 繞過應用簽名檢查 允許應用降級 在接下來的五分鐘內保持開啟 + Launcher options 關閉截圖提示音 Allow screenshot from restricted content @@ -475,4 +477,18 @@ 更新 掛鈎 設定 + + While screen is off + While screen is on + Long press power button + Long press volume up button + Long press volume down button + Double press power button + Toggle torch + Launch camera + Launch assistant + Toggle Do not disturb + Play/Pause media + Media control - Skip + Media control - Previous From ec95c1aa06b4fdba373dc6907ace45509a866bf7 Mon Sep 17 00:00:00 2001 From: Siavash Date: Sun, 9 Jun 2024 10:31:21 +0330 Subject: [PATCH 138/162] CHANGELOG: physical button gestures: improvement and bug fix --- .idea/misc.xml | 10 +- .../modpacks/android/ScreenOffKeys.java | 95 ++++++++++++------- 2 files changed, 69 insertions(+), 36 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index 4db06c5b1..f6cc8799f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -143,7 +143,7 @@ - + diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/android/ScreenOffKeys.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/android/ScreenOffKeys.java index 8bc82be26..27e268ade 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/android/ScreenOffKeys.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/android/ScreenOffKeys.java @@ -3,6 +3,8 @@ import static android.os.VibrationAttributes.USAGE_ACCESSIBILITY; import static android.os.VibrationEffect.EFFECT_TICK; import static android.view.KeyEvent.ACTION_DOWN; +import static android.view.KeyEvent.KEYCODE_CAMERA; +import static android.view.KeyEvent.KEYCODE_POWER; import static android.view.KeyEvent.KEYCODE_VOLUME_DOWN; import static android.view.KeyEvent.KEYCODE_VOLUME_UP; import static de.robv.android.xposed.XposedBridge.hookAllMethods; @@ -61,7 +63,7 @@ public class ScreenOffKeys extends XposedModPack { private Object windowMan; private long mWakeTime = 0; - VolumeLongPressRunnable mVolumeLongPress = new VolumeLongPressRunnable(false); + VolumeLongPressRunnable mVolumeLongPress = new VolumeLongPressRunnable(PHYSICAL_ACTION_NONE); public ScreenOffKeys(Context context) { super(context); @@ -97,16 +99,10 @@ public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Th @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { boolean screenIsOn = screenIsOn(true); - boolean forceScreenOffAction = longPressPowerButtonScreenOff == PHYSICAL_ACTION_TORCH && SystemUtils.isFlashOn(); - if(doublePressPowerButtonScreenOff != PHYSICAL_ACTION_NONE && (!screenIsOn || forceScreenOffAction)) - { - param.setResult(launchAction(doublePressPowerButtonScreenOff, screenIsOn, true)); - } - else if(doublePressPowerButtonScreenOn != PHYSICAL_ACTION_NONE && screenIsOn) - { - param.setResult(launchAction(doublePressPowerButtonScreenOn, screenIsOn, true)); - } + launchAction(resolveAction(KEYCODE_CAMERA, screenIsOn), + screenIsOn, + true); } }); @@ -125,18 +121,10 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { boolean screenIsOn = screenIsOn(true); - boolean handled = false; - boolean forceScreenOffAction = longPressPowerButtonScreenOff == PHYSICAL_ACTION_TORCH && SystemUtils.isFlashOn(); - - if(longPressPowerButtonScreenOff != PHYSICAL_ACTION_NONE && (!screenIsOn || forceScreenOffAction)) - { - handled = launchAction(longPressPowerButtonScreenOff, screenIsOn, false); - } else if (longPressPowerButtonScreenOn != PHYSICAL_ACTION_NONE && screenIsOn) { - handled = launchAction(longPressPowerButtonScreenOn, screenIsOn, false); - } - - if(handled) + if(launchAction(resolveAction(KEYCODE_POWER, screenIsOn), + screenIsOn, + false)) param.setResult(null); } }); @@ -171,9 +159,14 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { } return; case KeyEvent.ACTION_DOWN: - mVolumeLongPress = new VolumeLongPressRunnable(keyCode == KEYCODE_VOLUME_UP); - handler.postDelayed(mVolumeLongPress, ViewConfiguration.getLongPressTimeout()); - param.setResult(0); + int action = resolveAction(keyCode, false); + + mVolumeLongPress = new VolumeLongPressRunnable(action); + if(isActionLaunchable(action)) + { + handler.postDelayed(mVolumeLongPress, ViewConfiguration.getLongPressTimeout()); + param.setResult(0); + } break; } } @@ -185,6 +178,47 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { } catch (Throwable ignored) {} } + private int resolveAction(int keyCode, boolean screenIsOn) { + boolean flashIsOn = SystemUtils.isFlashOn(); + + switch (keyCode) + { + case KEYCODE_CAMERA: + if(doublePressPowerButtonScreenOff == PHYSICAL_ACTION_TORCH && flashIsOn) + { + return PHYSICAL_ACTION_TORCH; + } + return screenIsOn + ? doublePressPowerButtonScreenOn + : doublePressPowerButtonScreenOff; + case KEYCODE_VOLUME_DOWN: + return longPressVolumeDownButtonScreenOff; + case KEYCODE_VOLUME_UP: + return longPressVolumeUpButtonScreenOff; + case KEYCODE_POWER: + if(longPressPowerButtonScreenOff == PHYSICAL_ACTION_TORCH && flashIsOn) { + return PHYSICAL_ACTION_TORCH; + } + return screenIsOn + ? longPressPowerButtonScreenOn + : longPressPowerButtonScreenOff; + default: + return PHYSICAL_ACTION_NONE; + } + } + + private boolean isActionLaunchable(int action) { + switch (action) + { + case PHYSICAL_ACTION_MEDIA_NEXT: + case PHYSICAL_ACTION_MEDIA_PREV: + //noinspection DataFlowIssue + return SystemUtils.AudioManager().isMusicActive(); + default: + return true; + } + } + private boolean screenIsOn(boolean useWakeTime) { //for power button, display state isn't reliable enough because pressing power will trigger it if(useWakeTime) { return SystemClock.uptimeMillis() - mWakeTime > 1000; @@ -204,7 +238,6 @@ private boolean launchAction(int action, boolean screenIsOn, boolean delaySleep) { case PHYSICAL_ACTION_TORCH: SystemUtils.toggleFlash(); - if(!screenIsOn) sleep(); handled = true; break; case PHYSICAL_ACTION_CAMERA: @@ -276,18 +309,14 @@ public boolean listensTo(String packageName) { } class VolumeLongPressRunnable implements Runnable { - boolean mIsVolumeUp; - public VolumeLongPressRunnable(boolean isVolumeUp) + int mAction; + public VolumeLongPressRunnable(int action) { - mIsVolumeUp = isVolumeUp; + mAction = action; } @Override public void run() { - launchAction(mIsVolumeUp - ? longPressVolumeUpButtonScreenOff - : longPressVolumeDownButtonScreenOff, - false, - false); + launchAction(mAction, false, false); } } } \ No newline at end of file From 5ed439360d9ab8f12b3c4a81c61473be9bcc4a22 Mon Sep 17 00:00:00 2001 From: Siavash Date: Sun, 9 Jun 2024 11:48:28 +0330 Subject: [PATCH 139/162] canary release --- .github/edit2MakeNewCanary | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/edit2MakeNewCanary b/.github/edit2MakeNewCanary index 65aeddb0b..04ad0604c 100644 --- a/.github/edit2MakeNewCanary +++ b/.github/edit2MakeNewCanary @@ -1 +1 @@ -Editing this file will trigger the build script for a new canary. \ No newline at end of file +Editing this file will trigger the build script for a new canary.. \ No newline at end of file From 40e225629d10b5f4d7953db1e57d2ab3d381abf1 Mon Sep 17 00:00:00 2001 From: GitHub Date: Sun, 9 Jun 2024 08:21:10 +0000 Subject: [PATCH 140/162] Version update: Release --- CanaryChangelog.md | 3 +++ MagiskModBase/module.prop | 4 ++-- MagiskModuleUpdate_Full.json | 4 ++-- MagiskModuleUpdate_Xposed.json | 4 ++-- app/build.gradle | 4 ++-- latestCanary.json | 4 ++-- 6 files changed, 13 insertions(+), 10 deletions(-) diff --git a/CanaryChangelog.md b/CanaryChangelog.md index cc44357ec..8efe6d72f 100644 --- a/CanaryChangelog.md +++ b/CanaryChangelog.md @@ -1,3 +1,6 @@ +**canary-365** +- physical button gestures: improvement and bug fix + **canary-364** - Fixed notification icon count limit. The setting might (... will) not work on older android versions anymore diff --git a/MagiskModBase/module.prop b/MagiskModBase/module.prop index f9be7d8d3..3b63fa6cf 100644 --- a/MagiskModBase/module.prop +++ b/MagiskModBase/module.prop @@ -1,7 +1,7 @@ id=PixelXpert name=Pixel Xpert -version=canary-364 -versionCode=364 +version=canary-365 +versionCode=365 author=Pixel Xpert Team description=Xposed based module for customizations on Pixel roms. Android 13+ updateJson=https://raw.githubusercontent.com/siavash79/PixelXpert/canary/MagiskModuleUpdate_Xposed.json diff --git a/MagiskModuleUpdate_Full.json b/MagiskModuleUpdate_Full.json index 9857cdd09..48d5c15cd 100644 --- a/MagiskModuleUpdate_Full.json +++ b/MagiskModuleUpdate_Full.json @@ -1,6 +1,6 @@ { - "version": "canary-364", - "versionCode": 364, + "version": "canary-365", + "versionCode": 365, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/MagiskModuleUpdate_Xposed.json b/MagiskModuleUpdate_Xposed.json index 9857cdd09..48d5c15cd 100644 --- a/MagiskModuleUpdate_Xposed.json +++ b/MagiskModuleUpdate_Xposed.json @@ -1,6 +1,6 @@ { - "version": "canary-364", - "versionCode": 364, + "version": "canary-365", + "versionCode": 365, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index eec786b43..fddb435b2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "sh.siava.pixelxpert" minSdk 33 targetSdk 34 - versionCode 364 - versionName "canary-364" + versionCode 365 + versionName "canary-365" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/latestCanary.json b/latestCanary.json index a2c5c8068..474167912 100644 --- a/latestCanary.json +++ b/latestCanary.json @@ -1,6 +1,6 @@ { - "version": "canary-364", - "versionCode": 364, + "version": "canary-365", + "versionCode": 365, "zipUrl_Xposed": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "zipUrl_Full": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" From 079182613f573a565fcd859aa89e10f734f694f7 Mon Sep 17 00:00:00 2001 From: DrDisagree Date: Tue, 11 Jun 2024 13:19:04 +0600 Subject: [PATCH 141/162] Fix splash screen theme --- app/src/main/res/layout/activity_splash_screen.xml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/layout/activity_splash_screen.xml b/app/src/main/res/layout/activity_splash_screen.xml index aa39054a9..4481fea5b 100644 --- a/app/src/main/res/layout/activity_splash_screen.xml +++ b/app/src/main/res/layout/activity_splash_screen.xml @@ -9,7 +9,7 @@ android:gravity="center" android:orientation="vertical" android:padding="16dp" - android:theme="@style/Theme.MaterialComponents.DayNight.NoActionBar" + android:theme="@style/Theme.Material3.DayNight.NoActionBar" tools:context=".ui.activities.SplashScreenActivity"> + android:indeterminateTintMode="src_atop" /> Date: Tue, 11 Jun 2024 11:19:27 +0330 Subject: [PATCH 142/162] CHANGELOG: physical button gestures: bug fix --- .../sh/siava/pixelxpert/modpacks/android/ScreenOffKeys.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/android/ScreenOffKeys.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/android/ScreenOffKeys.java index 27e268ade..94d2d7c3b 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/android/ScreenOffKeys.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/android/ScreenOffKeys.java @@ -100,9 +100,12 @@ public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Th protected void beforeHookedMethod(MethodHookParam param) throws Throwable { boolean screenIsOn = screenIsOn(true); - launchAction(resolveAction(KEYCODE_CAMERA, screenIsOn), + boolean handled = launchAction(resolveAction(KEYCODE_CAMERA, screenIsOn), screenIsOn, true); + + if(handled) + param.setResult(true); } }); From 0427246c80f722840b19d8feef89a9ea995ea770 Mon Sep 17 00:00:00 2001 From: DrDisagree Date: Wed, 12 Jun 2024 13:01:23 +0600 Subject: [PATCH 143/162] Fix splash screen icon colors --- app/src/main/res/drawable/ic_success.xml | 2 +- app/src/main/res/layout/activity_splash_screen.xml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/drawable/ic_success.xml b/app/src/main/res/drawable/ic_success.xml index 8733a9a96..32382c7ce 100644 --- a/app/src/main/res/drawable/ic_success.xml +++ b/app/src/main/res/drawable/ic_success.xml @@ -5,6 +5,6 @@ android:viewportWidth="24" android:viewportHeight="24"> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_splash_screen.xml b/app/src/main/res/layout/activity_splash_screen.xml index 4481fea5b..3b2ac4ecc 100644 --- a/app/src/main/res/layout/activity_splash_screen.xml +++ b/app/src/main/res/layout/activity_splash_screen.xml @@ -50,7 +50,7 @@ android:layout_width="32dp" android:layout_height="32dp" android:indeterminate="true" - android:indeterminateTint="?attr/colorPrimary" + android:indeterminateTint="@color/launcher_accent" android:indeterminateTintMode="src_atop" /> Date: Wed, 12 Jun 2024 15:45:14 +0330 Subject: [PATCH 144/162] CHANGELOG: physical button gestures improved --- .../modpacks/android/ScreenOffKeys.java | 127 +++++++++--------- app/src/main/res/values/arrays.xml | 2 + 2 files changed, 63 insertions(+), 66 deletions(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/android/ScreenOffKeys.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/android/ScreenOffKeys.java index 94d2d7c3b..dfc3aebe2 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/android/ScreenOffKeys.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/android/ScreenOffKeys.java @@ -38,11 +38,15 @@ public class ScreenOffKeys extends XposedModPack { public static final String listenPackage = Constants.SYSTEM_FRAMEWORK_PACKAGE; - public static final int PHYSICAL_ACTION_NONE = 0; + public static final int PHYSICAL_ACTION_NONE = -1; + + public static final int PHYSICAL_ACTION_DEFAULT = 0; public static final int PHYSICAL_ACTION_TORCH = 1; public static final int PHYSICAL_ACTION_CAMERA = 2; public static final int PHYSICAL_ACTION_ASSISTANT = 3; - /** @noinspection unused*/ + /** + * @noinspection unused + */ public static final int PHYSICAL_ACTION_DND = 4; public static final int PHYSICAL_ACTION_PLAY_PAUSE = 5; public static final int PHYSICAL_ACTION_MEDIA_NEXT = 6; @@ -63,7 +67,7 @@ public class ScreenOffKeys extends XposedModPack { private Object windowMan; private long mWakeTime = 0; - VolumeLongPressRunnable mVolumeLongPress = new VolumeLongPressRunnable(PHYSICAL_ACTION_NONE); + VolumeLongPressRunnable mVolumeLongPress = new VolumeLongPressRunnable(PHYSICAL_ACTION_DEFAULT); public ScreenOffKeys(Context context) { super(context); @@ -83,8 +87,7 @@ public void updatePrefs(String... Key) { longPressVolumeDownButtonScreenOff = Integer.parseInt(Xprefs.getString("longPressVolumeDownButtonScreenOff", "0")); //noinspection ResultOfMethodCallIgnored SystemUtils.CameraManager(); //init CameraManager to listen to flash status - } - catch (Throwable ignored){} + } catch (Throwable ignored) {} } @Override @@ -96,36 +99,36 @@ public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Th launchAssistActionMethod = ReflectionTools.findMethod(PhoneWindowManagerClass, "launchAssistAction"); hookAllMethods(GestureLauncherServiceClass, "handleCameraGesture", new XC_MethodHook() { //double tap on power is handled here - @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - boolean screenIsOn = screenIsOn(true); + @Override + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + boolean screenIsOn = screenIsOn(true); - boolean handled = launchAction(resolveAction(KEYCODE_CAMERA, screenIsOn), - screenIsOn, - true); + boolean handled = launchAction(resolveAction(KEYCODE_CAMERA, screenIsOn), + screenIsOn, + true); - if(handled) - param.setResult(true); - } - }); + if (handled) + param.setResult(true); + } + }); hookAllMethods(PhoneWindowManagerClass, "enableScreen", new XC_MethodHook() { - @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { - windowMan = param.thisObject; + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + windowMan = param.thisObject; - setObjectField(getObjectField(param.thisObject,"mGestureLauncherService"), - "mCameraDoubleTapPowerEnabled", - true); - } - }); + setObjectField(getObjectField(param.thisObject, "mGestureLauncherService"), + "mCameraDoubleTapPowerEnabled", + true); + } + }); hookAllMethods(PowerKeyRuleClass, "onLongPress", new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { boolean screenIsOn = screenIsOn(true); - if(launchAction(resolveAction(KEYCODE_POWER, screenIsOn), + if (launchAction(resolveAction(KEYCODE_POWER, screenIsOn), screenIsOn, false)) param.setResult(null); @@ -135,7 +138,7 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { hookAllMethods(PhoneWindowManagerClass, "startedWakingUp", new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - if ((int) param.args[param.args.length-1] == WAKE_REASON_POWER_BUTTON) { + if ((int) param.args[param.args.length - 1] == WAKE_REASON_POWER_BUTTON) { mWakeTime = SystemClock.uptimeMillis(); } } @@ -148,10 +151,9 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { KeyEvent event = (KeyEvent) param.args[0]; int keyCode = event.getKeyCode(); - if(!screenIsOn(false) && - ((keyCode == KEYCODE_VOLUME_UP && longPressVolumeUpButtonScreenOff != PHYSICAL_ACTION_NONE) || - (keyCode == KEYCODE_VOLUME_DOWN && longPressVolumeDownButtonScreenOff != PHYSICAL_ACTION_NONE))) - { + if (!screenIsOn(false) && + ((keyCode == KEYCODE_VOLUME_UP && longPressVolumeUpButtonScreenOff != PHYSICAL_ACTION_DEFAULT) || + (keyCode == KEYCODE_VOLUME_DOWN && longPressVolumeDownButtonScreenOff != PHYSICAL_ACTION_DEFAULT))) { Handler handler = (Handler) getObjectField(param.thisObject, "mHandler"); switch (event.getAction()) { @@ -165,17 +167,14 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { int action = resolveAction(keyCode, false); mVolumeLongPress = new VolumeLongPressRunnable(action); - if(isActionLaunchable(action)) - { + if (isActionLaunchable(action)) { handler.postDelayed(mVolumeLongPress, ViewConfiguration.getLongPressTimeout()); param.setResult(0); } break; } } - } catch (Throwable ignored) - {} - + } catch (Throwable ignored) {} } }); } catch (Throwable ignored) {} @@ -184,11 +183,9 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { private int resolveAction(int keyCode, boolean screenIsOn) { boolean flashIsOn = SystemUtils.isFlashOn(); - switch (keyCode) - { + switch (keyCode) { case KEYCODE_CAMERA: - if(doublePressPowerButtonScreenOff == PHYSICAL_ACTION_TORCH && flashIsOn) - { + if (doublePressPowerButtonScreenOff == PHYSICAL_ACTION_TORCH && flashIsOn) { return PHYSICAL_ACTION_TORCH; } return screenIsOn @@ -199,20 +196,19 @@ private int resolveAction(int keyCode, boolean screenIsOn) { case KEYCODE_VOLUME_UP: return longPressVolumeUpButtonScreenOff; case KEYCODE_POWER: - if(longPressPowerButtonScreenOff == PHYSICAL_ACTION_TORCH && flashIsOn) { + if (longPressPowerButtonScreenOff == PHYSICAL_ACTION_TORCH && flashIsOn) { return PHYSICAL_ACTION_TORCH; } return screenIsOn ? longPressPowerButtonScreenOn : longPressPowerButtonScreenOff; default: - return PHYSICAL_ACTION_NONE; + return PHYSICAL_ACTION_DEFAULT; } } private boolean isActionLaunchable(int action) { - switch (action) - { + switch (action) { case PHYSICAL_ACTION_MEDIA_NEXT: case PHYSICAL_ACTION_MEDIA_PREV: //noinspection DataFlowIssue @@ -223,22 +219,25 @@ private boolean isActionLaunchable(int action) { } private boolean screenIsOn(boolean useWakeTime) { //for power button, display state isn't reliable enough because pressing power will trigger it - if(useWakeTime) { + if (useWakeTime) { return SystemClock.uptimeMillis() - mWakeTime > 1000; } Display defaultDisplay = (Display) getObjectField(windowMan, "mDefaultDisplay"); return defaultDisplay.getState() == Display.STATE_ON; } - /** @noinspection DataFlowIssue*/ - private boolean launchAction(int action, boolean screenIsOn, boolean delaySleep) - { + /** + * @noinspection DataFlowIssue + */ + private boolean launchAction(int action, boolean screenIsOn, boolean delaySleep) { try { boolean handled = false; boolean shouldSleep = true; - switch (action) - { + switch (action) { + case PHYSICAL_ACTION_NONE: + handled = true; + break; case PHYSICAL_ACTION_TORCH: SystemUtils.toggleFlash(); handled = true; @@ -248,44 +247,40 @@ private boolean launchAction(int action, boolean screenIsOn, boolean delaySleep) Object gestureLauncherService = getObjectField(windowMan, "mGestureLauncherService"); handled = (boolean) callMethod(gestureLauncherService, "handleCameraGesture", false, CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP); shouldSleep = false; - } catch (Throwable ignored){} + } catch (Throwable ignored) {} break; case PHYSICAL_ACTION_ASSISTANT: try { launchAssistActionMethod.invoke(windowMan, null, -2, SystemClock.uptimeMillis(), INVOCATION_TYPE_POWER_BUTTON_LONG_PRESS); handled = true; shouldSleep = false; - } - catch (Throwable ignored){} + } catch (Throwable ignored) {} break; case PHYSICAL_ACTION_PLAY_PAUSE: dispatchAudioKey(KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE); handled = true; break; case PHYSICAL_ACTION_MEDIA_NEXT: - if(SystemUtils.AudioManager().isMusicActive()) - { + if (SystemUtils.AudioManager().isMusicActive()) { dispatchAudioKey(KeyEvent.KEYCODE_MEDIA_NEXT); } handled = true; break; case PHYSICAL_ACTION_MEDIA_PREV: - if(SystemUtils.AudioManager().isMusicActive()) - { + if (SystemUtils.AudioManager().isMusicActive()) { dispatchAudioKey(KeyEvent.KEYCODE_MEDIA_PREVIOUS); } handled = true; break; } - if(handled) - { - SystemUtils.vibrate(EFFECT_TICK, USAGE_ACCESSIBILITY); - if(!screenIsOn && shouldSleep) - { + if (handled) { + if (action != PHYSICAL_ACTION_NONE) { + SystemUtils.vibrate(EFFECT_TICK, USAGE_ACCESSIBILITY); + } + if (!screenIsOn && shouldSleep) { new Thread(() -> { - if(delaySleep) - { + if (delaySleep) { threadSleep(500); } sleep(); @@ -294,8 +289,7 @@ private boolean launchAction(int action, boolean screenIsOn, boolean delaySleep) } return handled; - } - catch (Throwable ignored){} + } catch (Throwable ignored) {} return false; } @@ -313,10 +307,11 @@ public boolean listensTo(String packageName) { class VolumeLongPressRunnable implements Runnable { int mAction; - public VolumeLongPressRunnable(int action) - { + + public VolumeLongPressRunnable(int action) { mAction = action; } + @Override public void run() { launchAction(mAction, false, false); diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 6c79dc978..69a07afc7 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -255,6 +255,7 @@ + @string/none @string/word_default @string/torch @string/camera @@ -266,6 +267,7 @@ + -1 0 1 2 From d4a44500dce00d96a492c387870d669e983bb611 Mon Sep 17 00:00:00 2001 From: Siavash Date: Wed, 12 Jun 2024 22:48:34 +0330 Subject: [PATCH 145/162] CHANGELOG: A14QPR2+: Fixed statusbar system icons multi row --- .github/edit2MakeNewCanary | 2 +- .../utils/FlexStatusIconContainer.java | 32 +++++++++++-------- .../utils/toolkit/ReflectionTools.java | 16 ++++++++++ 3 files changed, 36 insertions(+), 14 deletions(-) diff --git a/.github/edit2MakeNewCanary b/.github/edit2MakeNewCanary index 04ad0604c..65aeddb0b 100644 --- a/.github/edit2MakeNewCanary +++ b/.github/edit2MakeNewCanary @@ -1 +1 @@ -Editing this file will trigger the build script for a new canary.. \ No newline at end of file +Editing this file will trigger the build script for a new canary. \ No newline at end of file diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/FlexStatusIconContainer.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/FlexStatusIconContainer.java index e3e57e52e..71b051724 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/FlexStatusIconContainer.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/FlexStatusIconContainer.java @@ -1,5 +1,6 @@ package sh.siava.pixelxpert.modpacks.utils; +import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; import static de.robv.android.xposed.XposedBridge.log; import static de.robv.android.xposed.XposedHelpers.callMethod; import static de.robv.android.xposed.XposedHelpers.findClass; @@ -16,6 +17,7 @@ import android.util.AttributeSet; import android.util.SparseIntArray; import android.view.View; +import android.view.ViewGroup; import android.widget.LinearLayout; import androidx.annotation.Nullable; @@ -185,8 +187,15 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { return; } + + ViewGroup parent = (ViewGroup) this.getParent(); + if(parent.getLayoutParams().height != MATCH_PARENT) + { + parent.getLayoutParams().height = MATCH_PARENT; + } + int totalIconHeight = mIconSize; - int mTotalPossibleRows = height / totalIconHeight; + int totalPossibleRows = height / totalIconHeight; int paddings = getPaddingLeft() + getPaddingRight(); int availableWidth = width - paddings; @@ -197,7 +206,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { case SORT_CLEAN: mRowCount = 0; mIconWidths.clear(); - int initialCapacity = mTotalPossibleRows * MAX_ROW_ICONS; + int initialCapacity = totalPossibleRows * MAX_ROW_ICONS; for (int i = getChildCount() - 1; i >= 0; i--) { View icon = getChildAt(i); @@ -205,8 +214,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { boolean isBlocked = false; try { isBlocked = (boolean) callMethod(icon, "isIconBlocked"); - } catch (Throwable ignored) { - } + } catch (Throwable ignored) {} if ((boolean) callMethod(icon, "isIconVisible") && !isBlocked && !mIgnoredSlots.contains((String) callMethod(icon, "getSlot"))) { //icon should be considered! @@ -237,12 +245,13 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { //reduce iconsperrow until we find a winner for (; iconsPerRow > 0 && !success; iconsPerRow--) { - int iconCapacity = iconsPerRow * mTotalPossibleRows - ((mHasDot) ? 1 : 0); + int iconCapacity = iconsPerRow * totalPossibleRows - ((mHasDot) ? 1 : 0); if (mIconWidths.size() > iconCapacity) { if (!mHasDot) { mHasDot = true; - iconCapacity--; + if(iconCapacity > 0) + iconCapacity--; } mIconWidths.subList(iconCapacity, mIconWidths.size()).clear(); } @@ -282,7 +291,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { break; case SORT_TIGHT: mRowCount = 1; - int availableRows = mTotalPossibleRows - 1; + int availableRows = totalPossibleRows - 1; int remainingWidth = availableWidth; int colIndex = 0; @@ -292,8 +301,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { boolean isBlocked = false; try { isBlocked = (boolean) callMethod(icon, "isIconBlocked"); - } catch (Throwable ignored) { - } + } catch (Throwable ignored) {} if ((boolean) callMethod(icon, "isIconVisible") && !isBlocked && !mIgnoredSlots.contains((String) callMethod(icon, "getSlot"))) { //icon should be considered! @@ -377,8 +385,7 @@ public void onViewAdded(View child) { super.onViewAdded(child); try { //StatusIconState constructor is not accessible. using the container to construct one for us callMethod(StatusIconContainer, "onViewAdded", child); - } catch (Throwable ignored) { - } + } catch (Throwable ignored) {} } @Override @@ -436,8 +443,7 @@ public View getViewForSlot(String slot) { if (callMethod(child, "getSlot").equals(slot)) { return child; } - } catch (Throwable ignored) { - } + } catch (Throwable ignored) {} } return null; } diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/toolkit/ReflectionTools.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/toolkit/ReflectionTools.java index 6ada3607e..5c139ae8d 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/toolkit/ReflectionTools.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/toolkit/ReflectionTools.java @@ -215,6 +215,22 @@ public static void tryHookAllConstructors(Class clazz, XC_MethodHook hook) { } } + public static void dumpParentIDs(View v) + { + dumpParentIDs(v, 0); + } + + private static void dumpParentIDs(View v, int level) { + dumpID(v, level); + try { + if(v.getParent() instanceof View) + { + dumpParentIDs((View) v.getParent(), level+1); + } + } + catch (Throwable ignored){} + } + public static void dumpIDs(View v) { dumpIDs(v, 0); From 49225aa89ed79aa9eea01867b534d7fea2447090 Mon Sep 17 00:00:00 2001 From: GitHub Date: Wed, 12 Jun 2024 19:24:20 +0000 Subject: [PATCH 146/162] Version update: Release --- CanaryChangelog.md | 5 +++++ MagiskModBase/module.prop | 4 ++-- MagiskModuleUpdate_Full.json | 4 ++-- MagiskModuleUpdate_Xposed.json | 4 ++-- app/build.gradle | 4 ++-- latestCanary.json | 4 ++-- 6 files changed, 15 insertions(+), 10 deletions(-) diff --git a/CanaryChangelog.md b/CanaryChangelog.md index 8efe6d72f..f4a086c7e 100644 --- a/CanaryChangelog.md +++ b/CanaryChangelog.md @@ -1,3 +1,8 @@ +**canary-366** +- A14QPR2+: Fixed statusbar system icons multi row +- physical button gestures improved +- physical button gestures: bug fix + **canary-365** - physical button gestures: improvement and bug fix diff --git a/MagiskModBase/module.prop b/MagiskModBase/module.prop index 3b63fa6cf..2f912533f 100644 --- a/MagiskModBase/module.prop +++ b/MagiskModBase/module.prop @@ -1,7 +1,7 @@ id=PixelXpert name=Pixel Xpert -version=canary-365 -versionCode=365 +version=canary-366 +versionCode=366 author=Pixel Xpert Team description=Xposed based module for customizations on Pixel roms. Android 13+ updateJson=https://raw.githubusercontent.com/siavash79/PixelXpert/canary/MagiskModuleUpdate_Xposed.json diff --git a/MagiskModuleUpdate_Full.json b/MagiskModuleUpdate_Full.json index 48d5c15cd..cd35b5d7b 100644 --- a/MagiskModuleUpdate_Full.json +++ b/MagiskModuleUpdate_Full.json @@ -1,6 +1,6 @@ { - "version": "canary-365", - "versionCode": 365, + "version": "canary-366", + "versionCode": 366, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/MagiskModuleUpdate_Xposed.json b/MagiskModuleUpdate_Xposed.json index 48d5c15cd..cd35b5d7b 100644 --- a/MagiskModuleUpdate_Xposed.json +++ b/MagiskModuleUpdate_Xposed.json @@ -1,6 +1,6 @@ { - "version": "canary-365", - "versionCode": 365, + "version": "canary-366", + "versionCode": 366, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index fddb435b2..7ead69fd6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "sh.siava.pixelxpert" minSdk 33 targetSdk 34 - versionCode 365 - versionName "canary-365" + versionCode 366 + versionName "canary-366" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/latestCanary.json b/latestCanary.json index 474167912..d54f100d3 100644 --- a/latestCanary.json +++ b/latestCanary.json @@ -1,6 +1,6 @@ { - "version": "canary-365", - "versionCode": 365, + "version": "canary-366", + "versionCode": 366, "zipUrl_Xposed": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "zipUrl_Full": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" From 1a23c1c74e7c5b93d22f4cd1b1ffc11fb3666930 Mon Sep 17 00:00:00 2001 From: Siavash Date: Sat, 15 Jun 2024 10:59:02 +0330 Subject: [PATCH 147/162] CHANGELOG: physical buttons remap: bugfix --- .github/edit2MakeNewCanary | 2 +- .idea/icon.svg | 8 ++++ PixelXpert.svg | 8 ++++ .../modpacks/android/ScreenOffKeys.java | 48 +++++++++++-------- gradle.properties | 1 + 5 files changed, 45 insertions(+), 22 deletions(-) create mode 100644 .idea/icon.svg create mode 100644 PixelXpert.svg diff --git a/.github/edit2MakeNewCanary b/.github/edit2MakeNewCanary index 65aeddb0b..04ad0604c 100644 --- a/.github/edit2MakeNewCanary +++ b/.github/edit2MakeNewCanary @@ -1 +1 @@ -Editing this file will trigger the build script for a new canary. \ No newline at end of file +Editing this file will trigger the build script for a new canary.. \ No newline at end of file diff --git a/.idea/icon.svg b/.idea/icon.svg new file mode 100644 index 000000000..48ed1f4c6 --- /dev/null +++ b/.idea/icon.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/PixelXpert.svg b/PixelXpert.svg new file mode 100644 index 000000000..48ed1f4c6 --- /dev/null +++ b/PixelXpert.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/android/ScreenOffKeys.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/android/ScreenOffKeys.java index dfc3aebe2..94c7c698b 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/android/ScreenOffKeys.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/android/ScreenOffKeys.java @@ -13,15 +13,20 @@ import static de.robv.android.xposed.XposedHelpers.getObjectField; import static de.robv.android.xposed.XposedHelpers.setObjectField; import static sh.siava.pixelxpert.modpacks.XPrefs.Xprefs; +import static sh.siava.pixelxpert.modpacks.utils.SystemUtils.AudioManager; +import static sh.siava.pixelxpert.modpacks.utils.SystemUtils.CameraManager; +import static sh.siava.pixelxpert.modpacks.utils.SystemUtils.PowerManager; +import static sh.siava.pixelxpert.modpacks.utils.SystemUtils.isFlashOn; import static sh.siava.pixelxpert.modpacks.utils.SystemUtils.sleep; import static sh.siava.pixelxpert.modpacks.utils.SystemUtils.threadSleep; +import static sh.siava.pixelxpert.modpacks.utils.SystemUtils.toggleFlash; +import static sh.siava.pixelxpert.modpacks.utils.SystemUtils.vibrate; import android.annotation.SuppressLint; import android.content.Context; import android.media.AudioManager; import android.os.Handler; import android.os.SystemClock; -import android.view.Display; import android.view.KeyEvent; import android.view.ViewConfiguration; @@ -31,7 +36,6 @@ import de.robv.android.xposed.callbacks.XC_LoadPackage; import sh.siava.pixelxpert.modpacks.Constants; import sh.siava.pixelxpert.modpacks.XposedModPack; -import sh.siava.pixelxpert.modpacks.utils.SystemUtils; import sh.siava.pixelxpert.modpacks.utils.toolkit.ReflectionTools; @SuppressWarnings("RedundantThrows") @@ -86,7 +90,7 @@ public void updatePrefs(String... Key) { longPressVolumeUpButtonScreenOff = Integer.parseInt(Xprefs.getString("longPressVolumeUpButtonScreenOff", "0")); longPressVolumeDownButtonScreenOff = Integer.parseInt(Xprefs.getString("longPressVolumeDownButtonScreenOff", "0")); //noinspection ResultOfMethodCallIgnored - SystemUtils.CameraManager(); //init CameraManager to listen to flash status + CameraManager(); //init CameraManager to listen to flash status } catch (Throwable ignored) {} } @@ -101,7 +105,7 @@ public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Th hookAllMethods(GestureLauncherServiceClass, "handleCameraGesture", new XC_MethodHook() { //double tap on power is handled here @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - boolean screenIsOn = screenIsOn(true); + boolean screenIsOn = screenIsOn(); boolean handled = launchAction(resolveAction(KEYCODE_CAMERA, screenIsOn), screenIsOn, @@ -126,7 +130,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { hookAllMethods(PowerKeyRuleClass, "onLongPress", new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - boolean screenIsOn = screenIsOn(true); + boolean screenIsOn = screenIsOn(); if (launchAction(resolveAction(KEYCODE_POWER, screenIsOn), screenIsOn, @@ -151,7 +155,7 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { KeyEvent event = (KeyEvent) param.args[0]; int keyCode = event.getKeyCode(); - if (!screenIsOn(false) && + if (!deviceIsInteractive() && ((keyCode == KEYCODE_VOLUME_UP && longPressVolumeUpButtonScreenOff != PHYSICAL_ACTION_DEFAULT) || (keyCode == KEYCODE_VOLUME_DOWN && longPressVolumeDownButtonScreenOff != PHYSICAL_ACTION_DEFAULT))) { Handler handler = (Handler) getObjectField(param.thisObject, "mHandler"); @@ -159,7 +163,7 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { switch (event.getAction()) { case KeyEvent.ACTION_UP: if (handler.hasCallbacks(mVolumeLongPress)) { - SystemUtils.AudioManager().adjustStreamVolume(AudioManager.STREAM_MUSIC, keyCode == KeyEvent.KEYCODE_VOLUME_DOWN ? AudioManager.ADJUST_LOWER : AudioManager.ADJUST_RAISE, 0); + AudioManager().adjustStreamVolume(AudioManager.STREAM_MUSIC, keyCode == KeyEvent.KEYCODE_VOLUME_DOWN ? AudioManager.ADJUST_LOWER : AudioManager.ADJUST_RAISE, 0); handler.removeCallbacks(mVolumeLongPress); } return; @@ -181,7 +185,7 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { } private int resolveAction(int keyCode, boolean screenIsOn) { - boolean flashIsOn = SystemUtils.isFlashOn(); + boolean flashIsOn = isFlashOn(); switch (keyCode) { case KEYCODE_CAMERA: @@ -212,18 +216,20 @@ private boolean isActionLaunchable(int action) { case PHYSICAL_ACTION_MEDIA_NEXT: case PHYSICAL_ACTION_MEDIA_PREV: //noinspection DataFlowIssue - return SystemUtils.AudioManager().isMusicActive(); + return AudioManager().isMusicActive(); default: return true; } } - private boolean screenIsOn(boolean useWakeTime) { //for power button, display state isn't reliable enough because pressing power will trigger it - if (useWakeTime) { - return SystemClock.uptimeMillis() - mWakeTime > 1000; - } - Display defaultDisplay = (Display) getObjectField(windowMan, "mDefaultDisplay"); - return defaultDisplay.getState() == Display.STATE_ON; + private boolean screenIsOn() { //for power button, display state isn't reliable enough because pressing power will trigger it + return SystemClock.uptimeMillis() - mWakeTime > 1000; + } + + private boolean deviceIsInteractive() + { + //noinspection DataFlowIssue + return PowerManager().isInteractive(); } /** @@ -239,7 +245,7 @@ private boolean launchAction(int action, boolean screenIsOn, boolean delaySleep) handled = true; break; case PHYSICAL_ACTION_TORCH: - SystemUtils.toggleFlash(); + toggleFlash(); handled = true; break; case PHYSICAL_ACTION_CAMERA: @@ -261,13 +267,13 @@ private boolean launchAction(int action, boolean screenIsOn, boolean delaySleep) handled = true; break; case PHYSICAL_ACTION_MEDIA_NEXT: - if (SystemUtils.AudioManager().isMusicActive()) { + if (AudioManager().isMusicActive()) { dispatchAudioKey(KeyEvent.KEYCODE_MEDIA_NEXT); } handled = true; break; case PHYSICAL_ACTION_MEDIA_PREV: - if (SystemUtils.AudioManager().isMusicActive()) { + if (AudioManager().isMusicActive()) { dispatchAudioKey(KeyEvent.KEYCODE_MEDIA_PREVIOUS); } handled = true; @@ -276,7 +282,7 @@ private boolean launchAction(int action, boolean screenIsOn, boolean delaySleep) if (handled) { if (action != PHYSICAL_ACTION_NONE) { - SystemUtils.vibrate(EFFECT_TICK, USAGE_ACCESSIBILITY); + vibrate(EFFECT_TICK, USAGE_ACCESSIBILITY); } if (!screenIsOn && shouldSleep) { new Thread(() -> { @@ -295,9 +301,9 @@ private boolean launchAction(int action, boolean screenIsOn, boolean delaySleep) private void dispatchAudioKey(int keyCode) { //noinspection DataFlowIssue - SystemUtils.AudioManager().dispatchMediaKeyEvent(new KeyEvent(ACTION_DOWN, keyCode)); + AudioManager().dispatchMediaKeyEvent(new KeyEvent(ACTION_DOWN, keyCode)); - SystemUtils.AudioManager().dispatchMediaKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, keyCode)); + AudioManager().dispatchMediaKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, keyCode)); } @Override diff --git a/gradle.properties b/gradle.properties index 88d63170e..53cc76ea4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,3 +18,4 @@ android.enableJetifier=true android.defaults.buildfeatures.buildconfig=true android.nonTransitiveRClass=false android.nonFinalResIds=false +org.gradle.configuration-cache=true From 61fd5f252f91b7883b33d88e34267744a5427517 Mon Sep 17 00:00:00 2001 From: GitHub Date: Sat, 15 Jun 2024 07:42:19 +0000 Subject: [PATCH 148/162] Version update: Release --- CanaryChangelog.md | 3 +++ MagiskModBase/module.prop | 4 ++-- MagiskModuleUpdate_Full.json | 4 ++-- MagiskModuleUpdate_Xposed.json | 4 ++-- app/build.gradle | 4 ++-- latestCanary.json | 4 ++-- 6 files changed, 13 insertions(+), 10 deletions(-) diff --git a/CanaryChangelog.md b/CanaryChangelog.md index f4a086c7e..f5c634ae4 100644 --- a/CanaryChangelog.md +++ b/CanaryChangelog.md @@ -1,3 +1,6 @@ +**canary-367** +- physical buttons remap: bugfix + **canary-366** - A14QPR2+: Fixed statusbar system icons multi row - physical button gestures improved diff --git a/MagiskModBase/module.prop b/MagiskModBase/module.prop index 2f912533f..d2bedc9a9 100644 --- a/MagiskModBase/module.prop +++ b/MagiskModBase/module.prop @@ -1,7 +1,7 @@ id=PixelXpert name=Pixel Xpert -version=canary-366 -versionCode=366 +version=canary-367 +versionCode=367 author=Pixel Xpert Team description=Xposed based module for customizations on Pixel roms. Android 13+ updateJson=https://raw.githubusercontent.com/siavash79/PixelXpert/canary/MagiskModuleUpdate_Xposed.json diff --git a/MagiskModuleUpdate_Full.json b/MagiskModuleUpdate_Full.json index cd35b5d7b..b34779118 100644 --- a/MagiskModuleUpdate_Full.json +++ b/MagiskModuleUpdate_Full.json @@ -1,6 +1,6 @@ { - "version": "canary-366", - "versionCode": 366, + "version": "canary-367", + "versionCode": 367, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/MagiskModuleUpdate_Xposed.json b/MagiskModuleUpdate_Xposed.json index cd35b5d7b..b34779118 100644 --- a/MagiskModuleUpdate_Xposed.json +++ b/MagiskModuleUpdate_Xposed.json @@ -1,6 +1,6 @@ { - "version": "canary-366", - "versionCode": 366, + "version": "canary-367", + "versionCode": 367, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 7ead69fd6..79eaae337 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "sh.siava.pixelxpert" minSdk 33 targetSdk 34 - versionCode 366 - versionName "canary-366" + versionCode 367 + versionName "canary-367" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/latestCanary.json b/latestCanary.json index d54f100d3..ff3186fc0 100644 --- a/latestCanary.json +++ b/latestCanary.json @@ -1,6 +1,6 @@ { - "version": "canary-366", - "versionCode": 366, + "version": "canary-367", + "versionCode": 367, "zipUrl_Xposed": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "zipUrl_Full": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" From 3ed2cc481463fddfd5bc0cb179652ae9e2e3f446 Mon Sep 17 00:00:00 2001 From: Crowdin Bot Date: Sun, 16 Jun 2024 00:52:57 +0000 Subject: [PATCH 149/162] New Crowdin translations by GitHub Action --- app/src/main/res/values-ro-rRO/strings.xml | 8 +++--- app/src/main/res/values-ru-rRU/strings.xml | 32 +++++++++++----------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 653fe58af..aaa9aa7f9 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -48,7 +48,7 @@ Hotspot portabil Ascunde SSID - Timeout inactivitate + Expirare inactivitate Număr maxim de clienți Soluție pentru problemele de conectivitate hotspot Permite clienților care nu sunt „pre-aprobați” să se conecteze fără probleme @@ -61,7 +61,7 @@ Modelul AI nu este disponibil pe dispozitiv (încă) Dezactivează animația de indiciu a deblocării Opțiuni pentru ecranul de blocare - Eliminare avatar utilizator (mod utilizatori multipli) + Elimină avatarul utilizatorului (mod utilizatori multipli) Elimină cercul de fundal a amprentei de sub afișaj Cercul în jurul pictogramei amprentei este activat Cercul din jurul imaginii amprentei va fi ascuns @@ -88,7 +88,7 @@ Nu deranjați Scaner de coduri QR Amestecare PIN - Afișează introducerea de securitate la activarea dispozitivului + Afișează introducerea de securitate la pornirea ecranului Deblocare ușoară (Pin/Parolă) Dacă nu a funcționat pentru prima dată, încearcă din nou Informații despre încărcare pe ecranul de blocare @@ -407,7 +407,7 @@ Actualizări aplicație Opțiuni monitorizare Setări statistici de rețea - Pe lângă textul normal, sunt disponibile și variabile dinamice, cum ar fi Data, Utilizarea datelor și Temperatura:\n\n$G\<format\> : Data gregoriană, pe baza formatului*\n$P<format> : Data persană, pe baza formatului*\n$Nrx : Descărcări totale în perioada specificată ** ***\n$Ntx: Încărcări totale în perioada specificată ** ***\n$Nall : Trafic total în perioada specificată ** ***\n$Nssid : Nume SSID WiFi (dacă este cazul)\n\n$T\<format\>[interval] : Temperatura; Formatul \npoate fi b (pentru baterie), c (pentru CPU), g (pentru GPU) și s (pentru piele) \nÎn sfârșit, există un număr OPȚIONAL de interval de actualizare în secunde (implicit: 60 de secunde)\n\n*pentru format documentație, căutați „Java Date Format”\n**Puteți specifica perioada de statistici în PixelXpert/Meniul Diverse/Setări statistici de rețea\n***Dacă înlocuiți $N cu $Nc , veți obține statistici de date mobile (de ex. $Ncrx în loc de Nrx ) + Pe lângă textul normal, sunt disponibile și variabile dinamice, cum ar fi Data, Utilizarea datelor și Temperatura:\n\n$G\<format\> : Data gregoriană, pe baza formatului*\n$P<format> : Data persană, pe baza formatului*\n$Nrx : Descărcări totale în perioada specificată ** ***\n$Ntx: Încărcări totale în perioada specificată ** ***\n$Nall : Trafic total în perioada specificată ** ***\n$Nssid : Nume SSID WiFi (dacă este cazul)\n\n$T\<format\>[interval] : Temperatura; Formatul \npoate fi b (pentru baterie), c (pentru CPU), g (pentru GPU) și s (pentru piele) \nÎn sfârșit, există un număr OPȚIONAL de interval de actualizare în secunde (implicit: 60 de secunde)\n\n*pentru format documentație, caută „Java Date Format”\n**Poți specifica perioada de statistici în PixelXpert/Meniul Diverse/Setări statistici de rețea\n***Dacă înlocuiești $N cu $Nc , vei obține statistici de date mobile (de ex. $Ncrx în loc de Nrx ) Actualizări Actualizare descărcată Atinge aici pentru instalare diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index bee7f6535..46429512f 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -225,7 +225,7 @@ Использовать отдельные плитки для WiFi и мобильных данных Использовать одну плитку интернета Параметры ползунка яркости - Adaptive brightness shortcut + Ярлык адаптивной яркости Показывать ползунок яркости в полураскрытой панели быстрых настроек Переместить ползунок яркости в нижнюю часть быстрых настроек Скрыть ползунок яркости из быстрых настроек @@ -258,13 +258,13 @@ Принудительно включена Принудительно отключена Автоматическое скрытие - Remap physical buttons + Переназначение физических кнопок Обход проверки подписи пакета Разрешить понижение версии приложения Включено на следующие 5 минут - Launcher options + Настройки лаунчера Отключить звука скриншота Разрешить снимок экрана из ограниченного содержимого @@ -478,17 +478,17 @@ Хуки Настройки - While screen is off - While screen is on - Long press power button - Long press volume up button - Long press volume down button - Double press power button - Toggle torch - Launch camera - Launch assistant - Toggle Do not disturb - Play/Pause media - Media control - Skip - Media control - Previous + Пока экран выключен + Пока экран включен + Длительное нажатие кнопки питания + Длительное нажатие кнопки увеличения громкости + Длительное нажатие кнопки уменьшения громкости + Двойное нажатие кнопки питания + Переключить фонарик + Запустить камеру + Запустить ассистента + Переключить \"Не беспокоить\" + Воспроизведение/пауза мультимедиа + Управление мультимедиа – Пропустить + Управление мультимедиа - Предыдущий From d50155729bada0cb394b205e221a4f6b1b0f9d67 Mon Sep 17 00:00:00 2001 From: Siavash Date: Wed, 19 Jun 2024 07:12:17 +0330 Subject: [PATCH 150/162] CHANGELOG: A15beta3: fixed multi row statusbar - system icons --- .../pixelxpert/modpacks/systemui/MultiStatusbarRows.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/MultiStatusbarRows.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/MultiStatusbarRows.java index a9a1104e2..0db19ac71 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/MultiStatusbarRows.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/MultiStatusbarRows.java @@ -1,7 +1,7 @@ package sh.siava.pixelxpert.modpacks.systemui; import static de.robv.android.xposed.XposedBridge.hookAllConstructors; -import static de.robv.android.xposed.XposedHelpers.findClass; +import static de.robv.android.xposed.XposedHelpers.findClassIfExists; import static sh.siava.pixelxpert.modpacks.XPrefs.Xprefs; import android.content.Context; @@ -49,7 +49,11 @@ public boolean listensTo(String packageName) { public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { if (!lpParam.packageName.equals(listenPackage)) return; - Class IconManagerClass = findClass("com.android.systemui.statusbar.phone.StatusBarIconController$IconManager", lpParam.classLoader); + Class IconManagerClass = findClassIfExists("com.android.systemui.statusbar.phone.ui.IconManager", lpParam.classLoader); + if(IconManagerClass == null) //pre 15beta3 + { + IconManagerClass = findClassIfExists("com.android.systemui.statusbar.phone.StatusBarIconController$IconManager", lpParam.classLoader); + } hookAllConstructors(IconManagerClass, new XC_MethodHook() { @Override From b4c31270d5b0201695f5c12350abe89945220727 Mon Sep 17 00:00:00 2001 From: Siavash Date: Wed, 19 Jun 2024 07:13:08 +0330 Subject: [PATCH 151/162] CHANGELOG: A15beta3: fixed QS light theme --- app/src/main/java/sh/siava/pixelxpert/modpacks/ModPacks.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/ModPacks.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/ModPacks.java index a7e0bb714..404e93f0f 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/ModPacks.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/ModPacks.java @@ -91,7 +91,7 @@ public static ArrayList> getMods(String packageNa //load before others modPacks.add(ThermalProvider.class); - if(Build.VERSION.SDK_INT == Build.VERSION_CODES.UPSIDE_DOWN_CAKE) + if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { setOverlay("QSLightThemeOverlay", false, true, true); modPacks.add(ThemeManager_14.class); From 451d287903d178c63df8a9b2a3ca899a5a15d37a Mon Sep 17 00:00:00 2001 From: Siavash Date: Wed, 19 Jun 2024 07:14:53 +0330 Subject: [PATCH 152/162] CHANGELOG: A15beta3: fixed a bootloop caused by statusbar mods --- .github/edit2MakeNewCanary | 2 +- .../pixelxpert/modpacks/systemui/StatusbarMods.java | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.github/edit2MakeNewCanary b/.github/edit2MakeNewCanary index 04ad0604c..65aeddb0b 100644 --- a/.github/edit2MakeNewCanary +++ b/.github/edit2MakeNewCanary @@ -1 +1 @@ -Editing this file will trigger the build script for a new canary.. \ No newline at end of file +Editing this file will trigger the build script for a new canary. \ No newline at end of file diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/StatusbarMods.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/StatusbarMods.java index ed7b2864a..2ba1b9925 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/StatusbarMods.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/StatusbarMods.java @@ -1072,10 +1072,14 @@ private void makeLeftSplitArea() { parent.removeView(mNotificationIconContainer); mLeftVerticalSplitContainer.addView(mNotificationContainerContainer); - View ongoingCallChipView = mStatusBar.findViewById(mContext.getResources().getIdentifier("ongoing_call_chip", "id", mContext.getPackageName())); - ((ViewGroup)ongoingCallChipView.getParent()).removeView(ongoingCallChipView); + View ongoingActivityChipView = mStatusBar.findViewById(mContext.getResources().getIdentifier("ongoing_activity_chip", "id", mContext.getPackageName())); + if(ongoingActivityChipView == null) //pre 15beta3 + { + ongoingActivityChipView = mStatusBar.findViewById(mContext.getResources().getIdentifier("ongoing_call_chip", "id", mContext.getPackageName())); + } + ((ViewGroup)ongoingActivityChipView.getParent()).removeView(ongoingActivityChipView); - mNotificationContainerContainer.addView(ongoingCallChipView); + mNotificationContainerContainer.addView(ongoingActivityChipView); mNotificationContainerContainer.addView(mNotificationIconContainer); ((LinearLayout.LayoutParams) mNotificationIconContainer.getLayoutParams()).weight = 100; From 401b33feed4b8200107b4d095861eb4f7a5dbc36 Mon Sep 17 00:00:00 2001 From: GitHub Date: Wed, 19 Jun 2024 03:50:07 +0000 Subject: [PATCH 153/162] Version update: Release --- CanaryChangelog.md | 5 +++++ MagiskModBase/module.prop | 4 ++-- MagiskModuleUpdate_Full.json | 4 ++-- MagiskModuleUpdate_Xposed.json | 4 ++-- app/build.gradle | 4 ++-- latestCanary.json | 4 ++-- 6 files changed, 15 insertions(+), 10 deletions(-) diff --git a/CanaryChangelog.md b/CanaryChangelog.md index f5c634ae4..4574f8816 100644 --- a/CanaryChangelog.md +++ b/CanaryChangelog.md @@ -1,3 +1,8 @@ +**canary-368** +- A15beta3: fixed a bootloop caused by statusbar mods +- A15beta3: fixed QS light theme +- A15beta3: fixed multi row statusbar - system icons + **canary-367** - physical buttons remap: bugfix diff --git a/MagiskModBase/module.prop b/MagiskModBase/module.prop index d2bedc9a9..3c4c23e16 100644 --- a/MagiskModBase/module.prop +++ b/MagiskModBase/module.prop @@ -1,7 +1,7 @@ id=PixelXpert name=Pixel Xpert -version=canary-367 -versionCode=367 +version=canary-368 +versionCode=368 author=Pixel Xpert Team description=Xposed based module for customizations on Pixel roms. Android 13+ updateJson=https://raw.githubusercontent.com/siavash79/PixelXpert/canary/MagiskModuleUpdate_Xposed.json diff --git a/MagiskModuleUpdate_Full.json b/MagiskModuleUpdate_Full.json index b34779118..050709ccc 100644 --- a/MagiskModuleUpdate_Full.json +++ b/MagiskModuleUpdate_Full.json @@ -1,6 +1,6 @@ { - "version": "canary-367", - "versionCode": 367, + "version": "canary-368", + "versionCode": 368, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/MagiskModuleUpdate_Xposed.json b/MagiskModuleUpdate_Xposed.json index b34779118..050709ccc 100644 --- a/MagiskModuleUpdate_Xposed.json +++ b/MagiskModuleUpdate_Xposed.json @@ -1,6 +1,6 @@ { - "version": "canary-367", - "versionCode": 367, + "version": "canary-368", + "versionCode": 368, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 79eaae337..aaaf8be72 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "sh.siava.pixelxpert" minSdk 33 targetSdk 34 - versionCode 367 - versionName "canary-367" + versionCode 368 + versionName "canary-368" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/latestCanary.json b/latestCanary.json index ff3186fc0..58be22edd 100644 --- a/latestCanary.json +++ b/latestCanary.json @@ -1,6 +1,6 @@ { - "version": "canary-367", - "versionCode": 367, + "version": "canary-368", + "versionCode": 368, "zipUrl_Xposed": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "zipUrl_Full": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" From 314dc85cafe1c9ff3c982b4f12e81fde4c600c36 Mon Sep 17 00:00:00 2001 From: Siavash Date: Wed, 19 Jun 2024 12:55:21 +0330 Subject: [PATCH 154/162] CHANGELOG: A15beta3: fixed forced monochrome icons --- .github/edit2MakeNewCanary | 2 +- .../modpacks/launcher/FeatureFlags.java | 36 +++++++++---------- .../utils/GoogleMonochromeIconFactory.java | 11 +++--- 3 files changed, 23 insertions(+), 26 deletions(-) diff --git a/.github/edit2MakeNewCanary b/.github/edit2MakeNewCanary index 65aeddb0b..04ad0604c 100644 --- a/.github/edit2MakeNewCanary +++ b/.github/edit2MakeNewCanary @@ -1 +1 @@ -Editing this file will trigger the build script for a new canary. \ No newline at end of file +Editing this file will trigger the build script for a new canary.. \ No newline at end of file diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/FeatureFlags.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/FeatureFlags.java index e02aecde4..3b830984e 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/FeatureFlags.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/FeatureFlags.java @@ -2,10 +2,9 @@ import static de.robv.android.xposed.XposedBridge.hookAllMethods; import static de.robv.android.xposed.XposedHelpers.findClass; -import static de.robv.android.xposed.XposedHelpers.getAdditionalInstanceField; import static de.robv.android.xposed.XposedHelpers.getIntField; -import static de.robv.android.xposed.XposedHelpers.setAdditionalInstanceField; import static sh.siava.pixelxpert.modpacks.XPrefs.Xprefs; +import static sh.siava.pixelxpert.modpacks.utils.toolkit.ReflectionTools.hookAllConstructors; import android.content.Context; import android.graphics.drawable.AdaptiveIconDrawable; @@ -20,9 +19,9 @@ @SuppressWarnings("RedundantThrows") public class FeatureFlags extends XposedModPack { private static final String listenPackage = Constants.LAUNCHER_PACKAGE; - private static final String FACTORY_FIELD_NAME = "mMonochromeIconFactoryPX"; - private static boolean ForceThemedLauncherIcons = false; + private int mIconBitmapSize; + private GoogleMonochromeIconFactory mGoogleMonochromeIconFactory; public FeatureFlags(Context context) { super(context); @@ -41,27 +40,26 @@ public boolean listensTo(String packageName) { @Override public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable { try { -// Class FeatureFlags = findClass("com.android.launcher3.config.FeatureFlags", lpParam.classLoader); - Class LauncherIconsClass = findClass("com.android.launcher3.icons.LauncherIcons", lpParam.classLoader); - Class ClippedMonoDrawableClass = findClass("com.android.launcher3.icons.BaseIconFactory$ClippedMonoDrawable", lpParam.classLoader); - hookAllMethods(LauncherIconsClass, "getMonochromeDrawable", new XC_MethodHook() { //flag doesn't work on A14B3 for some reason + Class BaseIconFactoryClass = findClass("com.android.launcher3.icons.BaseIconFactory", lpParam.classLoader); + + hookAllConstructors(BaseIconFactoryClass, new XC_MethodHook() { @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - if(!ForceThemedLauncherIcons) return; + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + mIconBitmapSize = getIntField(param.thisObject, "mIconBitmapSize"); + } + }); - try - { - if(!(param.args[0] instanceof AdaptiveIconDrawable) || ((AdaptiveIconDrawable) param.args[0]).getMonochrome() == null) + hookAllMethods(AdaptiveIconDrawable.class, "getMonochrome", new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { + try { + if(param.getResult() == null && ForceThemedLauncherIcons) { - //at this point it's clear that we don't have a monochrome icon - GoogleMonochromeIconFactory mGoogleMonochromeIconFactory = (GoogleMonochromeIconFactory) getAdditionalInstanceField(param.thisObject, FACTORY_FIELD_NAME); if(mGoogleMonochromeIconFactory == null) { - int mIconBitmapSize = getIntField(param.thisObject, "mIconBitmapSize"); - mGoogleMonochromeIconFactory = new GoogleMonochromeIconFactory(ClippedMonoDrawableClass, mIconBitmapSize); - setAdditionalInstanceField(param.thisObject, FACTORY_FIELD_NAME, mGoogleMonochromeIconFactory); + mGoogleMonochromeIconFactory = new GoogleMonochromeIconFactory(mIconBitmapSize); } - param.setResult(mGoogleMonochromeIconFactory.wrap((Drawable) param.args[0])); + param.setResult(mGoogleMonochromeIconFactory.wrap((Drawable) param.thisObject)); } } catch (Throwable ignored){} diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/GoogleMonochromeIconFactory.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/GoogleMonochromeIconFactory.java index 69ec78fdf..fca06c714 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/GoogleMonochromeIconFactory.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/GoogleMonochromeIconFactory.java @@ -40,7 +40,6 @@ * Utility class to generate monochrome icons version for a given drawable. */ public class GoogleMonochromeIconFactory extends Drawable { - Class mClippedMonoDrawableClass; private final Bitmap mFlatBitmap; private final Canvas mFlatCanvas; @@ -56,8 +55,7 @@ public class GoogleMonochromeIconFactory extends Drawable { private final Paint mDrawPaint; private final Rect mSrcRect; - public GoogleMonochromeIconFactory(Class ClippedMonoDrawableClass, int iconBitmapSize) { - mClippedMonoDrawableClass = ClippedMonoDrawableClass; + public GoogleMonochromeIconFactory(int iconBitmapSize) { float extraFactor = AdaptiveIconDrawable.getExtraInsetFraction(); float viewPortScale = 1 / (1 + 2 * extraFactor); @@ -108,7 +106,7 @@ public Drawable wrap(Drawable icon) { drawDrawable(aid.getBackground()); drawDrawable(aid.getForeground()); generateMono(); - return (Drawable) mClippedMonoDrawableClass.getConstructors()[0].newInstance(this); + return this; } } catch (Throwable ignored){} @@ -117,7 +115,7 @@ public Drawable wrap(Drawable icon) { mFlatCanvas.drawColor(Color.WHITE); drawDrawable(icon); generateMono(); - return (Drawable) mClippedMonoDrawableClass.getConstructors()[0].newInstance(this); + return this; } catch (Throwable ignored) { // WTF?! @@ -141,7 +139,8 @@ private void generateMono() { max = Math.max(max, b & 0xFF); } - if (min < max) { + if (min < max) //noinspection ExtractMethodRecommender + { // rescale pixels to increase contrast float range = max - min; From e16eeea7414e06ee7d3fd9d4e37e35f7ab4c5f6c Mon Sep 17 00:00:00 2001 From: GitHub Date: Wed, 19 Jun 2024 09:28:47 +0000 Subject: [PATCH 155/162] Version update: Release --- CanaryChangelog.md | 3 +++ MagiskModBase/module.prop | 4 ++-- MagiskModuleUpdate_Full.json | 4 ++-- MagiskModuleUpdate_Xposed.json | 4 ++-- app/build.gradle | 4 ++-- latestCanary.json | 4 ++-- 6 files changed, 13 insertions(+), 10 deletions(-) diff --git a/CanaryChangelog.md b/CanaryChangelog.md index 4574f8816..527cf8019 100644 --- a/CanaryChangelog.md +++ b/CanaryChangelog.md @@ -1,3 +1,6 @@ +**canary-369** +- A15beta3: fixed forced monochrome icons + **canary-368** - A15beta3: fixed a bootloop caused by statusbar mods - A15beta3: fixed QS light theme diff --git a/MagiskModBase/module.prop b/MagiskModBase/module.prop index 3c4c23e16..311457c09 100644 --- a/MagiskModBase/module.prop +++ b/MagiskModBase/module.prop @@ -1,7 +1,7 @@ id=PixelXpert name=Pixel Xpert -version=canary-368 -versionCode=368 +version=canary-369 +versionCode=369 author=Pixel Xpert Team description=Xposed based module for customizations on Pixel roms. Android 13+ updateJson=https://raw.githubusercontent.com/siavash79/PixelXpert/canary/MagiskModuleUpdate_Xposed.json diff --git a/MagiskModuleUpdate_Full.json b/MagiskModuleUpdate_Full.json index 050709ccc..4b902bb44 100644 --- a/MagiskModuleUpdate_Full.json +++ b/MagiskModuleUpdate_Full.json @@ -1,6 +1,6 @@ { - "version": "canary-368", - "versionCode": 368, + "version": "canary-369", + "versionCode": 369, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/MagiskModuleUpdate_Xposed.json b/MagiskModuleUpdate_Xposed.json index 050709ccc..4b902bb44 100644 --- a/MagiskModuleUpdate_Xposed.json +++ b/MagiskModuleUpdate_Xposed.json @@ -1,6 +1,6 @@ { - "version": "canary-368", - "versionCode": 368, + "version": "canary-369", + "versionCode": 369, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index aaaf8be72..10599174f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "sh.siava.pixelxpert" minSdk 33 targetSdk 34 - versionCode 368 - versionName "canary-368" + versionCode 369 + versionName "canary-369" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/latestCanary.json b/latestCanary.json index 58be22edd..de18acd2c 100644 --- a/latestCanary.json +++ b/latestCanary.json @@ -1,6 +1,6 @@ { - "version": "canary-368", - "versionCode": 368, + "version": "canary-369", + "versionCode": 369, "zipUrl_Xposed": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "zipUrl_Full": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" From f18c70ed8db855772a3511660eec87210fcb0e21 Mon Sep 17 00:00:00 2001 From: Siavash Date: Thu, 20 Jun 2024 16:07:27 +0330 Subject: [PATCH 156/162] CHANGELOG: A15beta3: fixed forced monochrome icons bug --- .../modpacks/launcher/FeatureFlags.java | 14 ++++++++------ .../utils/GoogleMonochromeIconFactory.java | 16 +++++++++------- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/FeatureFlags.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/FeatureFlags.java index 3b830984e..608e4eae6 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/FeatureFlags.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/launcher/FeatureFlags.java @@ -1,14 +1,15 @@ package sh.siava.pixelxpert.modpacks.launcher; +import static de.robv.android.xposed.XposedBridge.hookAllConstructors; import static de.robv.android.xposed.XposedBridge.hookAllMethods; import static de.robv.android.xposed.XposedHelpers.findClass; +import static de.robv.android.xposed.XposedHelpers.getAdditionalInstanceField; import static de.robv.android.xposed.XposedHelpers.getIntField; +import static de.robv.android.xposed.XposedHelpers.setAdditionalInstanceField; import static sh.siava.pixelxpert.modpacks.XPrefs.Xprefs; -import static sh.siava.pixelxpert.modpacks.utils.toolkit.ReflectionTools.hookAllConstructors; import android.content.Context; import android.graphics.drawable.AdaptiveIconDrawable; -import android.graphics.drawable.Drawable; import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.callbacks.XC_LoadPackage; @@ -21,7 +22,6 @@ public class FeatureFlags extends XposedModPack { private static final String listenPackage = Constants.LAUNCHER_PACKAGE; private static boolean ForceThemedLauncherIcons = false; private int mIconBitmapSize; - private GoogleMonochromeIconFactory mGoogleMonochromeIconFactory; public FeatureFlags(Context context) { super(context); @@ -55,11 +55,13 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { try { if(param.getResult() == null && ForceThemedLauncherIcons) { - if(mGoogleMonochromeIconFactory == null) + GoogleMonochromeIconFactory mono = (GoogleMonochromeIconFactory) getAdditionalInstanceField(param.thisObject, "mMonoFactoryPX"); + if(mono == null) { - mGoogleMonochromeIconFactory = new GoogleMonochromeIconFactory(mIconBitmapSize); + mono = new GoogleMonochromeIconFactory((AdaptiveIconDrawable) param.thisObject, mIconBitmapSize); + setAdditionalInstanceField(param.thisObject, "mMonoFactoryPX", mono); } - param.setResult(mGoogleMonochromeIconFactory.wrap((Drawable) param.thisObject)); + param.setResult(mono); } } catch (Throwable ignored){} diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/GoogleMonochromeIconFactory.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/GoogleMonochromeIconFactory.java index fca06c714..ab0561c2b 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/GoogleMonochromeIconFactory.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/utils/GoogleMonochromeIconFactory.java @@ -30,6 +30,7 @@ import android.graphics.PixelFormat; import android.graphics.Rect; import android.graphics.drawable.AdaptiveIconDrawable; +import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import androidx.annotation.WorkerThread; @@ -39,7 +40,7 @@ /** * Utility class to generate monochrome icons version for a given drawable. */ -public class GoogleMonochromeIconFactory extends Drawable { +public class GoogleMonochromeIconFactory extends BitmapDrawable { private final Bitmap mFlatBitmap; private final Canvas mFlatCanvas; @@ -55,8 +56,8 @@ public class GoogleMonochromeIconFactory extends Drawable { private final Paint mDrawPaint; private final Rect mSrcRect; - public GoogleMonochromeIconFactory(int iconBitmapSize) { - + /** @noinspection deprecation*/ + public GoogleMonochromeIconFactory(Drawable icon, int iconBitmapSize) { float extraFactor = AdaptiveIconDrawable.getExtraInsetFraction(); float viewPortScale = 1 / (1 + 2 * extraFactor); mBitmapSize = Math.round(iconBitmapSize * 2 * viewPortScale); @@ -84,6 +85,8 @@ public GoogleMonochromeIconFactory(int iconBitmapSize) { vals[15] = vals[16] = vals[17] = .3333f; vals[18] = vals[19] = 0; mCopyPaint.setColorFilter(new ColorMatrixColorFilter(vals)); + + convertMono(icon); } private void drawDrawable(Drawable drawable) { @@ -97,7 +100,7 @@ private void drawDrawable(Drawable drawable) { * Creates a monochrome version of the provided drawable */ @WorkerThread - public Drawable wrap(Drawable icon) { + public void convertMono(Drawable icon) { try { if (icon instanceof AdaptiveIconDrawable) { @@ -106,7 +109,7 @@ public Drawable wrap(Drawable icon) { drawDrawable(aid.getBackground()); drawDrawable(aid.getForeground()); generateMono(); - return this; + return; } } catch (Throwable ignored){} @@ -115,11 +118,9 @@ public Drawable wrap(Drawable icon) { mFlatCanvas.drawColor(Color.WHITE); drawDrawable(icon); generateMono(); - return this; } catch (Throwable ignored) { // WTF?! - return null; } } @@ -163,6 +164,7 @@ private void generateMono() { } buffer.rewind(); mAlphaBitmap.copyPixelsFromBuffer(buffer); + setBitmap(mAlphaBitmap); } } From 5d5cebdc13988311be9e770b902fa98f450db860 Mon Sep 17 00:00:00 2001 From: Siavash Date: Thu, 20 Jun 2024 16:45:43 +0330 Subject: [PATCH 157/162] CHANGELOG: A15beta3: screenshot error when sound is disabled --- .github/edit2MakeNewCanary | 2 +- .../pixelxpert/modpacks/systemui/ScreenshotManager.java | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/edit2MakeNewCanary b/.github/edit2MakeNewCanary index 04ad0604c..65aeddb0b 100644 --- a/.github/edit2MakeNewCanary +++ b/.github/edit2MakeNewCanary @@ -1 +1 @@ -Editing this file will trigger the build script for a new canary.. \ No newline at end of file +Editing this file will trigger the build script for a new canary. \ No newline at end of file diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ScreenshotManager.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ScreenshotManager.java index 2afb5a861..cbde888e6 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ScreenshotManager.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/ScreenshotManager.java @@ -4,6 +4,7 @@ import static de.robv.android.xposed.XposedBridge.hookAllMethods; import static de.robv.android.xposed.XposedHelpers.findClass; import static de.robv.android.xposed.XposedHelpers.findClassIfExists; +import static de.robv.android.xposed.XposedHelpers.findFieldIfExists; import static de.robv.android.xposed.XposedHelpers.getObjectField; import static de.robv.android.xposed.XposedHelpers.setObjectField; import static sh.siava.pixelxpert.modpacks.XPrefs.Xprefs; @@ -27,7 +28,6 @@ import sh.siava.pixelxpert.modpacks.Constants; import sh.siava.pixelxpert.modpacks.XPLauncher; import sh.siava.pixelxpert.modpacks.XposedModPack; -import sh.siava.pixelxpert.modpacks.utils.toolkit.ReflectionTools; @SuppressWarnings("RedundantThrows") public class ScreenshotManager extends XposedModPack { @@ -84,9 +84,11 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable { protected void afterHookedMethod(MethodHookParam param) throws Throwable { if (!disableScreenshotSound) return; - ((ExecutorService) getObjectField(param.thisObject, "mBgExecutor")).shutdownNow(); + if(findFieldIfExists(ScreenshotControllerClass, "mScreenshotSoundController") == null) { //Since 15B3 bg executor has other usages than sound. Don't kill it if that's the case + ((ExecutorService) getObjectField(param.thisObject, "mBgExecutor")).shutdownNow(); - setObjectField(param.thisObject, "mBgExecutor", new NoExecutor()); + setObjectField(param.thisObject, "mBgExecutor", new NoExecutor()); + } } }); From d568a432419a6a72d542155ed04b9d70ac3a0128 Mon Sep 17 00:00:00 2001 From: GitHub Date: Thu, 20 Jun 2024 13:18:56 +0000 Subject: [PATCH 158/162] Version update: Release --- CanaryChangelog.md | 4 ++++ MagiskModBase/module.prop | 4 ++-- MagiskModuleUpdate_Full.json | 4 ++-- MagiskModuleUpdate_Xposed.json | 4 ++-- app/build.gradle | 4 ++-- latestCanary.json | 4 ++-- 6 files changed, 14 insertions(+), 10 deletions(-) diff --git a/CanaryChangelog.md b/CanaryChangelog.md index 527cf8019..f6b250144 100644 --- a/CanaryChangelog.md +++ b/CanaryChangelog.md @@ -1,3 +1,7 @@ +**canary-370** +- A15beta3: screenshot error when sound is disabled +- A15beta3: fixed forced monochrome icons bug + **canary-369** - A15beta3: fixed forced monochrome icons diff --git a/MagiskModBase/module.prop b/MagiskModBase/module.prop index 311457c09..ce3403546 100644 --- a/MagiskModBase/module.prop +++ b/MagiskModBase/module.prop @@ -1,7 +1,7 @@ id=PixelXpert name=Pixel Xpert -version=canary-369 -versionCode=369 +version=canary-370 +versionCode=370 author=Pixel Xpert Team description=Xposed based module for customizations on Pixel roms. Android 13+ updateJson=https://raw.githubusercontent.com/siavash79/PixelXpert/canary/MagiskModuleUpdate_Xposed.json diff --git a/MagiskModuleUpdate_Full.json b/MagiskModuleUpdate_Full.json index 4b902bb44..3f7b7fd3a 100644 --- a/MagiskModuleUpdate_Full.json +++ b/MagiskModuleUpdate_Full.json @@ -1,6 +1,6 @@ { - "version": "canary-369", - "versionCode": 369, + "version": "canary-370", + "versionCode": 370, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/MagiskModuleUpdate_Xposed.json b/MagiskModuleUpdate_Xposed.json index 4b902bb44..3f7b7fd3a 100644 --- a/MagiskModuleUpdate_Xposed.json +++ b/MagiskModuleUpdate_Xposed.json @@ -1,6 +1,6 @@ { - "version": "canary-369", - "versionCode": 369, + "version": "canary-370", + "versionCode": 370, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 10599174f..b2fe632d1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "sh.siava.pixelxpert" minSdk 33 targetSdk 34 - versionCode 369 - versionName "canary-369" + versionCode 370 + versionName "canary-370" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/latestCanary.json b/latestCanary.json index de18acd2c..7b10e31ce 100644 --- a/latestCanary.json +++ b/latestCanary.json @@ -1,6 +1,6 @@ { - "version": "canary-369", - "versionCode": 369, + "version": "canary-370", + "versionCode": 370, "zipUrl_Xposed": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "zipUrl_Full": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" From 00e53d4d2f4cd8077fedd52484147883f1d4226a Mon Sep 17 00:00:00 2001 From: Crowdin Bot Date: Sun, 23 Jun 2024 00:52:18 +0000 Subject: [PATCH 159/162] New Crowdin translations by GitHub Action --- app/src/main/res/values-pt-rPT/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index c56cdae45..e4b58b4cb 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -56,7 +56,7 @@ Papel de parede com efeito de profundidade Integre dinamicamente o primeiro plano do papel de parede com o relógio Opacidade do primeiro plano do papel de parede - Also on \"always on display\" + Também no \"always on display\" O modelo AI é baixado no dispositivo O modelo AI não está disponível no dispositivo (ainda) Desativar animação da dica de desbloqueio @@ -225,7 +225,7 @@ Usar WiFi e Dados em separado Usar apenas o atalho Internet Opções do controlo de brilho - Adaptive brightness shortcut + Atalho para brilho adaptável Controlo de brilho no painel rápido das DR Controlo de brilho no fundo do painel Esconder o controlo de brilho From 2914079bd0ad430421686e017be4c62fa978613d Mon Sep 17 00:00:00 2001 From: Siavash Date: Sat, 29 Jun 2024 11:05:45 +0330 Subject: [PATCH 160/162] CHANGELOG: A15beta3: Fixed transparent fingerprint color --- .../modpacks/systemui/UDFPSManager.java | 31 ++++++++++--------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/UDFPSManager.java b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/UDFPSManager.java index 242174f62..69c2941bd 100644 --- a/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/UDFPSManager.java +++ b/app/src/main/java/sh/siava/pixelxpert/modpacks/systemui/UDFPSManager.java @@ -31,6 +31,8 @@ public class UDFPSManager extends XposedModPack { private static boolean transparentBG = false; private static boolean transparentFG = false; private Object mDeviceEntryIconView; + private Class StateFlowImplClass; + private Class ReadonlyStateFlowClass; public UDFPSManager(Context context) { super(context); @@ -67,29 +69,30 @@ public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) { if(UdfpsKeyguardViewClass == null) //A15 Beta 2 - Compose { Class DeviceEntryIconViewClass = findClass("com.android.systemui.keyguard.ui.view.DeviceEntryIconView", lpParam.classLoader); - Class ForegroundIconViewModelClass = findClass("com.android.systemui.keyguard.ui.viewmodel.DeviceEntryForegroundViewModel$ForegroundIconViewModel", lpParam.classLoader); + Class DeviceEntryIconViewModelClass = findClass("com.android.systemui.keyguard.ui.viewmodel.DeviceEntryIconViewModel", lpParam.classLoader); - hookAllConstructors(DeviceEntryIconViewClass, new XC_MethodHook() { + StateFlowImplClass = findClass("kotlinx.coroutines.flow.StateFlowImpl", lpParam.classLoader); + ReadonlyStateFlowClass = findClass("kotlinx.coroutines.flow.ReadonlyStateFlow", lpParam.classLoader); + + hookAllConstructors(DeviceEntryIconViewModelClass, new XC_MethodHook() { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { - mDeviceEntryIconView = param.thisObject; - - setUDFPSGraphics(false); + if((transparentBG && !transparentFG)) { + try { + Object FalseFlow = StateFlowImplClass.getConstructor(Object.class).newInstance(false); + setObjectField(param.thisObject, "useBackgroundProtection", ReadonlyStateFlowClass.getConstructors()[0].newInstance(FalseFlow)); + } catch (Throwable ignored) {} + } } }); - hookAllConstructors(ForegroundIconViewModelClass, new XC_MethodHook() { + + hookAllConstructors(DeviceEntryIconViewClass, new XC_MethodHook() { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { - if(transparentBG && !transparentFG) - { - @SuppressLint("DiscouragedApi") - int tint = getColorAttrDefaultColor( - mContext, - mContext.getResources().getIdentifier("wallpaperTextColorAccent", "attr", mContext.getPackageName())); + mDeviceEntryIconView = param.thisObject; - setObjectField(param.thisObject, "tint", tint); - } + setUDFPSGraphics(false); } }); } From 22f004dab9f02959100df1cec135d735dbf3c16a Mon Sep 17 00:00:00 2001 From: Siavash Date: Sat, 29 Jun 2024 12:05:19 +0330 Subject: [PATCH 161/162] canary release --- .github/edit2MakeNewCanary | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/edit2MakeNewCanary b/.github/edit2MakeNewCanary index 65aeddb0b..04ad0604c 100644 --- a/.github/edit2MakeNewCanary +++ b/.github/edit2MakeNewCanary @@ -1 +1 @@ -Editing this file will trigger the build script for a new canary. \ No newline at end of file +Editing this file will trigger the build script for a new canary.. \ No newline at end of file From 10378e8ac3458ce7aa894e97a0a5a9aad88791f6 Mon Sep 17 00:00:00 2001 From: GitHub Date: Sat, 29 Jun 2024 08:38:14 +0000 Subject: [PATCH 162/162] Version update: Release --- CanaryChangelog.md | 3 +++ MagiskModBase/module.prop | 4 ++-- MagiskModuleUpdate_Full.json | 4 ++-- MagiskModuleUpdate_Xposed.json | 4 ++-- app/build.gradle | 4 ++-- latestCanary.json | 4 ++-- 6 files changed, 13 insertions(+), 10 deletions(-) diff --git a/CanaryChangelog.md b/CanaryChangelog.md index f6b250144..681bcb915 100644 --- a/CanaryChangelog.md +++ b/CanaryChangelog.md @@ -1,3 +1,6 @@ +**canary-371** +- A15beta3: Fixed transparent fingerprint color + **canary-370** - A15beta3: screenshot error when sound is disabled - A15beta3: fixed forced monochrome icons bug diff --git a/MagiskModBase/module.prop b/MagiskModBase/module.prop index ce3403546..97235746f 100644 --- a/MagiskModBase/module.prop +++ b/MagiskModBase/module.prop @@ -1,7 +1,7 @@ id=PixelXpert name=Pixel Xpert -version=canary-370 -versionCode=370 +version=canary-371 +versionCode=371 author=Pixel Xpert Team description=Xposed based module for customizations on Pixel roms. Android 13+ updateJson=https://raw.githubusercontent.com/siavash79/PixelXpert/canary/MagiskModuleUpdate_Xposed.json diff --git a/MagiskModuleUpdate_Full.json b/MagiskModuleUpdate_Full.json index 3f7b7fd3a..fbf099beb 100644 --- a/MagiskModuleUpdate_Full.json +++ b/MagiskModuleUpdate_Full.json @@ -1,6 +1,6 @@ { - "version": "canary-370", - "versionCode": 370, + "version": "canary-371", + "versionCode": 371, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/MagiskModuleUpdate_Xposed.json b/MagiskModuleUpdate_Xposed.json index 3f7b7fd3a..fbf099beb 100644 --- a/MagiskModuleUpdate_Xposed.json +++ b/MagiskModuleUpdate_Xposed.json @@ -1,6 +1,6 @@ { - "version": "canary-370", - "versionCode": 370, + "version": "canary-371", + "versionCode": 371, "zipUrl": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md" } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b2fe632d1..bcb14366d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "sh.siava.pixelxpert" minSdk 33 targetSdk 34 - versionCode 370 - versionName "canary-370" + versionCode 371 + versionName "canary-371" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/latestCanary.json b/latestCanary.json index 7b10e31ce..f55195dbf 100644 --- a/latestCanary.json +++ b/latestCanary.json @@ -1,6 +1,6 @@ { - "version": "canary-370", - "versionCode": 370, + "version": "canary-371", + "versionCode": 371, "zipUrl_Xposed": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "zipUrl_Full": "https://github.com/siavash79/PixelXpert/releases/download/canary_builds/PixelXpert.zip", "changelog": "https://raw.githubusercontent.com/siavash79/PixelXpert/canary/CanaryChangelog.md"