From 0c1ef9487775b7cf074b2aa29624da0f4e3c05f5 Mon Sep 17 00:00:00 2001 From: beatricemarch Date: Mon, 26 Dec 2022 12:25:08 +0000 Subject: [PATCH] Update BackupTransportClient#getAvailableRestoreSets() to return List instead of array Test: ActiveRestoreSessionTest, RestoreSessionHostSideTest Bug: 210085179 Fix: 210085179 Change-Id: I889e5579e8ca37ce2de38e88a293ad477ae6e40f --- .../server/backup/internal/BackupHandler.java | 9 +++++++-- .../backup/restore/ActiveRestoreSession.java | 17 +++++++++-------- .../backup/transport/BackupTransportClient.java | 4 ++-- .../restore/ActiveRestoreSessionTest.java | 8 +++++--- 4 files changed, 23 insertions(+), 15 deletions(-) diff --git a/services/backup/java/com/android/server/backup/internal/BackupHandler.java b/services/backup/java/com/android/server/backup/internal/BackupHandler.java index 3ff6ba7e59c06..38c7dd1e230bb 100644 --- a/services/backup/java/com/android/server/backup/internal/BackupHandler.java +++ b/services/backup/java/com/android/server/backup/internal/BackupHandler.java @@ -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 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) { diff --git a/services/backup/java/com/android/server/backup/restore/ActiveRestoreSession.java b/services/backup/java/com/android/server/backup/restore/ActiveRestoreSession.java index d3e4f138f5da3..70d7fac09a4fa 100644 --- a/services/backup/java/com/android/server/backup/restore/ActiveRestoreSession.java +++ b/services/backup/java/com/android/server/backup/restore/ActiveRestoreSession.java @@ -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 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 restoreSets) { mRestoreSets = restoreSets; } diff --git a/services/backup/java/com/android/server/backup/transport/BackupTransportClient.java b/services/backup/java/com/android/server/backup/transport/BackupTransportClient.java index 21005bbf8af9e..daf3415229ea9 100644 --- a/services/backup/java/com/android/server/backup/transport/BackupTransportClient.java +++ b/services/backup/java/com/android/server/backup/transport/BackupTransportClient.java @@ -180,11 +180,11 @@ public class BackupTransportClient { /** * See {@link IBackupTransport#getAvailableRestoreSets()} */ - public RestoreSet[] getAvailableRestoreSets() throws RemoteException { + public List getAvailableRestoreSets() throws RemoteException { AndroidFuture> resultFuture = mTransportFutures.newFuture(); mTransportBinder.getAvailableRestoreSets(resultFuture); List result = getFutureResult(resultFuture); - return result == null ? null : result.toArray(new RestoreSet[] {}); + return result; } /** diff --git a/services/robotests/backup/src/com/android/server/backup/restore/ActiveRestoreSessionTest.java b/services/robotests/backup/src/com/android/server/backup/restore/ActiveRestoreSessionTest.java index e0812d6a77ea7..73ddbe8cec7c0 100644 --- a/services/robotests/backup/src/com/android/server/backup/restore/ActiveRestoreSessionTest.java +++ b/services/robotests/backup/src/com/android/server/backup/restore/ActiveRestoreSessionTest.java @@ -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; }