diff options
author | Adnan Begovic <adnan@cyngn.com> | 2015-09-15 14:57:28 -0700 |
---|---|---|
committer | Steve Kondik <steve@cyngn.com> | 2015-10-28 13:30:34 -0700 |
commit | 6615d36cf0fa7daef6a55373996beb65950a2885 (patch) | |
tree | 63e4f01768a69d1d64ae8b9f1475daab7182bef6 /services/tests/servicestests | |
parent | a8ee5c9a1f7524b7434e9dcf6f406a5142cae5a8 (diff) | |
download | frameworks_base-6615d36cf0fa7daef6a55373996beb65950a2885.zip frameworks_base-6615d36cf0fa7daef6a55373996beb65950a2885.tar.gz frameworks_base-6615d36cf0fa7daef6a55373996beb65950a2885.tar.bz2 |
prebundled: Handle prebundled packages per-user.
Also add migration step for reading old file to go towards
per-user system file structure
TICKET: CYNGNOS-1006
Change-Id: I743e8efaa074c9b84291fdc8d3d15763cc39e79d
pm: Create per-mcc prebundled install filter.
If packages are region locked, avoid installing them
for the SKU, otherwise if a package is specified for
a mobile country code, allow it to be installed.
TICKET: CYNGNOS-912
Change-Id: I69c5be62dff771fc7d3117e9edf65d8ea4150f28
pm: Update PackageManagerSettingsTests.
Change-Id: Ib3a23514055935f68f3f3bb4fd2b2d4d495c1132
PackageManager : Extend prebundled logic
Instead of specifying which packages to explicitly install,
Only install packages if :
a) Its in the current mcc's config_region_locked_packages
b) Its not region locked by checking config_restrict_to_region_locked_devices
Change-Id: I74c13763ef367e16e5e79290a569f3a720b85adc
Diffstat (limited to 'services/tests/servicestests')
-rw-r--r-- | services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java | 60 |
1 files changed, 56 insertions, 4 deletions
diff --git a/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java b/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java index ed1db6f..993faa9 100644 --- a/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java +++ b/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java @@ -23,15 +23,27 @@ import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_ENABLED; import android.content.Context; import android.content.pm.PackageParser; +import android.content.res.AssetManager; +import android.content.res.Configuration; +import android.content.res.Resources; +import android.os.SystemProperties; import android.test.AndroidTestCase; +import android.test.mock.MockContext; +import android.text.TextUtils; import android.util.ArrayMap; import android.util.ArraySet; +import android.util.DisplayMetrics; import android.util.Log; import android.util.LongSparseArray; import com.android.internal.os.AtomicFile; import java.lang.reflect.Constructor; + +import org.mockito.Mock; +import org.mockito.Mockito; +import com.android.internal.R; + import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -160,6 +172,12 @@ public class PackageManagerSettingsTests extends AndroidTestCase { folder.delete(); } + @Override + protected void setUp() throws Exception { + super.setUp(); + System.setProperty("dexmaker.dexcache", getContext().getCacheDir().toString()); + } + private void writeOldFiles() { deleteSystemFolder(); writePackagesXml(); @@ -269,7 +287,7 @@ public class PackageManagerSettingsTests extends AndroidTestCase { // Write the package files and make sure they're parsed properly the first time writeOldFiles(); Settings settings = new Settings(getContext().getFilesDir(), new Object()); - assertEquals(true, settings.readLPw(null, null, 0, false)); + assertEquals(true, settings.readLPw(null, null, 0, false, null)); assertNotNull(settings.peekPackageLPr(PACKAGE_NAME_3)); assertNotNull(settings.peekPackageLPr(PACKAGE_NAME_1)); @@ -289,12 +307,12 @@ public class PackageManagerSettingsTests extends AndroidTestCase { writeOldFiles(); createUserManagerServiceRef(); Settings settings = new Settings(getContext().getFilesDir(), new Object()); - assertEquals(true, settings.readLPw(null, null, 0, false)); + assertEquals(true, settings.readLPw(null, null, 0, false, null)); settings.writeLPr(); // Create Settings again to make it read from the new files settings = new Settings(getContext().getFilesDir(), new Object()); - assertEquals(true, settings.readLPw(null, null, 0, false)); + assertEquals(true, settings.readLPw(null, null, 0, false, null)); PackageSetting ps = settings.peekPackageLPr(PACKAGE_NAME_2); assertEquals(COMPONENT_ENABLED_STATE_DISABLED_USER, ps.getEnabled(0)); @@ -305,7 +323,7 @@ public class PackageManagerSettingsTests extends AndroidTestCase { // Write the package files and make sure they're parsed properly the first time writeOldFiles(); Settings settings = new Settings(getContext().getFilesDir(), new Object()); - assertEquals(true, settings.readLPw(null, null, 0, false)); + assertEquals(true, settings.readLPw(null, null, 0, false, null)); // Enable/Disable a package PackageSetting ps = settings.peekPackageLPr(PACKAGE_NAME_1); @@ -335,4 +353,38 @@ public class PackageManagerSettingsTests extends AndroidTestCase { hasEnabled = ps.getEnabledComponents(0) != null && ps.getEnabledComponents(0).size() > 0; assertEquals(false, hasEnabled); } + + // Checks if a package that is locked to a different region is rejected + // from being installed + public void testPrebundledDifferentRegionReject() { + Settings settings = new Settings(getContext(), getContext().getFilesDir()); + String expectedPackageNeededForRegion = "org.cyanogenmod.restricted.package"; + Resources resources = Mockito.mock(Resources.class); + String[] regionRestrictedPackages = new String[] { + expectedPackageNeededForRegion + }; + Mockito.when(resources.getStringArray(R.array.config_restrict_to_region_locked_devices)) + .thenReturn(regionRestrictedPackages); + assertFalse(settings.shouldPrebundledPackageBeInstalled(resources, + expectedPackageNeededForRegion, resources)); + } + + // Checks if a package that is locked to the current region is accepted + // This also covers the test for a package that needs to be installed on a + // non region locked device + public void testPrebundledMatchingRegionAccept() { + Settings settings = new Settings(getContext(), getContext().getFilesDir()); + String expectedPackageNeededForRegion = "org.cyanogenmod.restricted.package"; + Resources resources = Mockito.mock(Resources.class); + String[] regionLockedPackages = new String[] { + expectedPackageNeededForRegion + }; + Mockito.when(resources.getStringArray(R.array.config_region_locked_packages)) + .thenReturn(regionLockedPackages); + + Mockito.when(resources.getStringArray(R.array.config_restrict_to_region_locked_devices)) + .thenReturn(regionLockedPackages); + assertTrue(settings.shouldPrebundledPackageBeInstalled(resources, + expectedPackageNeededForRegion, resources)); + } } |