From db5100ec6f11592c24fcba7dffcb26b6756e886c Mon Sep 17 00:00:00 2001 From: Patrick Baumann Date: Wed, 7 Aug 2019 17:56:58 -0700 Subject: [PATCH 1/3] Cleans up sharedUser regardless of creation logic Prior to this change, we were not updating the shared user a package setting belongs to if the package setting was not deep copied. In the case that shared users didn't match, we were not deep copying and so were not updating later. There is a more fundamental change to be made here, but we're limiting risk by keeping this change as small as possible. Bug: 138919405 Test: atest AppSecurityTests Test: manual; flash P then flash this build: observe consistent PackageSettings Change-Id: Ib22f9e6a1fb3104bec4eb3e5b1de983e19d49dce (cherry picked from commit cf9a4835c110b3b7c064e1dde97ffb38ef0424eb) --- .../android/server/pm/PackageManagerService.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index d60fa2e5c110c..7469e09942108 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -320,7 +320,6 @@ import com.android.server.pm.permission.PermissionManagerServiceInternal; import com.android.server.pm.permission.PermissionManagerServiceInternal.PermissionCallback; import com.android.server.pm.permission.PermissionsState; import com.android.server.policy.PermissionPolicyInternal; -import com.android.server.policy.PermissionPolicyInternal.OnInitializedCallback; import com.android.server.security.VerityUtils; import com.android.server.storage.DeviceStorageMonitorInternal; import com.android.server.wm.ActivityTaskManagerInternal; @@ -11033,14 +11032,15 @@ public class PackageManagerService extends IPackageManager.Stub final String realPkgName = request.realPkgName; final List changedAbiCodePath = result.changedAbiCodePath; final PackageSetting pkgSetting; + if (request.pkgSetting != null && request.pkgSetting.sharedUser != null + && request.pkgSetting.sharedUser != result.pkgSetting.sharedUser) { + // shared user changed, remove from old shared user + request.pkgSetting.sharedUser.removePackage(request.pkgSetting); + } if (result.existingSettingCopied) { pkgSetting = request.pkgSetting; pkgSetting.updateFrom(result.pkgSetting); pkg.mExtras = pkgSetting; - if (pkgSetting.sharedUser != null - && pkgSetting.sharedUser.removePackage(result.pkgSetting)) { - pkgSetting.sharedUser.addPackage(pkgSetting); - } } else { pkgSetting = result.pkgSetting; if (originalPkgSetting != null) { @@ -11050,6 +11050,9 @@ public class PackageManagerService extends IPackageManager.Stub mTransferedPackages.add(originalPkgSetting.name); } } + if (pkgSetting.sharedUser != null) { + pkgSetting.sharedUser.addPackage(pkgSetting); + } // TODO(toddke): Consider a method specifically for modifying the Package object // post scan; or, moving this stuff out of the Package object since it has nothing // to do with the package on disk. From 0e62a49e4558cc268961dc4b4809168d4df00768 Mon Sep 17 00:00:00 2001 From: Louis Chang Date: Fri, 26 Jul 2019 13:34:22 +0800 Subject: [PATCH 2/3] Avoid using secondary displays as launch params when not support Activities were moved on secondary displays when layouting tasks by LaunchParamsController while the device has no multi-displays support. Bug: 136607870 Test: atest TaskLaunchParamsModifierTests Change-Id: If17f119008cb2fa9ab08090f128c83215f8523a0 (cherry picked from commit 740448f08a263ca6cd8605b4e83048be06610882) (cherry picked from commit a37999be9c44f8d09610c6f569585df4580ebd80) --- .../server/wm/TaskLaunchParamsModifier.java | 4 ++++ .../server/wm/TaskLaunchParamsModifierTests.java | 16 ++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/services/core/java/com/android/server/wm/TaskLaunchParamsModifier.java b/services/core/java/com/android/server/wm/TaskLaunchParamsModifier.java index 14585c531203c..19fbfedfc251b 100644 --- a/services/core/java/com/android/server/wm/TaskLaunchParamsModifier.java +++ b/services/core/java/com/android/server/wm/TaskLaunchParamsModifier.java @@ -292,6 +292,10 @@ class TaskLaunchParamsModifier implements LaunchParamsModifier { private int getPreferredLaunchDisplay(@Nullable TaskRecord task, @Nullable ActivityOptions options, ActivityRecord source, LaunchParams currentParams) { + if (!mSupervisor.mService.mSupportsMultiDisplay) { + return DEFAULT_DISPLAY; + } + int displayId = INVALID_DISPLAY; final int optionLaunchId = options != null ? options.getLaunchDisplayId() : INVALID_DISPLAY; if (optionLaunchId != INVALID_DISPLAY) { diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java b/services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java index f918149e67818..58614c6503635 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/TaskLaunchParamsModifierTests.java @@ -1225,6 +1225,22 @@ public class TaskLaunchParamsModifierTests extends ActivityTestsBase { assertEquals(startingBounds, adjustedBounds); } + @Test + public void testNoMultiDisplaySupports() { + final boolean orgValue = mService.mSupportsMultiDisplay; + final TestActivityDisplay display = createNewActivityDisplay(WINDOWING_MODE_FULLSCREEN); + mCurrent.mPreferredDisplayId = display.mDisplayId; + + try { + mService.mSupportsMultiDisplay = false; + assertEquals(RESULT_CONTINUE, mTarget.onCalculate(/* task */ null, /* layout */ null, + mActivity, /* source */ null, /* options */ null, mCurrent, mResult)); + assertEquals(DEFAULT_DISPLAY, mResult.mPreferredDisplayId); + } finally { + mService.mSupportsMultiDisplay = orgValue; + } + } + private TestActivityDisplay createNewActivityDisplay(int windowingMode) { final TestActivityDisplay display = addNewActivityDisplayAt(ActivityDisplay.POSITION_TOP); display.setWindowingMode(windowingMode); From e9142ca840538573867e36b039b3f156a214f88f Mon Sep 17 00:00:00 2001 From: Andrew Sapperstein Date: Wed, 7 Aug 2019 15:04:35 -0700 Subject: [PATCH 3/3] Add a blacklist for preinstalled carrier apps. Allows an OEM to specify that a preinstalled carrier app, even if TelephonyManager says it should have carrier privileges, does not get granted the default permissions and does not get enabled when a compatible SIM is inserted. Bug: 138150105 Test: verified locally Change-Id: I0afec28f1f18227947c1fe9e6bb5fd0dad3b5dac Merged-In: I0afec28f1f18227947c1fe9e6bb5fd0dad3b5dac (cherry picked from commit e01678180770b8ded7240b5924448b8cdb697e02) --- core/res/res/values/config.xml | 4 ++++ core/res/res/values/symbols.xml | 1 + .../android/internal/telephony/CarrierAppUtils.java | 12 +++++++++--- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index eb7d02bad168e..0391530c48333 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -4143,6 +4143,10 @@ one bar higher than they actually are --> false + + + 3 diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 2fa68a5d87753..afb67f931e733 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -3813,6 +3813,7 @@ + diff --git a/telephony/java/com/android/internal/telephony/CarrierAppUtils.java b/telephony/java/com/android/internal/telephony/CarrierAppUtils.java index a1bea4d417f97..d4ed9234569be 100644 --- a/telephony/java/com/android/internal/telephony/CarrierAppUtils.java +++ b/telephony/java/com/android/internal/telephony/CarrierAppUtils.java @@ -21,6 +21,7 @@ import android.content.ContentResolver; import android.content.pm.ApplicationInfo; import android.content.pm.IPackageManager; import android.content.pm.PackageManager; +import android.content.res.Resources; import android.os.RemoteException; import android.provider.Settings; import android.telephony.TelephonyManager; @@ -28,7 +29,9 @@ import android.util.ArrayMap; import android.util.ArraySet; import android.util.Slog; +import com.android.internal.R; import com.android.internal.annotations.VisibleForTesting; +import com.android.internal.util.ArrayUtils; import com.android.server.SystemConfig; import java.util.ArrayList; @@ -140,9 +143,12 @@ public final class CarrierAppUtils { try { for (ApplicationInfo ai : candidates) { String packageName = ai.packageName; - boolean hasPrivileges = telephonyManager != null && - telephonyManager.checkCarrierPrivilegesForPackageAnyPhone(packageName) == - TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS; + String[] restrictedCarrierApps = Resources.getSystem().getStringArray( + R.array.config_restrictedPreinstalledCarrierApps); + boolean hasPrivileges = telephonyManager != null + && telephonyManager.checkCarrierPrivilegesForPackageAnyPhone(packageName) + == TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS + && !ArrayUtils.contains(restrictedCarrierApps, packageName); // add hiddenUntilInstalled flag for carrier apps and associated apps packageManager.setSystemAppHiddenUntilInstalled(packageName, true);