diff --git a/core/java/android/content/pm/VersionedPackage.java b/core/java/android/content/pm/VersionedPackage.java index 3e22eb21d3693..21df7ecef0156 100644 --- a/core/java/android/content/pm/VersionedPackage.java +++ b/core/java/android/content/pm/VersionedPackage.java @@ -95,6 +95,20 @@ public final class VersionedPackage implements Parcelable { return "VersionedPackage[" + mPackageName + "/" + mVersionCode + "]"; } + @Override + public boolean equals(Object o) { + return o instanceof VersionedPackage + && ((VersionedPackage) o).mPackageName.equals(mPackageName) + && ((VersionedPackage) o).mVersionCode == mVersionCode; + } + + @Override + public int hashCode() { + // Roll our own hash function without using Objects#hash which incurs the overhead + // of autoboxing. + return 31 * mPackageName.hashCode() + Long.hashCode(mVersionCode); + } + @Override public int describeContents() { return 0; diff --git a/services/core/java/com/android/server/rollback/RollbackPackageHealthObserver.java b/services/core/java/com/android/server/rollback/RollbackPackageHealthObserver.java index bb095841bbaa5..162a695463185 100644 --- a/services/core/java/com/android/server/rollback/RollbackPackageHealthObserver.java +++ b/services/core/java/com/android/server/rollback/RollbackPackageHealthObserver.java @@ -120,9 +120,7 @@ public final class RollbackPackageHealthObserver implements PackageHealthObserve RollbackInfo rollback = getAvailableRollback(failedPackage); if (rollback == null) { - Slog.w(TAG, "Expected rollback but no valid rollback found for package: [ " - + failedPackage.getPackageName() + "] with versionCode: [" - + failedPackage.getVersionCode() + "]"); + Slog.w(TAG, "Expected rollback but no valid rollback found for " + failedPackage); return false; } rollbackPackage(rollback, failedPackage, rollbackReason); @@ -212,11 +210,7 @@ public final class RollbackPackageHealthObserver implements PackageHealthObserve RollbackManager rollbackManager = mContext.getSystemService(RollbackManager.class); for (RollbackInfo rollback : rollbackManager.getAvailableRollbacks()) { for (PackageRollbackInfo packageRollback : rollback.getPackages()) { - boolean hasFailedPackage = packageRollback.getPackageName().equals( - failedPackage.getPackageName()) - && packageRollback.getVersionRolledBackFrom().getVersionCode() - == failedPackage.getVersionCode(); - if (hasFailedPackage) { + if (packageRollback.getVersionRolledBackFrom().equals(failedPackage)) { return rollback; } } @@ -361,15 +355,6 @@ public final class RollbackPackageHealthObserver implements PackageHealthObserve } } - private VersionedPackage getVersionedPackage(String packageName) { - try { - return new VersionedPackage(packageName, mContext.getPackageManager().getPackageInfo( - packageName, 0 /* flags */).getLongVersionCode()); - } catch (PackageManager.NameNotFoundException e) { - return null; - } - } - /** * Rolls back the session that owns {@code failedPackage} * @@ -432,14 +417,8 @@ public final class RollbackPackageHealthObserver implements PackageHealthObserve List rollbacks = rollbackManager.getAvailableRollbacks(); for (RollbackInfo rollback : rollbacks) { - String samplePackageName = rollback.getPackages().get(0).getPackageName(); - VersionedPackage sampleVersionedPackage = getVersionedPackage(samplePackageName); - if (sampleVersionedPackage == null) { - Slog.e(TAG, "Failed to rollback " + samplePackageName); - continue; - } - rollbackPackage(rollback, sampleVersionedPackage, - PackageWatchdog.FAILURE_REASON_NATIVE_CRASH); + VersionedPackage sample = rollback.getPackages().get(0).getVersionRolledBackFrom(); + rollbackPackage(rollback, sample, PackageWatchdog.FAILURE_REASON_NATIVE_CRASH); } }