Include NewRollbacks in result of getAvailableRollbacks.
am: dc4a36105b
Change-Id: I6d45d8a2c408e4d8def25895846d6b7c3bf0de29
This commit is contained in:
@@ -74,7 +74,10 @@ public final class RollbackManager {
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of all currently available rollbacks.
|
||||
* Returns a list of all currently available rollbacks. This includes ones for very recently
|
||||
* installed packages (even if onFinished has not yet been called). As a result, packages that
|
||||
* very recently failed to install may also be included, but those rollbacks will fail with
|
||||
* 'rollback not available'.
|
||||
*
|
||||
* @throws SecurityException if the caller does not have appropriate permissions.
|
||||
*/
|
||||
|
||||
@@ -271,33 +271,9 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub {
|
||||
}, filter, null, getHandler());
|
||||
}
|
||||
|
||||
/**
|
||||
* This method posts a blocking call to the handler thread, so it should not be called from
|
||||
* that same thread.
|
||||
* @throws {@link IllegalStateException} if called from {@link #mHandlerThread}
|
||||
*/
|
||||
@Override
|
||||
public ParceledListSlice getAvailableRollbacks() {
|
||||
enforceManageRollbacks("getAvailableRollbacks");
|
||||
if (Thread.currentThread().equals(mHandlerThread)) {
|
||||
Slog.wtf(TAG, "Calling getAvailableRollbacks from mHandlerThread "
|
||||
+ "causes a deadlock");
|
||||
throw new IllegalStateException("Cannot call RollbackManager#getAvailableRollbacks "
|
||||
+ "from the handler thread!");
|
||||
}
|
||||
|
||||
// Wait for the handler thread to get the list of available rollbacks
|
||||
// to get the most up-to-date results. This is intended to reduce test
|
||||
// flakiness when checking available rollbacks immediately after
|
||||
// installing a package with rollback enabled.
|
||||
CountDownLatch latch = new CountDownLatch(1);
|
||||
getHandler().post(() -> latch.countDown());
|
||||
try {
|
||||
latch.await();
|
||||
} catch (InterruptedException ie) {
|
||||
throw new IllegalStateException("RollbackManagerHandlerThread interrupted");
|
||||
}
|
||||
|
||||
synchronized (mLock) {
|
||||
List<RollbackInfo> rollbacks = new ArrayList<>();
|
||||
for (int i = 0; i < mRollbacks.size(); ++i) {
|
||||
@@ -306,6 +282,15 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub {
|
||||
rollbacks.add(rollback.info);
|
||||
}
|
||||
}
|
||||
|
||||
// Also return new rollbacks for which the PackageRollbackInfo is complete.
|
||||
for (NewRollback newRollback : mNewRollbacks) {
|
||||
if (newRollback.rollback.info.getPackages().size()
|
||||
== newRollback.packageSessionIds.length
|
||||
&& !newRollback.isCancelled) {
|
||||
rollbacks.add(newRollback.rollback.info);
|
||||
}
|
||||
}
|
||||
return new ParceledListSlice<>(rollbacks);
|
||||
}
|
||||
}
|
||||
@@ -562,6 +547,14 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub {
|
||||
}
|
||||
}
|
||||
}
|
||||
for (NewRollback newRollback : mNewRollbacks) {
|
||||
for (PackageRollbackInfo info : newRollback.rollback.info.getPackages()) {
|
||||
if (info.getPackageName().equals(packageName)) {
|
||||
newRollback.isCancelled = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user