Implemented removal of stale adselection data

Test: test would be flaky because of the way the feature works

Bug: 241182319
Bug: 238353778
Change-Id: I9596e40449d9761e41d0e3bcdbf52d654f96c163
diff --git a/adservices/service-core/java/com/android/adservices/service/adselection/AdSelectionRunner.java b/adservices/service-core/java/com/android/adservices/service/adselection/AdSelectionRunner.java
index 856e49a..20ecc3c 100644
--- a/adservices/service-core/java/com/android/adservices/service/adselection/AdSelectionRunner.java
+++ b/adservices/service-core/java/com/android/adservices/service/adselection/AdSelectionRunner.java
@@ -60,6 +60,7 @@
 import com.google.common.util.concurrent.MoreExecutors;
 
 import java.time.Clock;
+import java.time.Instant;
 import java.util.List;
 import java.util.Objects;
 import java.util.Optional;
@@ -100,6 +101,8 @@
     @VisibleForTesting
     static final String AD_SELECTION_TIMED_OUT = "Ad selection exceeded allowed time limit";
 
+    public static final long DAY_IN_SECONDS = 60 * 60 * 24;
+
     @NonNull private final Context mContext;
     @NonNull private final CustomAudienceDao mCustomAudienceDao;
     @NonNull private final AdSelectionEntryDao mAdSelectionEntryDao;
@@ -230,6 +233,8 @@
                         @Override
                         public void onSuccess(DBAdSelection result) {
                             notifySuccessToCaller(result, callback);
+                            // TODO(242280808): Schedule a clear for stale data instead of this hack
+                            clearExpiredAdSelectionData();
                         }
 
                         @Override
@@ -241,6 +246,8 @@
                             } else {
                                 notifyFailureToCaller(callback, t);
                             }
+                            // TODO(242280808): Schedule a clear for stale data instead of this hack
+                            clearExpiredAdSelectionData();
                         }
                     },
                     mExecutorService);
@@ -599,4 +606,9 @@
         }
         return null;
     }
+
+    private void clearExpiredAdSelectionData() {
+        Instant expirationTime = mClock.instant().minusSeconds(DAY_IN_SECONDS);
+        mAdSelectionEntryDao.removeExpiredAdSelection(expirationTime);
+    }
 }
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdSelectionRunnerTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdSelectionRunnerTest.java
index c96e2fb..2fb629b 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdSelectionRunnerTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/adselection/AdSelectionRunnerTest.java
@@ -118,10 +118,9 @@
     @Mock private AdBidGenerator mMockAdBidGenerator;
     @Mock private AdSelectionIdGenerator mMockAdSelectionIdGenerator;
     @Mock private AppImportanceFilter mAppImportanceFilter;
-    @Mock private Clock mClock;
+    @Spy private Clock mClock = Clock.systemUTC();
     @Mock private ConsentManager mConsentManagerMock;
     private Flags mFlags;
-
     private Context mContext;
     private ExecutorService mExecutorService;
     private CustomAudienceDao mCustomAudienceDao;