summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xcore/tests/coretests/src/android/content/pm/PackageManagerTests.java203
-rw-r--r--packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java3
-rw-r--r--services/java/com/android/server/PackageManagerService.java1
3 files changed, 99 insertions, 108 deletions
diff --git a/core/tests/coretests/src/android/content/pm/PackageManagerTests.java b/core/tests/coretests/src/android/content/pm/PackageManagerTests.java
index 7fa64caad133..7ced94fa304d 100755
--- a/core/tests/coretests/src/android/content/pm/PackageManagerTests.java
+++ b/core/tests/coretests/src/android/content/pm/PackageManagerTests.java
@@ -165,12 +165,18 @@ public class PackageManagerTests extends AndroidTestCase {
}
}
- PackageManager getPm() {
+ private PackageManager getPm() {
return mContext.getPackageManager();
}
+ private IPackageManager getIPm() {
+ IPackageManager ipm = IPackageManager.Stub.asInterface(
+ ServiceManager.getService("package"));
+ return ipm;
+ }
+
public boolean invokeInstallPackage(Uri packageURI, int flags,
- final String pkgName, GenericReceiver receiver) throws Exception {
+ GenericReceiver receiver) throws Exception {
PackageInstallObserver observer = new PackageInstallObserver();
final boolean received = false;
mContext.registerReceiver(receiver, receiver.filter);
@@ -209,8 +215,7 @@ public class PackageManagerTests extends AndroidTestCase {
}
}
- public boolean invokeInstallPackageFail(Uri packageURI, int flags,
- final String pkgName, int result) throws Exception {
+ public void invokeInstallPackageFail(Uri packageURI, int flags, int result) throws Exception {
PackageInstallObserver observer = new PackageInstallObserver();
try {
// Wait on observer
@@ -224,7 +229,7 @@ public class PackageManagerTests extends AndroidTestCase {
if(!observer.isDone()) {
throw new Exception("Timed out waiting for packageInstalled callback");
}
- return (observer.returnCode == result);
+ assertEquals(observer.returnCode, result);
}
} finally {
}
@@ -284,17 +289,6 @@ public class PackageManagerTests extends AndroidTestCase {
private static final int INSTALL_LOC_INT = 1;
private static final int INSTALL_LOC_SD = 2;
private static final int INSTALL_LOC_ERR = -1;
- private int checkDefaultPolicy(long pkgLen) {
- // Check for free memory internally
- if (checkInt(pkgLen)) {
- return INSTALL_LOC_INT;
- }
- // Check for free memory externally
- if (checkSd(pkgLen)) {
- return INSTALL_LOC_SD;
- }
- return INSTALL_LOC_ERR;
- }
private int getInstallLoc(int flags, int expInstallLocation, long pkgLen) {
// Flags explicitly over ride everything else.
if ((flags & PackageManager.INSTALL_FORWARD_LOCK) != 0 ) {
@@ -306,7 +300,6 @@ public class PackageManagerTests extends AndroidTestCase {
}
// Manifest option takes precedence next
if (expInstallLocation == PackageInfo.INSTALL_LOCATION_PREFER_EXTERNAL) {
- // TODO fitsonSd check
if (checkSd(pkgLen)) {
return INSTALL_LOC_SD;
}
@@ -322,36 +315,36 @@ public class PackageManagerTests extends AndroidTestCase {
return INSTALL_LOC_ERR;
}
if (expInstallLocation == PackageInfo.INSTALL_LOCATION_AUTO) {
- return checkDefaultPolicy(pkgLen);
+ // Check for free memory internally
+ if (checkInt(pkgLen)) {
+ return INSTALL_LOC_INT;
+ }
+ // Check for free memory externally
+ if (checkSd(pkgLen)) {
+ return INSTALL_LOC_SD;
+ }
+ return INSTALL_LOC_ERR;
}
// Check for settings preference.
boolean checkSd = false;
- int setLoc = 0;
- try {
- setLoc = Settings.System.getInt(mContext.getContentResolver(), Settings.Secure.SET_INSTALL_LOCATION);
- } catch (SettingNotFoundException e) {
- failStr(e);
- }
- if (setLoc == 1) {
- int userPref = APP_INSTALL_AUTO;
- try {
- userPref = Settings.System.getInt(mContext.getContentResolver(), Settings.Secure.DEFAULT_INSTALL_LOCATION);
- } catch (SettingNotFoundException e) {
- failStr(e);
+ int userPref = getDefaultInstallLoc();
+ if (userPref == APP_INSTALL_DEVICE) {
+ if (checkInt(pkgLen)) {
+ return INSTALL_LOC_INT;
}
- if (userPref == APP_INSTALL_DEVICE) {
- if (checkInt(pkgLen)) {
- return INSTALL_LOC_INT;
- }
- return INSTALL_LOC_ERR;
- } else if (userPref == APP_INSTALL_SDCARD) {
- if (checkSd(pkgLen)) {
- return INSTALL_LOC_SD;
- }
- return INSTALL_LOC_ERR;
+ return INSTALL_LOC_ERR;
+ } else if (userPref == APP_INSTALL_SDCARD) {
+ if (checkSd(pkgLen)) {
+ return INSTALL_LOC_SD;
}
+ return INSTALL_LOC_ERR;
+ }
+ // Default system policy for apps with no manifest option specified.
+ // Check for free memory internally
+ if (checkInt(pkgLen)) {
+ return INSTALL_LOC_INT;
}
- return checkDefaultPolicy(pkgLen);
+ return INSTALL_LOC_ERR;
}
private void assertInstall(PackageParser.Package pkg, int flags, int expInstallLocation) {
@@ -402,14 +395,20 @@ public class PackageManagerTests extends AndroidTestCase {
}
class InstallParams {
- String outFileName;
Uri packageURI;
PackageParser.Package pkg;
- InstallParams(PackageParser.Package pkg, String outFileName, Uri packageURI) {
- this.outFileName = outFileName;
- this.packageURI = packageURI;
+ InstallParams(String outFileName, int rawResId) {
+ this.pkg = getParsedPackage(outFileName, rawResId);
+ this.packageURI = Uri.fromFile(new File(pkg.mScanPath));
+ }
+ InstallParams(PackageParser.Package pkg) {
+ this.packageURI = Uri.fromFile(new File(pkg.mScanPath));
this.pkg = pkg;
}
+ long getApkSize() {
+ File file = new File(pkg.mScanPath);
+ return file.length();
+ }
}
private InstallParams sampleInstallFromRawResource(int flags, boolean cleanUp) {
@@ -520,45 +519,36 @@ public class PackageManagerTests extends AndroidTestCase {
* copies it into own data directory and invokes
* PackageManager api to install it.
*/
- private InstallParams installFromRawResource(String outFileName,
- int rawResId, int flags, boolean cleanUp, boolean fail, int result,
+ private void installFromRawResource(InstallParams ip,
+ int flags, boolean cleanUp, boolean fail, int result,
int expInstallLocation) {
PackageManager pm = mContext.getPackageManager();
- File filesDir = mContext.getFilesDir();
- File outFile = new File(filesDir, outFileName);
- Uri packageURI = getInstallablePackage(rawResId, outFile);
- PackageParser.Package pkg = parsePackage(packageURI);
- assertNotNull(pkg);
+ PackageParser.Package pkg = ip.pkg;
+ Uri packageURI = ip.packageURI;
if ((flags & PackageManager.INSTALL_REPLACE_EXISTING) == 0) {
// Make sure the package doesn't exist
try {
ApplicationInfo appInfo = pm.getApplicationInfo(pkg.packageName,
PackageManager.GET_UNINSTALLED_PACKAGES);
GenericReceiver receiver = new DeleteReceiver(pkg.packageName);
- invokeDeletePackage(packageURI, 0,
- pkg.packageName, receiver);
+ invokeDeletePackage(pkg.packageName, 0, receiver);
} catch (NameNotFoundException e1) {
} catch (Exception e) {
failStr(e);
}
}
- InstallParams ip = null;
try {
if (fail) {
- assertTrue(invokeInstallPackageFail(packageURI, flags,
- pkg.packageName, result));
+ invokeInstallPackageFail(packageURI, flags, result);
if ((flags & PackageManager.INSTALL_REPLACE_EXISTING) == 0) {
assertNotInstalled(pkg.packageName);
}
} else {
InstallReceiver receiver = new InstallReceiver(pkg.packageName);
- assertTrue(invokeInstallPackage(packageURI, flags,
- pkg.packageName, receiver));
+ assertTrue(invokeInstallPackage(packageURI, flags, receiver));
// Verify installed information
assertInstall(pkg, flags, expInstallLocation);
- ip = new InstallParams(pkg, outFileName, packageURI);
}
- return ip;
} catch (Exception e) {
failStr("Failed with exception : " + e);
} finally {
@@ -566,6 +556,19 @@ public class PackageManagerTests extends AndroidTestCase {
cleanUpInstall(ip);
}
}
+ }
+
+ /*
+ * Utility function that reads a apk bundled as a raw resource
+ * copies it into own data directory and invokes
+ * PackageManager api to install it.
+ */
+ private InstallParams installFromRawResource(String outFileName,
+ int rawResId, int flags, boolean cleanUp, boolean fail, int result,
+ int expInstallLocation) {
+ PackageManager pm = mContext.getPackageManager();
+ InstallParams ip = new InstallParams(outFileName, rawResId);
+ installFromRawResource(ip, flags, cleanUp, fail, result, expInstallLocation);
return ip;
}
@@ -654,8 +657,7 @@ public class PackageManagerTests extends AndroidTestCase {
}
try {
try {
- assertEquals(invokeInstallPackage(ip.packageURI, flags,
- ip.pkg.packageName, receiver), replace);
+ assertEquals(invokeInstallPackage(ip.packageURI, flags, receiver), replace);
if (replace) {
assertInstall(ip.pkg, flags, ip.pkg.installLocation);
}
@@ -736,8 +738,8 @@ public class PackageManagerTests extends AndroidTestCase {
}
}
- public boolean invokeDeletePackage(Uri packageURI, int flags,
- final String pkgName, GenericReceiver receiver) throws Exception {
+ public boolean invokeDeletePackage(final String pkgName, int flags,
+ GenericReceiver receiver) throws Exception {
DeleteObserver observer = new DeleteObserver();
final boolean received = false;
mContext.registerReceiver(receiver, receiver.filter);
@@ -777,8 +779,7 @@ public class PackageManagerTests extends AndroidTestCase {
GenericReceiver receiver = new DeleteReceiver(ip.pkg.packageName);
DeleteObserver observer = new DeleteObserver();
try {
- assertTrue(invokeDeletePackage(ip.packageURI, dFlags,
- ip.pkg.packageName, receiver));
+ assertTrue(invokeDeletePackage(ip.pkg.packageName, dFlags, receiver));
ApplicationInfo info = null;
Log.i(TAG, "okay4");
try {
@@ -907,7 +908,7 @@ public class PackageManagerTests extends AndroidTestCase {
boolean getMediaState() {
try {
- String mPath = Environment.getExternalStorageDirectory().toString();
+ String mPath = Environment.getExternalStorageDirectory().getPath();
String state = getMs().getVolumeState(mPath);
return Environment.MEDIA_MOUNTED.equals(state);
} catch (RemoteException e) {
@@ -928,13 +929,17 @@ public class PackageManagerTests extends AndroidTestCase {
}
}
-
-
private boolean unmountMedia() {
- if (!getMediaState()) {
- return true;
+ String path = Environment.getExternalStorageDirectory().getPath();
+ try {
+ String state = getMs().getVolumeState(path);
+ if (Environment.MEDIA_UNMOUNTED.equals(state)) {
+ return true;
+ }
+ } catch (RemoteException e) {
+ failStr(e);
}
- String path = Environment.getExternalStorageDirectory().toString();
+
StorageListener observer = new StorageListener();
StorageManager sm = (StorageManager) mContext.getSystemService(Context.STORAGE_SERVICE);
sm.registerListener(observer);
@@ -948,11 +953,12 @@ public class PackageManagerTests extends AndroidTestCase {
waitTime += WAIT_TIME_INCR;
}
if(!observer.isDone()) {
- throw new Exception("Timed out waiting for packageInstalled callback");
+ throw new Exception("Timed out waiting for unmount media notification");
}
return true;
}
} catch (Exception e) {
+ Log.e(TAG, "Exception : " + e);
return false;
} finally {
sm.unregisterListener(observer);
@@ -1029,7 +1035,7 @@ public class PackageManagerTests extends AndroidTestCase {
Runtime.getRuntime().gc();
Log.i(TAG, "Deleting package : " + ip.pkg.packageName);
getPm().deletePackage(ip.pkg.packageName, null, 0);
- File outFile = new File(ip.outFileName);
+ File outFile = new File(ip.pkg.mScanPath);
if (outFile != null && outFile.exists()) {
outFile.delete();
}
@@ -1095,8 +1101,7 @@ public class PackageManagerTests extends AndroidTestCase {
GenericReceiver receiver = new ReplaceReceiver(ip.pkg.packageName);
int replaceFlags = rFlags | PackageManager.INSTALL_REPLACE_EXISTING;
try {
- assertEquals(invokeInstallPackage(ip.packageURI, replaceFlags,
- ip.pkg.packageName, receiver), true);
+ assertEquals(invokeInstallPackage(ip.packageURI, replaceFlags, receiver), true);
assertInstall(ip.pkg, rFlags, ip.pkg.installLocation);
} catch (Exception e) {
failStr("Failed with exception : " + e);
@@ -1117,8 +1122,7 @@ public class PackageManagerTests extends AndroidTestCase {
GenericReceiver receiver = new ReplaceReceiver(ip.pkg.packageName);
int replaceFlags = rFlags | PackageManager.INSTALL_REPLACE_EXISTING;
try {
- assertEquals(invokeInstallPackage(ip.packageURI, replaceFlags,
- ip.pkg.packageName, receiver), true);
+ assertEquals(invokeInstallPackage(ip.packageURI, replaceFlags, receiver), true);
assertInstall(ip.pkg, iFlags, ip.pkg.installLocation);
} catch (Exception e) {
failStr("Failed with exception : " + e);
@@ -1298,11 +1302,9 @@ public class PackageManagerTests extends AndroidTestCase {
return true;
}
- private int getInstallLoc() {
- boolean userSetting = false;
+ private int getDefaultInstallLoc() {
int origDefaultLoc = PackageInfo.INSTALL_LOCATION_AUTO;
try {
- userSetting = Settings.System.getInt(mContext.getContentResolver(), Settings.Secure.SET_INSTALL_LOCATION) != 0;
origDefaultLoc = Settings.System.getInt(mContext.getContentResolver(), Settings.Secure.DEFAULT_INSTALL_LOCATION);
} catch (SettingNotFoundException e1) {
}
@@ -1326,7 +1328,7 @@ public class PackageManagerTests extends AndroidTestCase {
private void moveFromRawResource(String outFileName,
int rawResId, int installFlags, int moveFlags, boolean cleanUp,
boolean fail, int result) {
- int origDefaultLoc = getInstallLoc();
+ int origDefaultLoc = getDefaultInstallLoc();
InstallParams ip = null;
try {
setInstallLoc(PackageHelper.APP_INSTALL_AUTO);
@@ -1416,7 +1418,7 @@ public class PackageManagerTests extends AndroidTestCase {
final int result = PackageManager.MOVE_FAILED_DOESNT_EXIST;
int rawResId = R.raw.install;
- int origDefaultLoc = getInstallLoc();
+ int origDefaultLoc = getDefaultInstallLoc();
InstallParams ip = null;
try {
PackageManager pm = getPm();
@@ -1447,10 +1449,10 @@ public class PackageManagerTests extends AndroidTestCase {
// Unmount sdcard
assertTrue(unmountMedia());
// Try to install and make sure an error code is returned.
- assertNull(installFromRawResource("install.apk", R.raw.install,
+ installFromRawResource("install.apk", R.raw.install,
PackageManager.INSTALL_EXTERNAL, false,
true, PackageManager.INSTALL_FAILED_MEDIA_UNAVAILABLE,
- PackageInfo.INSTALL_LOCATION_AUTO));
+ PackageInfo.INSTALL_LOCATION_AUTO);
} finally {
// Restore original media state
if (origState) {
@@ -1470,11 +1472,9 @@ public class PackageManagerTests extends AndroidTestCase {
try {
// Unmount sdcard
assertTrue(unmountMedia());
- // Try to install and make sure an error code is returned.
- assertNotNull(installFromRawResource("install.apk", R.raw.install_loc_sdcard,
- 0, false,
- false, -1,
- PackageInfo.INSTALL_LOCATION_INTERNAL_ONLY));
+ InstallParams ip = new InstallParams("install.apk", R.raw.install_loc_sdcard);
+ installFromRawResource(ip, 0, true, false, -1,
+ PackageInfo.INSTALL_LOCATION_INTERNAL_ONLY);
} finally {
// Restore original media state
if (origState) {
@@ -1912,7 +1912,7 @@ public class PackageManagerTests extends AndroidTestCase {
false,
false, -1,
PackageInfo.INSTALL_LOCATION_UNSPECIFIED);
- int origSetting = getInstallLoc();
+ int origSetting = getDefaultInstallLoc();
try {
// Set user setting
setInstallLoc(userSetting);
@@ -1976,7 +1976,7 @@ public class PackageManagerTests extends AndroidTestCase {
}
private void setUserX(boolean enable, int userSetting, int iloc) {
boolean origUserSetting = getUserSettingSetInstallLocation();
- int origSetting = getInstallLoc();
+ int origSetting = getDefaultInstallLoc();
try {
setUserSettingSetInstallLocation(enable);
// Set user setting
@@ -2101,8 +2101,7 @@ public class PackageManagerTests extends AndroidTestCase {
GenericReceiver receiver = new DeleteReceiver(ip.pkg.packageName);
try {
- invokeDeletePackage(ip.packageURI, PackageManager.DONT_DELETE_DATA,
- ip.pkg.packageName, receiver);
+ invokeDeletePackage(ip.pkg.packageName, PackageManager.DONT_DELETE_DATA, receiver);
} catch (Exception e) {
failStr(e);
}
@@ -2121,8 +2120,7 @@ public class PackageManagerTests extends AndroidTestCase {
// **: Upon deleting package, are all permissions removed?
try {
- invokeDeletePackage(ip.packageURI, 0,
- ip.pkg.packageName, receiver);
+ invokeDeletePackage(ip.pkg.packageName, 0, receiver);
ip = null;
} catch (Exception e) {
failStr(e);
@@ -2134,8 +2132,7 @@ public class PackageManagerTests extends AndroidTestCase {
GenericReceiver receiver2 = new DeleteReceiver(ip2.pkg.packageName);
try {
- invokeDeletePackage(ip2.packageURI, 0,
- ip2.pkg.packageName, receiver);
+ invokeDeletePackage(ip2.pkg.packageName, 0, receiver);
ip2 = null;
} catch (Exception e) {
failStr(e);
@@ -2170,8 +2167,7 @@ public class PackageManagerTests extends AndroidTestCase {
// **: Upon deleting package, are all permissions removed?
try {
- invokeDeletePackage(ip.packageURI, 0,
- ip.pkg.packageName, receiver);
+ invokeDeletePackage(ip.pkg.packageName, 0, receiver);
ip = null;
} catch (Exception e) {
failStr(e);
@@ -2182,8 +2178,7 @@ public class PackageManagerTests extends AndroidTestCase {
// **: Delete package using permissions; nothing to check here.
try {
- invokeDeletePackage(ip2.packageURI, 0,
- ip2.pkg.packageName, receiver);
+ invokeDeletePackage(ip2.pkg.packageName, 0, receiver);
ip2 = null;
} catch (Exception e) {
failStr(e);
@@ -2252,7 +2247,7 @@ public class PackageManagerTests extends AndroidTestCase {
unmountMedia();
// Delete the app on sdcard to leave a stale container on sdcard.
GenericReceiver receiver = new DeleteReceiver(pkg.packageName);
- assertTrue(invokeDeletePackage(packageURI, 0, pkg.packageName, receiver));
+ assertTrue(invokeDeletePackage(pkg.packageName, 0, receiver));
mountMedia();
// Reinstall the app and make sure it gets installed.
installFromRawResource(outFileName, rawResId,
diff --git a/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java b/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java
index 57f9ce7ccabd..79c8f9ad2ff6 100644
--- a/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java
+++ b/packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java
@@ -346,16 +346,13 @@ public class DefaultContainerService extends IntentService {
PackageHelper.APP_INSTALL_AUTO);
if (installPreference == PackageHelper.APP_INSTALL_INTERNAL) {
checkInt = true;
- checkBoth = true;
break check_inner;
} else if (installPreference == PackageHelper.APP_INSTALL_EXTERNAL) {
checkExt = true;
- checkBoth = true;
break check_inner;
}
// Fall back to default policy if nothing else is specified.
checkInt = true;
- checkBoth = true;
}
// Package size = code size + cache size + data size
diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java
index 82ea6e1ee8be..b7ab9fe60703 100644
--- a/services/java/com/android/server/PackageManagerService.java
+++ b/services/java/com/android/server/PackageManagerService.java
@@ -6089,7 +6089,6 @@ class PackageManagerService extends IPackageManager.Stub {
this.args = args;
this.deleteOld = deleteOld;
}
- @Override
public void performReceive(Intent intent, int resultCode, String data, Bundle extras,
boolean ordered, boolean sticky) throws RemoteException {
// Force a gc to clear up things