Loading src/com/android/packageinstaller/EventResultPersister.java +12 −6 Original line number Diff line number Diff line Loading @@ -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); } /** Loading @@ -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"); } Loading Loading @@ -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) { Loading @@ -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(); } } Loading Loading @@ -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); Loading Loading @@ -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 { Loading Loading @@ -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; } } Loading src/com/android/packageinstaller/InstallFailed.java +4 −1 Original line number Diff line number Diff line Loading @@ -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 { Loading src/com/android/packageinstaller/InstallInstalling.java +15 −10 Original line number Diff line number Diff line Loading @@ -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()); Loading Loading @@ -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); } } Loading Loading @@ -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); Loading Loading @@ -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); } } Loading Loading @@ -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> { Loading Loading @@ -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); } } } } Loading src/com/android/packageinstaller/InstallSuccess.java +1 −2 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 { Loading Loading
src/com/android/packageinstaller/EventResultPersister.java +12 −6 Original line number Diff line number Diff line Loading @@ -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); } /** Loading @@ -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"); } Loading Loading @@ -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) { Loading @@ -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(); } } Loading Loading @@ -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); Loading Loading @@ -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 { Loading Loading @@ -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; } } Loading
src/com/android/packageinstaller/InstallFailed.java +4 −1 Original line number Diff line number Diff line Loading @@ -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 { Loading
src/com/android/packageinstaller/InstallInstalling.java +15 −10 Original line number Diff line number Diff line Loading @@ -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()); Loading Loading @@ -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); } } Loading Loading @@ -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); Loading Loading @@ -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); } } Loading Loading @@ -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> { Loading Loading @@ -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); } } } } Loading
src/com/android/packageinstaller/InstallSuccess.java +1 −2 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 { Loading