isBackupServiceActive should not depend on whether the user is started

Bug: 129763613

Test: atest com.android.server.backup.TrampolineTest
Change-Id: Ia05451a4d45a14bc30353e268cb6616ceb49947e
diff --git a/services/backup/java/com/android/server/backup/Trampoline.java b/services/backup/java/com/android/server/backup/Trampoline.java
index 8f0c5d8..bb0aba0 100644
--- a/services/backup/java/com/android/server/backup/Trampoline.java
+++ b/services/backup/java/com/android/server/backup/Trampoline.java
@@ -395,7 +395,7 @@
     @Override
     public boolean isBackupServiceActive(int userId) {
         synchronized (mStateLock) {
-            return isUserReadyForBackup(userId);
+            return mService != null && isBackupActivatedForUser(userId);
         }
     }
 
diff --git a/services/tests/servicestests/src/com/android/server/backup/TrampolineTest.java b/services/tests/servicestests/src/com/android/server/backup/TrampolineTest.java
index dd79aad..29cbf98 100644
--- a/services/tests/servicestests/src/com/android/server/backup/TrampolineTest.java
+++ b/services/tests/servicestests/src/com/android/server/backup/TrampolineTest.java
@@ -95,6 +95,7 @@
             new ComponentName("package2", "class2")
     };
     private static final int NON_USER_SYSTEM = UserHandle.USER_SYSTEM + 1;
+    private static final int UNSTARTED_NON_USER_SYSTEM = UserHandle.USER_SYSTEM + 2;
 
     @UserIdInt
     private int mUserId;
@@ -126,8 +127,6 @@
     private TrampolineTestable mTrampoline;
     private File mTestDir;
     private File mSuppressFile;
-    private File mActivatedFile;
-    private File mRememberActivatedFile;
 
     @Before
     public void setUp() throws Exception {
@@ -141,6 +140,7 @@
 
         when(mUserManagerMock.getUserInfo(UserHandle.USER_SYSTEM)).thenReturn(mUserInfoMock);
         when(mUserManagerMock.getUserInfo(NON_USER_SYSTEM)).thenReturn(mUserInfoMock);
+        when(mUserManagerMock.getUserInfo(UNSTARTED_NON_USER_SYSTEM)).thenReturn(mUserInfoMock);
 
         TrampolineTestable.sBackupManagerServiceMock = mBackupManagerServiceMock;
         TrampolineTestable.sCallingUserId = UserHandle.USER_SYSTEM;
@@ -154,18 +154,31 @@
         mSuppressFile = new File(mTestDir, "suppress");
         TrampolineTestable.sSuppressFile = mSuppressFile;
 
-        mActivatedFile = new File(mTestDir, "activate-" + NON_USER_SYSTEM);
-        TrampolineTestable.sActivatedFiles.append(NON_USER_SYSTEM, mActivatedFile);
-        mRememberActivatedFile = new File(mTestDir, "rem-activate-" + NON_USER_SYSTEM);
-        TrampolineTestable.sRememberActivatedFiles.append(NON_USER_SYSTEM, mRememberActivatedFile);
+        setUpStateFilesForNonSystemUser(NON_USER_SYSTEM);
+        setUpStateFilesForNonSystemUser(UNSTARTED_NON_USER_SYSTEM);
 
         mTrampoline = new TrampolineTestable(mContextMock);
     }
 
+    private void setUpStateFilesForNonSystemUser(int userId) {
+        File activatedFile = new File(mTestDir, "activate-" + userId);
+        TrampolineTestable.sActivatedFiles.append(userId, activatedFile);
+        File rememberActivatedFile = new File(mTestDir, "rem-activate-" + userId);
+        TrampolineTestable.sRememberActivatedFiles.append(userId, rememberActivatedFile);
+    }
+
     @After
     public void tearDown() throws Exception {
         mSuppressFile.delete();
-        mActivatedFile.delete();
+        deleteFiles(TrampolineTestable.sActivatedFiles);
+        deleteFiles(TrampolineTestable.sRememberActivatedFiles);
+    }
+
+    private void deleteFiles(SparseArray<File> files) {
+        int numFiles = files.size();
+        for (int i = 0; i < numFiles; i++) {
+            files.valueAt(i).delete();
+        }
     }
 
     @Test
@@ -245,6 +258,16 @@
     }
 
     @Test
+    public void
+            isBackupServiceActive_forUnstartedNonSystemUser_returnsTrueWhenSystemAndUserActivated()
+            throws Exception {
+        mTrampoline.initializeService();
+        mTrampoline.setBackupServiceActive(UNSTARTED_NON_USER_SYSTEM, true);
+
+        assertTrue(mTrampoline.isBackupServiceActive(UNSTARTED_NON_USER_SYSTEM));
+    }
+
+    @Test
     public void setBackupServiceActive_forSystemUserAndCallerSystemUid_serviceCreated() {
         mTrampoline.initializeService();
         TrampolineTestable.sCallingUid = Process.SYSTEM_UID;
@@ -421,7 +444,8 @@
 
         mTrampoline.setBackupServiceActive(NON_USER_SYSTEM, true);
 
-        assertTrue(RandomAccessFileUtils.readBoolean(mRememberActivatedFile, false));
+        assertTrue(RandomAccessFileUtils.readBoolean(
+                TrampolineTestable.sRememberActivatedFiles.get(NON_USER_SYSTEM), false));
     }
 
     @Test
@@ -430,7 +454,8 @@
 
         mTrampoline.setBackupServiceActive(NON_USER_SYSTEM, false);
 
-        assertFalse(RandomAccessFileUtils.readBoolean(mRememberActivatedFile, true));
+        assertFalse(RandomAccessFileUtils.readBoolean(
+                TrampolineTestable.sRememberActivatedFiles.get(NON_USER_SYSTEM), true));
     }
 
     @Test
@@ -440,7 +465,8 @@
         mTrampoline.setBackupServiceActive(NON_USER_SYSTEM, true);
         mTrampoline.setBackupServiceActive(NON_USER_SYSTEM, false);
 
-        assertFalse(RandomAccessFileUtils.readBoolean(mRememberActivatedFile, true));
+        assertFalse(RandomAccessFileUtils.readBoolean(
+                TrampolineTestable.sRememberActivatedFiles.get(NON_USER_SYSTEM), true));
     }
 
     @Test