Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bd5219f5 authored by Android (Google) Code Review's avatar Android (Google) Code Review
Browse files

Merge change 27106 into eclair

* changes:
  Use reflection to figure out a readable string from install error code.
parents 3ed05574 23b4faf6
Loading
Loading
Loading
Loading
+74 −127
Original line number Original line Diff line number Diff line
@@ -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() {