Update BackupTransportClient#getAvailableRestoreSets() to return List instead of array

Test: ActiveRestoreSessionTest, RestoreSessionHostSideTest
Bug: 210085179
Fix: 210085179
Change-Id: I889e5579e8ca37ce2de38e88a293ad477ae6e40f
This commit is contained in:
beatricemarch
2022-12-26 12:25:08 +00:00
committed by Beatrice Marchegiani
parent 383a053610
commit 0c1ef94877
4 changed files with 23 additions and 15 deletions

View File

@@ -375,7 +375,7 @@ public class BackupHandler extends Handler {
case MSG_RUN_GET_RESTORE_SETS: {
// Like other async operations, this is entered with the wakelock held
RestoreSet[] sets = null;
List<RestoreSet> sets = null;
RestoreGetSetsParams params = (RestoreGetSetsParams) msg.obj;
String callerLogString = "BH/MSG_RUN_GET_RESTORE_SETS";
try {
@@ -394,7 +394,12 @@ public class BackupHandler extends Handler {
} finally {
if (params.observer != null) {
try {
params.observer.restoreSetsAvailable(sets);
if (sets == null) {
params.observer.restoreSetsAvailable(null);
} else {
params.observer.restoreSetsAvailable(
sets.toArray(new RestoreSet[0]));
}
} catch (RemoteException re) {
Slog.e(TAG, "Unable to report listing to observer");
} catch (Exception e) {

View File

@@ -45,6 +45,7 @@ import com.android.server.backup.params.RestoreParams;
import com.android.server.backup.transport.TransportConnection;
import com.android.server.backup.utils.BackupEligibilityRules;
import java.util.List;
import java.util.function.BiFunction;
/**
@@ -60,7 +61,7 @@ public class ActiveRestoreSession extends IRestoreSession.Stub {
private final int mUserId;
private final BackupEligibilityRules mBackupEligibilityRules;
@Nullable private final String mPackageName;
public RestoreSet[] mRestoreSets = null;
public List<RestoreSet> mRestoreSets = null;
boolean mEnded = false;
boolean mTimedOut = false;
@@ -174,10 +175,10 @@ public class ActiveRestoreSession extends IRestoreSession.Stub {
}
synchronized (mBackupManagerService.getQueueLock()) {
for (int i = 0; i < mRestoreSets.length; i++) {
if (token == mRestoreSets[i].token) {
for (int i = 0; i < mRestoreSets.size(); i++) {
if (token == mRestoreSets.get(i).token) {
final long oldId = Binder.clearCallingIdentity();
RestoreSet restoreSet = mRestoreSets[i];
RestoreSet restoreSet = mRestoreSets.get(i);
try {
return sendRestoreToHandlerLocked(
(transportClient, listener) ->
@@ -267,10 +268,10 @@ public class ActiveRestoreSession extends IRestoreSession.Stub {
}
synchronized (mBackupManagerService.getQueueLock()) {
for (int i = 0; i < mRestoreSets.length; i++) {
if (token == mRestoreSets[i].token) {
for (int i = 0; i < mRestoreSets.size(); i++) {
if (token == mRestoreSets.get(i).token) {
final long oldId = Binder.clearCallingIdentity();
RestoreSet restoreSet = mRestoreSets[i];
RestoreSet restoreSet = mRestoreSets.get(i);
try {
return sendRestoreToHandlerLocked(
(transportClient, listener) ->
@@ -390,7 +391,7 @@ public class ActiveRestoreSession extends IRestoreSession.Stub {
}
}
public void setRestoreSets(RestoreSet[] restoreSets) {
public void setRestoreSets(List<RestoreSet> restoreSets) {
mRestoreSets = restoreSets;
}

View File

@@ -180,11 +180,11 @@ public class BackupTransportClient {
/**
* See {@link IBackupTransport#getAvailableRestoreSets()}
*/
public RestoreSet[] getAvailableRestoreSets() throws RemoteException {
public List<RestoreSet> getAvailableRestoreSets() throws RemoteException {
AndroidFuture<List<RestoreSet>> resultFuture = mTransportFutures.newFuture();
mTransportBinder.getAvailableRestoreSets(resultFuture);
List<RestoreSet> result = getFutureResult(resultFuture);
return result == null ? null : result.toArray(new RestoreSet[] {});
return result;
}
/**

View File

@@ -78,6 +78,7 @@ import org.robolectric.shadows.ShadowLooper;
import org.robolectric.shadows.ShadowPackageManager;
import java.util.ArrayDeque;
import java.util.Arrays;
@RunWith(RobolectricTestRunner.class)
@Config(
@@ -196,7 +197,7 @@ public class ActiveRestoreSessionTest {
mShadowApplication.grantPermissions(android.Manifest.permission.BACKUP);
TransportMock transportMock = setUpTransport(mTransport);
when(transportMock.transport.getAvailableRestoreSets())
.thenReturn(new RestoreSet[] {mRestoreSet1, mRestoreSet2});
.thenReturn(Arrays.asList(mRestoreSet1, mRestoreSet2));
IRestoreSession restoreSession = createActiveRestoreSession(PACKAGE_1, mTransport);
int result = restoreSession.getAvailableRestoreSets(mObserver, mMonitor);
@@ -214,7 +215,8 @@ public class ActiveRestoreSessionTest {
public void testGetAvailableRestoreSets_forEmptyRestoreSets() throws Exception {
mShadowApplication.grantPermissions(android.Manifest.permission.BACKUP);
TransportMock transportMock = setUpTransport(mTransport);
when(transportMock.transport.getAvailableRestoreSets()).thenReturn(new RestoreSet[0]);
when(transportMock.transport.getAvailableRestoreSets()).thenReturn(
Arrays.asList(new RestoreSet[0]));
IRestoreSession restoreSession = createActiveRestoreSession(PACKAGE_1, mTransport);
int result = restoreSession.getAvailableRestoreSets(mObserver, mMonitor);
@@ -593,7 +595,7 @@ public class ActiveRestoreSessionTest {
new ActiveRestoreSession(
mBackupManagerService, packageName, transport.transportName,
mBackupEligibilityRules);
restoreSession.setRestoreSets(restoreSets);
restoreSession.setRestoreSets(Arrays.asList(restoreSets));
return restoreSession;
}