Merge change 27106 into eclair

* changes:
  Use reflection to figure out a readable string from install error code.
This commit is contained in:
Android (Google) Code Review
2009-09-25 17:15:10 -04:00

View File

@@ -34,6 +34,8 @@ import android.os.RemoteException;
import android.os.ServiceManager; import android.os.ServiceManager;
import java.io.File; import java.io.File;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
@@ -498,92 +500,37 @@ public final class Pm {
} }
} }
/**
* Converts a failure code into a string by using reflection to find a matching constant
* in PackageManager.
*/
private String installFailureToString(int result) { private String installFailureToString(int result) {
String s; Field[] fields = PackageManager.class.getFields();
switch (result) { for (Field f: fields) {
case PackageManager.INSTALL_FAILED_ALREADY_EXISTS: if (f.getType() == int.class) {
s = "INSTALL_FAILED_ALREADY_EXISTS"; int modifiers = f.getModifiers();
break; // only look at public final static fields.
case PackageManager.INSTALL_FAILED_INVALID_APK: if (((modifiers & Modifier.FINAL) != 0) &&
s = "INSTALL_FAILED_INVALID_APK"; ((modifiers & Modifier.PUBLIC) != 0) &&
break; ((modifiers & Modifier.STATIC) != 0)) {
case PackageManager.INSTALL_FAILED_INVALID_URI: String fieldName = f.getName();
s = "INSTALL_FAILED_INVALID_URI"; if (fieldName.startsWith("INSTALL_FAILED_") ||
break; fieldName.startsWith("INSTALL_PARSE_FAILED_")) {
case PackageManager.INSTALL_FAILED_INSUFFICIENT_STORAGE: // get the int value and compare it to result.
s = "INSTALL_FAILED_INSUFFICIENT_STORAGE"; try {
break; if (result == f.getInt(null)) {
case PackageManager.INSTALL_FAILED_DUPLICATE_PACKAGE: return fieldName;
s = "INSTALL_FAILED_DUPLICATE_PACKAGE"; }
break; } catch (IllegalAccessException e) {
case PackageManager.INSTALL_FAILED_NO_SHARED_USER: // this shouldn't happen since we only look for public static fields.
s = "INSTALL_FAILED_NO_SHARED_USER"; }
break; }
case PackageManager.INSTALL_FAILED_UPDATE_INCOMPATIBLE: }
s = "INSTALL_FAILED_UPDATE_INCOMPATIBLE"; }
break;
case PackageManager.INSTALL_FAILED_SHARED_USER_INCOMPATIBLE:
s = "INSTALL_FAILED_SHARED_USER_INCOMPATIBLE";
break;
case PackageManager.INSTALL_FAILED_MISSING_SHARED_LIBRARY:
s = "INSTALL_FAILED_MISSING_SHARED_LIBRARY";
break;
case PackageManager.INSTALL_FAILED_DEXOPT:
s = "INSTALL_FAILED_DEXOPT";
break;
case PackageManager.INSTALL_FAILED_OLDER_SDK:
s = "INSTALL_FAILED_OLDER_SDK";
break;
case PackageManager.INSTALL_FAILED_CONFLICTING_PROVIDER:
s = "INSTALL_FAILED_CONFLICTING_PROVIDER";
break;
case PackageManager.INSTALL_FAILED_NEWER_SDK:
s = "INSTALL_FAILED_NEWER_SDK";
break;
case PackageManager.INSTALL_FAILED_TEST_ONLY:
s = "INSTALL_FAILED_TEST_ONLY";
break;
case PackageManager.INSTALL_FAILED_CPU_ABI_INCOMPATIBLE:
s = "INSTALL_FAILED_CPU_ABI_INCOMPATIBLE";
break;
case PackageManager.INSTALL_FAILED_MISSING_FEATURE:
s = "INSTALL_FAILED_MISSING_FEATURE";
break;
case PackageManager.INSTALL_PARSE_FAILED_NOT_APK:
s = "INSTALL_PARSE_FAILED_NOT_APK";
break;
case PackageManager.INSTALL_PARSE_FAILED_BAD_MANIFEST:
s = "INSTALL_PARSE_FAILED_BAD_MANIFEST";
break;
case PackageManager.INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION:
s = "INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION";
break;
case PackageManager.INSTALL_PARSE_FAILED_NO_CERTIFICATES:
s = "INSTALL_PARSE_FAILED_NO_CERTIFICATES";
break;
case PackageManager.INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES:
s = "INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES";
break;
case PackageManager.INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING:
s = "INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING";
break;
case PackageManager.INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME:
s = "INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME";
break;
case PackageManager.INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID:
s = "INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID";
break;
case PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED:
s = "INSTALL_PARSE_FAILED_MANIFEST_MALFORMED";
break;
case PackageManager.INSTALL_PARSE_FAILED_MANIFEST_EMPTY:
s = "INSTALL_PARSE_FAILED_MANIFEST_EMPTY";
break;
default:
s = Integer.toString(result);
break;
} }
return s;
// couldn't find a matching constant? return the value
return Integer.toString(result);
} }
private void runInstall() { private void runInstall() {