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

Commit e6163b3d authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Report legacy status from installer"

parents 50c3fa8d ac9155b2
Loading
Loading
Loading
Loading
+12 −6
Original line number Diff line number Diff line
@@ -81,7 +81,7 @@ class EventResultPersister {

    /** Call back when a result is received. Observer is removed when onResult it called. */
    interface EventResultObserver {
        void onResult(int status, @Nullable String message);
        void onResult(int status, int legacyStatus, @Nullable String message);
    }

    /**
@@ -106,13 +106,14 @@ class EventResultPersister {
                } else if ("result".equals(tagName)) {
                    int id = XmlUtils.readIntAttribute(parser, "id", 0);
                    int status = XmlUtils.readIntAttribute(parser, "status", 0);
                    int legacyStatus = XmlUtils.readIntAttribute(parser, "legacyStatus", 0);
                    String statusMessage = XmlUtils.readStringAttribute(parser, "statusMessage");

                    if (mResults.get(id) != null) {
                        throw new Exception("id " + id + " has two results");
                    }

                    mResults.put(id, new EventResult(status, statusMessage));
                    mResults.put(id, new EventResult(status, legacyStatus, statusMessage));
                } else {
                    throw new Exception("unexpected tag");
                }
@@ -143,6 +144,7 @@ class EventResultPersister {

        int id = intent.getIntExtra(EXTRA_ID, 0);
        String statusMessage = intent.getStringExtra(PackageInstaller.EXTRA_STATUS_MESSAGE);
        int legacyStatus = intent.getIntExtra(PackageInstaller.EXTRA_LEGACY_STATUS, 0);

        EventResultObserver observerToCall = null;
        synchronized (mLock) {
@@ -157,9 +159,9 @@ class EventResultPersister {
            }

            if (observerToCall != null) {
                observerToCall.onResult(status, statusMessage);
                observerToCall.onResult(status, legacyStatus, statusMessage);
            } else {
                mResults.put(id, new EventResult(status, statusMessage));
                mResults.put(id, new EventResult(status, legacyStatus, statusMessage));
                writeState();
            }
        }
@@ -205,6 +207,8 @@ class EventResultPersister {
                                        Integer.toString(results.keyAt(i)));
                                serializer.attribute(null, "status",
                                        Integer.toString(results.valueAt(i).status));
                                serializer.attribute(null, "legacyStatus",
                                        Integer.toString(results.valueAt(i).legacyStatus));
                                if (results.valueAt(i).message != null) {
                                    serializer.attribute(null, "statusMessage",
                                            results.valueAt(i).message);
@@ -271,7 +275,7 @@ class EventResultPersister {
            if (resultIndex >= 0) {
                EventResult result = mResults.valueAt(resultIndex);

                observer.onResult(result.status, result.message);
                observer.onResult(result.status, result.legacyStatus, result.message);
                mResults.removeAt(resultIndex);
                stateChanged = true;
            } else {
@@ -303,10 +307,12 @@ class EventResultPersister {
     */
    private class EventResult {
        public final int status;
        public final int legacyStatus;
        @Nullable public final String message;

        private EventResult(int status, @Nullable String message) {
        private EventResult(int status, int legacyStatus, @Nullable String message) {
            this.status = status;
            this.legacyStatus = legacyStatus;
            this.message = message;
        }
    }
+4 −1
Original line number Diff line number Diff line
@@ -76,9 +76,12 @@ public class InstallFailed extends Activity {
                PackageInstaller.STATUS_FAILURE);

        if (getIntent().getBooleanExtra(Intent.EXTRA_RETURN_RESULT, false)) {
            int legacyStatus = getIntent().getIntExtra(PackageInstaller.EXTRA_LEGACY_STATUS,
                    PackageManager.INSTALL_FAILED_INTERNAL_ERROR);

            // Return result if requested
            Intent result = new Intent();
            result.putExtra(Intent.EXTRA_INSTALL_RESULT, statusCode);
            result.putExtra(Intent.EXTRA_INSTALL_RESULT, legacyStatus);
            setResult(Activity.RESULT_FIRST_USER, result);
            finish();
        } else {
+15 −10
Original line number Diff line number Diff line
@@ -89,7 +89,7 @@ public class InstallInstalling extends Activity {
                getPackageManager().installExistingPackage(appInfo.packageName);
                launchSuccess();
            } catch (PackageManager.NameNotFoundException e) {
                launchFailure(PackageInstaller.STATUS_FAILURE_INVALID, null);
                launchFailure(PackageManager.INSTALL_FAILED_INTERNAL_ERROR, null);
            }
        } else {
            final File sourceFile = new File(mPackageURI.getPath());
@@ -140,13 +140,13 @@ public class InstallInstalling extends Activity {
                            .addObserver(this, EventResultPersister.GENERATE_NEW_ID,
                                    this::launchFinishBasedOnResult);
                } catch (EventResultPersister.OutOfIdsException e) {
                    launchFailure(PackageInstaller.STATUS_FAILURE, null);
                    launchFailure(PackageManager.INSTALL_FAILED_INTERNAL_ERROR, null);
                }

                try {
                    mSessionId = getPackageManager().getPackageInstaller().createSession(params);
                } catch (IOException e) {
                    launchFailure(PackageInstaller.STATUS_FAILURE, null);
                    launchFailure(PackageManager.INSTALL_FAILED_INTERNAL_ERROR, null);
                }
            }

@@ -185,13 +185,14 @@ public class InstallInstalling extends Activity {
    /**
     * Launch the "failure" version of the final package installer dialog
     *
     * @param statusCode The status code explaining what went wrong
     * @param legacyStatus  The status as used internally in the package manager.
     * @param statusMessage The status description.
     */
    private void launchFailure(int statusCode, String statusMessage) {
    private void launchFailure(int legacyStatus, String statusMessage) {
        Intent failureIntent = new Intent(getIntent());
        failureIntent.setClass(this, InstallFailed.class);
        failureIntent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
        failureIntent.putExtra(PackageInstaller.EXTRA_STATUS, statusCode);
        failureIntent.putExtra(PackageInstaller.EXTRA_LEGACY_STATUS, legacyStatus);
        failureIntent.putExtra(PackageInstaller.EXTRA_STATUS_MESSAGE, statusMessage);

        startActivity(failureIntent);
@@ -272,13 +273,14 @@ public class InstallInstalling extends Activity {
     * Launch the appropriate finish activity (success or failed) for the installation result.
     *
     * @param statusCode    The installation result.
     * @param legacyStatus  The installation as used internally in the package manager.
     * @param statusMessage The detailed installation result.
     */
    private void launchFinishBasedOnResult(int statusCode, String statusMessage) {
    private void launchFinishBasedOnResult(int statusCode, int legacyStatus, String statusMessage) {
        if (statusCode == PackageInstaller.STATUS_SUCCESS) {
            launchSuccess();
        } else {
            launchFailure(statusCode, statusMessage);
            launchFailure(legacyStatus, statusMessage);
        }
    }

@@ -316,7 +318,7 @@ public class InstallInstalling extends Activity {

    /**
     * Send the package to the package installer and then register a event result observer that
     * will call {@link #launchFinishBasedOnResult(int, String)}
     * will call {@link #launchFinishBasedOnResult(int, int, String)}
     */
    private final class InstallingAsyncTask extends AsyncTask<Void, Void,
            PackageInstaller.Session> {
@@ -395,7 +397,10 @@ public class InstallInstalling extends Activity {
                setFinishOnTouchOutside(false);
            } else {
                getPackageManager().getPackageInstaller().abandonSession(mSessionId);
                launchFailure(PackageInstaller.STATUS_FAILURE, null);

                if (!isCancelled()) {
                    launchFailure(PackageManager.INSTALL_FAILED_INVALID_APK, null);
                }
            }
        }
    }
+1 −2
Original line number Diff line number Diff line
@@ -21,7 +21,6 @@ import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInstaller;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.net.Uri;
@@ -45,7 +44,7 @@ public class InstallSuccess extends Activity {
        if (getIntent().getBooleanExtra(Intent.EXTRA_RETURN_RESULT, false)) {
            // Return result if requested
            Intent result = new Intent();
            result.putExtra(Intent.EXTRA_INSTALL_RESULT, PackageInstaller.STATUS_SUCCESS);
            result.putExtra(Intent.EXTRA_INSTALL_RESULT, PackageManager.INSTALL_SUCCEEDED);
            setResult(Activity.RESULT_OK, result);
            finish();
        } else {