diff options
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/ScreenDecorations.java | 15 | ||||
-rw-r--r-- | services/core/java/com/android/server/pm/InstallPackageHelper.java | 30 |
2 files changed, 39 insertions, 6 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java b/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java index 4dc227c91177..d3196f6c03e1 100644 --- a/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java +++ b/packages/SystemUI/src/com/android/systemui/ScreenDecorations.java @@ -566,12 +566,8 @@ public class ScreenDecorations implements CoreStartable, Tunable , Dumpable { List<DecorProvider> decorProviders = getProviders(mHwcScreenDecorationSupport != null); removeRedundantOverlayViews(decorProviders); - if (mHwcScreenDecorationSupport != null) { - createHwcOverlay(); - } else { - removeHwcOverlay(); - } - + // Overlays are added in 2 steps: first the standard overlays. Then, if applicable, the + // HWC overlays. This ensures that the HWC overlays are always on top boolean[] hasCreatedOverlay = new boolean[BOUNDS_POSITION_LENGTH]; final boolean shouldOptimizeVisibility = shouldOptimizeVisibility(); Integer bound; @@ -588,6 +584,13 @@ public class ScreenDecorations implements CoreStartable, Tunable , Dumpable { } } + // Adding the HWC overlays second so they are on top by default + if (mHwcScreenDecorationSupport != null) { + createHwcOverlay(); + } else { + removeHwcOverlay(); + } + if (shouldOptimizeVisibility) { mDotViewController.setShowingListener(mPrivacyDotShowingListener); } else { diff --git a/services/core/java/com/android/server/pm/InstallPackageHelper.java b/services/core/java/com/android/server/pm/InstallPackageHelper.java index f72e8ab353bc..7312b4282d74 100644 --- a/services/core/java/com/android/server/pm/InstallPackageHelper.java +++ b/services/core/java/com/android/server/pm/InstallPackageHelper.java @@ -248,6 +248,15 @@ final class InstallPackageHelper { */ final private HashMap<String, String> mPackagesToBeDisabled = new HashMap<>(); + /** + * Tracks packages that need to be disabled for QSPA enabled taregts. + * List of packages path on the file system. + */ + final private List<String> mPackagesPathToBeDisabledForQSPA = new ArrayList<String>(); + final private boolean mQspaEnabled = SystemProperties.getBoolean( + "ro.vendor.config.qspa.apps", false); + + // TODO(b/198166813): remove PMS dependency InstallPackageHelper(PackageManagerService pm, AppDataHelper appDataHelper) { mPm = pm; @@ -265,6 +274,18 @@ final class InstallPackageHelper { mViewCompiler = pm.mInjector.getViewCompiler(); mSharedLibraries = pm.mInjector.getSharedLibrariesImpl(); mUpdateOwnershipHelper = pm.mInjector.getUpdateOwnershipHelper(); + + if (mQspaEnabled) { + mPackagesPathToBeDisabledForQSPA.add("/system_ext/priv-app/SystemUI"); + mPackagesPathToBeDisabledForQSPA.add("/system_ext/priv-app/Launcher3QuickStepGo"); + mPackagesPathToBeDisabledForQSPA.add("/system_ext/priv-app/Launcher3Go"); + mPackagesPathToBeDisabledForQSPA.add("/system/app/PrintSpooler"); + mPackagesPathToBeDisabledForQSPA.add("/system/priv-app/StatementService"); + mPackagesPathToBeDisabledForQSPA.add("/product/app/Calendar"); + } else { + mPackagesPathToBeDisabledForQSPA.add("/system_ext/app/HeadlessLauncher"); + } + } InstallPackageHelper(PackageManagerService pm) { @@ -3767,6 +3788,15 @@ final class InstallPackageHelper { cacher.cleanCachedResult(file); } + + if (mPackagesPathToBeDisabledForQSPA != null && + mPackagesPathToBeDisabledForQSPA.contains(file.toString())) { + // Ignore entries contained in {@link #mPackagesPathToBeDisabledForQSPA} + Slog.d(TAG, "QSPA is " + mQspaEnabled + " ignoring package for install : " + file); + continue; + } + + if (mPackagesToBeDisabled.values() != null && (mPackagesToBeDisabled.values().contains(file.toString()) || mPackagesToBeDisabled.values().stream().anyMatch(file.toString()::contains))) { |