diff --git a/app/src/foss/java/com/drdisagree/iconify/xposed/modules/lockscreen/depthwallpaper/DepthWallpaperA15.kt b/app/src/foss/java/com/drdisagree/iconify/xposed/modules/lockscreen/depthwallpaper/DepthWallpaperA15.kt index f4e46ebd2..4e01ca90d 100644 --- a/app/src/foss/java/com/drdisagree/iconify/xposed/modules/lockscreen/depthwallpaper/DepthWallpaperA15.kt +++ b/app/src/foss/java/com/drdisagree/iconify/xposed/modules/lockscreen/depthwallpaper/DepthWallpaperA15.kt @@ -28,7 +28,7 @@ import com.drdisagree.iconify.R import com.drdisagree.iconify.data.common.Const.ACTION_EXTRACT_FAILURE import com.drdisagree.iconify.data.common.Const.ACTION_EXTRACT_SUBJECT import com.drdisagree.iconify.data.common.Const.ACTION_EXTRACT_SUCCESS -import com.drdisagree.iconify.data.common.Const.ACTION_UPDATE_DEPTH_WALLPAPER_FOREGROUND_VISIBILITY +import com.drdisagree.iconify.xposed.modules.lockscreen.AlbumArt.Companion.addAlbumArtVisibilityListener import com.drdisagree.iconify.data.common.Const.AI_PLUGIN_PACKAGE import com.drdisagree.iconify.data.common.Const.SYSTEMUI_PACKAGE import com.drdisagree.iconify.data.common.Preferences.CUSTOM_DEPTH_WALLPAPER_SWITCH @@ -58,6 +58,7 @@ import com.drdisagree.iconify.xposed.modules.extras.utils.toolkit.hookMethod import com.drdisagree.iconify.xposed.modules.extras.utils.toolkit.log import com.drdisagree.iconify.xposed.modules.lockscreen.AlbumArt.Companion.shouldShowAlbumArt import com.drdisagree.iconify.xposed.modules.lockscreen.Lockscreen.Companion.isComposeLockscreen +import com.drdisagree.iconify.xposed.utils.OemUtils import com.drdisagree.iconify.xposed.utils.XPrefs.Xprefs import de.robv.android.xposed.XC_MethodHook import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam @@ -103,14 +104,7 @@ class DepthWallpaperA15(context: Context) : ModPack(context) { ) private var shouldShowForeground = true - private var mBroadcastRegistered = false - private val mReceiver: BroadcastReceiver = object : BroadcastReceiver() { - override fun onReceive(context: Context?, intent: Intent?) { - if (intent?.action == ACTION_UPDATE_DEPTH_WALLPAPER_FOREGROUND_VISIBILITY) { - updateForegroundVisibility() - } - } - } + private var mAlbumArtListenerRegistered = false override fun updatePrefs(vararg key: String) { Xprefs.apply { @@ -145,26 +139,12 @@ class DepthWallpaperA15(context: Context) : ModPack(context) { @SuppressLint("UnspecifiedRegisterReceiverFlag", "NewApi") override fun handleLoadPackage(loadPackageParam: LoadPackageParam) { - // Receiver to handle foreground visibility - if (!mBroadcastRegistered) { - val intentFilter = IntentFilter().apply { - addAction(ACTION_UPDATE_DEPTH_WALLPAPER_FOREGROUND_VISIBILITY) - } - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { - mContext.registerReceiver( - mReceiver, - intentFilter, - Context.RECEIVER_EXPORTED - ) - } else { - mContext.registerReceiver( - mReceiver, - intentFilter - ) + // Listen for album art visibility changes directly (in-process) + if (!mAlbumArtListenerRegistered) { + addAlbumArtVisibilityListener { + updateForegroundVisibility() } - - mBroadcastRegistered = true + mAlbumArtListenerRegistered = true } mPluginReceiver = object : BroadcastReceiver() { @@ -269,6 +249,11 @@ class DepthWallpaperA15(context: Context) : ModPack(context) { return@postDelayed } + // Sony has duplicate keyguard_root_view; the correct one has clipChildren=false + if (OemUtils.isSony && rootView.clipChildren) { + return@postDelayed + } + if (!mLayersCreated) { createLayers() } diff --git a/app/src/main/java/com/drdisagree/iconify/xposed/modules/lockscreen/Lockscreen.kt b/app/src/main/java/com/drdisagree/iconify/xposed/modules/lockscreen/Lockscreen.kt index cafe1f7d3..e956d1f68 100644 --- a/app/src/main/java/com/drdisagree/iconify/xposed/modules/lockscreen/Lockscreen.kt +++ b/app/src/main/java/com/drdisagree/iconify/xposed/modules/lockscreen/Lockscreen.kt @@ -26,6 +26,7 @@ import com.drdisagree.iconify.xposed.modules.extras.utils.toolkit.callMethodSile import com.drdisagree.iconify.xposed.modules.extras.utils.toolkit.hookConstructor import com.drdisagree.iconify.xposed.modules.extras.utils.toolkit.hookLayout import com.drdisagree.iconify.xposed.modules.extras.utils.toolkit.hookMethod +import com.drdisagree.iconify.xposed.utils.OemUtils import com.drdisagree.iconify.xposed.utils.XPrefs.Xprefs import de.robv.android.xposed.XC_MethodHook import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam @@ -139,6 +140,11 @@ class Lockscreen(context: Context) : ModPack(context) { return@postDelayed } + // Sony has duplicate keyguard_root_view; the correct one has clipChildren=false + if (OemUtils.isSony && rootView.clipChildren) { + return@postDelayed + } + listOf( "device_entry_icon_bg", "device_entry_icon_fg" diff --git a/app/src/main/java/com/drdisagree/iconify/xposed/modules/lockscreen/clock/LockscreenClockA15.kt b/app/src/main/java/com/drdisagree/iconify/xposed/modules/lockscreen/clock/LockscreenClockA15.kt index e66b03189..e4fa9a020 100644 --- a/app/src/main/java/com/drdisagree/iconify/xposed/modules/lockscreen/clock/LockscreenClockA15.kt +++ b/app/src/main/java/com/drdisagree/iconify/xposed/modules/lockscreen/clock/LockscreenClockA15.kt @@ -85,6 +85,7 @@ import com.drdisagree.iconify.xposed.modules.extras.utils.toolkit.log import com.drdisagree.iconify.xposed.modules.extras.views.AodBurnInProtection import com.drdisagree.iconify.xposed.modules.extras.views.ArcProgressImageView import com.drdisagree.iconify.xposed.modules.lockscreen.Lockscreen.Companion.isComposeLockscreen +import com.drdisagree.iconify.xposed.utils.OemUtils import com.drdisagree.iconify.xposed.utils.XPrefs.Xprefs import com.drdisagree.iconify.xposed.utils.XPrefs.XprefsIsInitialized import de.robv.android.xposed.XC_MethodHook @@ -270,6 +271,11 @@ class LockscreenClockA15(context: Context) : ModPack(context) { return@postDelayed } + // Sony has duplicate keyguard_root_view; the correct one has clipChildren=false + if (OemUtils.isSony && rootView.clipChildren) { + return@postDelayed + } + mLockscreenRootView = rootView mLsItemsContainer = rootView.getLsItemsContainer() diff --git a/app/src/main/java/com/drdisagree/iconify/xposed/modules/lockscreen/weather/LockscreenWeatherA15.kt b/app/src/main/java/com/drdisagree/iconify/xposed/modules/lockscreen/weather/LockscreenWeatherA15.kt index 6312e879f..8d05decf6 100644 --- a/app/src/main/java/com/drdisagree/iconify/xposed/modules/lockscreen/weather/LockscreenWeatherA15.kt +++ b/app/src/main/java/com/drdisagree/iconify/xposed/modules/lockscreen/weather/LockscreenWeatherA15.kt @@ -58,6 +58,7 @@ import com.drdisagree.iconify.xposed.modules.extras.utils.toolkit.hookMethod import com.drdisagree.iconify.xposed.modules.extras.views.AodBurnInProtection import com.drdisagree.iconify.xposed.modules.extras.views.CurrentWeatherView import com.drdisagree.iconify.xposed.modules.lockscreen.Lockscreen.Companion.isComposeLockscreen +import com.drdisagree.iconify.xposed.utils.OemUtils import com.drdisagree.iconify.xposed.utils.XPrefs.Xprefs import com.drdisagree.iconify.xposed.utils.XPrefs.XprefsIsInitialized import de.robv.android.xposed.XC_MethodHook @@ -226,6 +227,11 @@ class LockscreenWeatherA15(context: Context) : ModPack(context) { return@postDelayed } + // Sony has duplicate keyguard_root_view; the correct one has clipChildren=false + if (OemUtils.isSony && rootView.clipChildren) { + return@postDelayed + } + dateSmartSpaceViewAvailable = rootView.findViewById( mContext.resources.getIdentifier( "date_smartspace_view", diff --git a/app/src/main/java/com/drdisagree/iconify/xposed/modules/lockscreen/widgets/LockscreenWidgetsA15.kt b/app/src/main/java/com/drdisagree/iconify/xposed/modules/lockscreen/widgets/LockscreenWidgetsA15.kt index fffc2d1b5..8f5181372 100644 --- a/app/src/main/java/com/drdisagree/iconify/xposed/modules/lockscreen/widgets/LockscreenWidgetsA15.kt +++ b/app/src/main/java/com/drdisagree/iconify/xposed/modules/lockscreen/widgets/LockscreenWidgetsA15.kt @@ -64,6 +64,7 @@ import com.drdisagree.iconify.xposed.modules.extras.views.LockscreenWidgetsView import com.drdisagree.iconify.xposed.modules.lockscreen.Lockscreen.Companion.isComposeLockscreen import com.drdisagree.iconify.xposed.modules.lockscreen.widgets.LockscreenWidgets.Companion.launchableImageViewClass import com.drdisagree.iconify.xposed.modules.lockscreen.widgets.LockscreenWidgets.Companion.launchableLinearLayoutClass +import com.drdisagree.iconify.xposed.utils.OemUtils import com.drdisagree.iconify.xposed.utils.XPrefs.Xprefs import com.drdisagree.iconify.xposed.utils.XPrefs.XprefsIsInitialized import de.robv.android.xposed.XC_MethodHook @@ -301,6 +302,11 @@ class LockscreenWidgetsA15(context: Context) : ModPack(context) { return@postDelayed } + // Sony has duplicate keyguard_root_view; the correct one has clipChildren=false + if (OemUtils.isSony && rootView.clipChildren) { + return@postDelayed + } + dateSmartSpaceViewAvailable = rootView.findViewById( mContext.resources.getIdentifier( "date_smartspace_view", diff --git a/app/src/main/java/com/drdisagree/iconify/xposed/modules/quicksettings/themes/QSLightThemeA15.kt b/app/src/main/java/com/drdisagree/iconify/xposed/modules/quicksettings/themes/QSLightThemeA15.kt index 50fc88719..885b5ba22 100644 --- a/app/src/main/java/com/drdisagree/iconify/xposed/modules/quicksettings/themes/QSLightThemeA15.kt +++ b/app/src/main/java/com/drdisagree/iconify/xposed/modules/quicksettings/themes/QSLightThemeA15.kt @@ -30,6 +30,7 @@ import com.drdisagree.iconify.xposed.modules.extras.utils.toolkit.hookMethod import com.drdisagree.iconify.xposed.modules.extras.utils.toolkit.hookMethodMatchPattern import com.drdisagree.iconify.xposed.modules.extras.utils.toolkit.log import com.drdisagree.iconify.xposed.modules.extras.utils.toolkit.setField +import com.drdisagree.iconify.xposed.utils.OemUtils import com.drdisagree.iconify.xposed.utils.SystemUtils import com.drdisagree.iconify.xposed.utils.XPrefs.Xprefs import de.robv.android.xposed.XC_MethodHook @@ -954,6 +955,11 @@ class QSLightThemeA15(context: Context) : ModPack(context) { calculateColors() + // Sony devices don't support QSLT/QSDT framework overlays due to + // different QS resource structures. The Xposed hooks in calculateColors() + // handle theming instead. + if (OemUtils.isSony) return + Utils.disableOverlays(qsLightThemeOverlay, qsDualToneOverlay) try { diff --git a/app/src/main/java/com/drdisagree/iconify/xposed/modules/quicksettings/themes/Utils.kt b/app/src/main/java/com/drdisagree/iconify/xposed/modules/quicksettings/themes/Utils.kt index d5c680ab1..2b3669639 100644 --- a/app/src/main/java/com/drdisagree/iconify/xposed/modules/quicksettings/themes/Utils.kt +++ b/app/src/main/java/com/drdisagree/iconify/xposed/modules/quicksettings/themes/Utils.kt @@ -3,6 +3,7 @@ package com.drdisagree.iconify.xposed.modules.quicksettings.themes import android.service.quicksettings.Tile import com.drdisagree.iconify.xposed.HookEntry.Companion.enqueueProxyCommand import com.drdisagree.iconify.xposed.modules.extras.utils.toolkit.getField +import com.drdisagree.iconify.xposed.modules.extras.utils.toolkit.log import de.robv.android.xposed.XC_MethodHook object Utils { @@ -43,15 +44,23 @@ object Utils { fun enableOverlay(pkgName: String) { enqueueProxyCommand { proxy -> - proxy.runCommand("cmd overlay enable --user current $pkgName") - proxy.runCommand("cmd overlay set-priority $pkgName highest") + try { + proxy.runCommand("cmd overlay enable --user current $pkgName") + proxy.runCommand("cmd overlay set-priority $pkgName highest") + } catch (e: Throwable) { + log("QSThemeUtils", "Failed to enable overlay $pkgName: ${e.message}") + } } } fun enableOverlay(pkgName: String, priority: String) { enqueueProxyCommand { proxy -> - proxy.runCommand("cmd overlay enable --user current $pkgName") - proxy.runCommand("cmd overlay set-priority $pkgName $priority") + try { + proxy.runCommand("cmd overlay enable --user current $pkgName") + proxy.runCommand("cmd overlay set-priority $pkgName $priority") + } catch (e: Throwable) { + log("QSThemeUtils", "Failed to enable overlay $pkgName: ${e.message}") + } } } @@ -64,13 +73,21 @@ object Utils { } enqueueProxyCommand { proxy -> - proxy.runCommand(command.toString().trim { it <= ' ' }) + try { + proxy.runCommand(command.toString().trim { it <= ' ' }) + } catch (e: Throwable) { + log("QSThemeUtils", "Failed to enable overlays: ${e.message}") + } } } fun disableOverlay(pkgName: String) { enqueueProxyCommand { proxy -> - proxy.runCommand("cmd overlay disable --user current $pkgName") + try { + proxy.runCommand("cmd overlay disable --user current $pkgName") + } catch (e: Throwable) { + log("QSThemeUtils", "Failed to disable overlay $pkgName: ${e.message}") + } } } @@ -82,7 +99,11 @@ object Utils { } enqueueProxyCommand { proxy -> - proxy.runCommand(command.toString().trim { it <= ' ' }) + try { + proxy.runCommand(command.toString().trim { it <= ' ' }) + } catch (e: Throwable) { + log("QSThemeUtils", "Failed to disable overlays: ${e.message}") + } } } } \ No newline at end of file diff --git a/app/src/main/java/com/drdisagree/iconify/xposed/utils/OemUtils.kt b/app/src/main/java/com/drdisagree/iconify/xposed/utils/OemUtils.kt new file mode 100644 index 000000000..1e6903c5c --- /dev/null +++ b/app/src/main/java/com/drdisagree/iconify/xposed/utils/OemUtils.kt @@ -0,0 +1,9 @@ +package com.drdisagree.iconify.xposed.utils + +import android.os.Build + +object OemUtils { + val isSony: Boolean by lazy { + Build.MANUFACTURER.equals("Sony", ignoreCase = true) + } +} diff --git a/app/src/standard/java/com/drdisagree/iconify/xposed/modules/lockscreen/depthwallpaper/DepthWallpaperA15.kt b/app/src/standard/java/com/drdisagree/iconify/xposed/modules/lockscreen/depthwallpaper/DepthWallpaperA15.kt index 959d4cdd4..2686101ad 100644 --- a/app/src/standard/java/com/drdisagree/iconify/xposed/modules/lockscreen/depthwallpaper/DepthWallpaperA15.kt +++ b/app/src/standard/java/com/drdisagree/iconify/xposed/modules/lockscreen/depthwallpaper/DepthWallpaperA15.kt @@ -29,7 +29,7 @@ import com.drdisagree.iconify.R import com.drdisagree.iconify.data.common.Const.ACTION_EXTRACT_FAILURE import com.drdisagree.iconify.data.common.Const.ACTION_EXTRACT_SUBJECT import com.drdisagree.iconify.data.common.Const.ACTION_EXTRACT_SUCCESS -import com.drdisagree.iconify.data.common.Const.ACTION_UPDATE_DEPTH_WALLPAPER_FOREGROUND_VISIBILITY +import com.drdisagree.iconify.xposed.modules.lockscreen.AlbumArt.Companion.addAlbumArtVisibilityListener import com.drdisagree.iconify.data.common.Const.AI_PLUGIN_PACKAGE import com.drdisagree.iconify.data.common.Const.SYSTEMUI_PACKAGE import com.drdisagree.iconify.data.common.Preferences.CUSTOM_DEPTH_WALLPAPER_SWITCH @@ -60,6 +60,7 @@ import com.drdisagree.iconify.xposed.modules.extras.utils.toolkit.hookMethod import com.drdisagree.iconify.xposed.modules.extras.utils.toolkit.log import com.drdisagree.iconify.xposed.modules.lockscreen.AlbumArt.Companion.shouldShowAlbumArt import com.drdisagree.iconify.xposed.modules.lockscreen.Lockscreen.Companion.isComposeLockscreen +import com.drdisagree.iconify.xposed.utils.OemUtils import com.drdisagree.iconify.xposed.utils.XPrefs.Xprefs import de.robv.android.xposed.XC_MethodHook import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam @@ -105,14 +106,7 @@ class DepthWallpaperA15(context: Context) : ModPack(context) { ) private var shouldShowForeground = true - private var mBroadcastRegistered = false - private val mReceiver: BroadcastReceiver = object : BroadcastReceiver() { - override fun onReceive(context: Context?, intent: Intent?) { - if (intent?.action == ACTION_UPDATE_DEPTH_WALLPAPER_FOREGROUND_VISIBILITY) { - updateForegroundVisibility() - } - } - } + private var mAlbumArtListenerRegistered = false override fun updatePrefs(vararg key: String) { Xprefs.apply { @@ -147,26 +141,12 @@ class DepthWallpaperA15(context: Context) : ModPack(context) { @SuppressLint("UnspecifiedRegisterReceiverFlag", "NewApi") override fun handleLoadPackage(loadPackageParam: LoadPackageParam) { - // Receiver to handle foreground visibility - if (!mBroadcastRegistered) { - val intentFilter = IntentFilter().apply { - addAction(ACTION_UPDATE_DEPTH_WALLPAPER_FOREGROUND_VISIBILITY) - } - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { - mContext.registerReceiver( - mReceiver, - intentFilter, - Context.RECEIVER_EXPORTED - ) - } else { - mContext.registerReceiver( - mReceiver, - intentFilter - ) + // Listen for album art visibility changes directly (in-process) + if (!mAlbumArtListenerRegistered) { + addAlbumArtVisibilityListener { + updateForegroundVisibility() } - - mBroadcastRegistered = true + mAlbumArtListenerRegistered = true } mPluginReceiver = object : BroadcastReceiver() { @@ -271,6 +251,11 @@ class DepthWallpaperA15(context: Context) : ModPack(context) { return@postDelayed } + // Sony has duplicate keyguard_root_view; the correct one has clipChildren=false + if (OemUtils.isSony && rootView.clipChildren) { + return@postDelayed + } + if (!mLayersCreated) { createLayers() }