Merge change 27106 into eclair
* changes: Use reflection to figure out a readable string from install error code.
This commit is contained in:
@@ -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() {
|
||||||
|
|||||||
Reference in New Issue
Block a user