Update local file URLs to include syncToken

Bug: 263493933
Test: atest
Change-Id: I300dfbdae675e1403929bb5f07fe551432fadc49
diff --git a/src/com/android/ondevicepersonalization/services/download/mdd/OnDevicePersonalizationFileGroupPopulator.java b/src/com/android/ondevicepersonalization/services/download/mdd/OnDevicePersonalizationFileGroupPopulator.java
index a494361..e4eec7c 100644
--- a/src/com/android/ondevicepersonalization/services/download/mdd/OnDevicePersonalizationFileGroupPopulator.java
+++ b/src/com/android/ondevicepersonalization/services/download/mdd/OnDevicePersonalizationFileGroupPopulator.java
@@ -133,14 +133,14 @@
             throw new IllegalArgumentException("Failed to retrieve base download URL");
         }
         Uri uri = Uri.parse(baseURL);
-        // Handle odp debug URLs
-        if (OnDevicePersonalizationLocalFileDownloader.isLocalOdpUri(uri)
-                && PackageUtils.isPackageDebuggable(context, packageName)) {
-            return uri.toString();
-        }
 
         // Enforce URI scheme
-        if (!baseURL.startsWith("https")) {
+        if (OnDevicePersonalizationLocalFileDownloader.isLocalOdpUri(uri)) {
+            if (!PackageUtils.isPackageDebuggable(context, packageName)) {
+                throw new IllegalArgumentException("Local urls are only valid "
+                        + "for debuggable packages: " + baseURL);
+            }
+        } else if (!baseURL.startsWith("https")) {
             throw new IllegalArgumentException("File url is not secure: " + baseURL);
         }
 
@@ -150,7 +150,8 @@
     /**
      * Adds query parameters to the download URL.
      */
-    public static String addDownloadUrlQueryParameters(Uri uri, String packageName, Context context)
+    private static String addDownloadUrlQueryParameters(Uri uri, String packageName,
+            Context context)
             throws PackageManager.NameNotFoundException {
         long syncToken = OnDevicePersonalizationVendorDataDao.getInstance(context, packageName,
                 PackageUtils.getCertDigest(context, packageName)).getSyncToken();
diff --git a/src/com/android/ondevicepersonalization/services/download/mdd/OnDevicePersonalizationLocalFileDownloader.java b/src/com/android/ondevicepersonalization/services/download/mdd/OnDevicePersonalizationLocalFileDownloader.java
index bc5c4f0..34c9a90 100644
--- a/src/com/android/ondevicepersonalization/services/download/mdd/OnDevicePersonalizationLocalFileDownloader.java
+++ b/src/com/android/ondevicepersonalization/services/download/mdd/OnDevicePersonalizationLocalFileDownloader.java
@@ -92,6 +92,11 @@
         Uri fileUri = downloadRequest.fileUri();
         String urlToDownload = downloadRequest.urlToDownload();
         Uri uriToDownload = Uri.parse(urlToDownload);
+        // Strip away the query params for local download.
+        uriToDownload = new Uri.Builder()
+                .scheme(uriToDownload.getScheme())
+                .authority(uriToDownload.getAuthority())
+                .path(uriToDownload.getPath()).build();
         Log.d(TAG, "Starting local download for url: " + urlToDownload);
 
         try {
diff --git a/src/com/android/ondevicepersonalization/services/download/mdd/OnDevicePersonalizationMddFlags.java b/src/com/android/ondevicepersonalization/services/download/mdd/OnDevicePersonalizationMddFlags.java
index 20fe303..4a88b38 100644
--- a/src/com/android/ondevicepersonalization/services/download/mdd/OnDevicePersonalizationMddFlags.java
+++ b/src/com/android/ondevicepersonalization/services/download/mdd/OnDevicePersonalizationMddFlags.java
@@ -23,10 +23,20 @@
  */
 public class OnDevicePersonalizationMddFlags implements Flags {
     /**
+     *  Allow non-http urls. This will be used for debuggable packages.
      * {@link OnDevicePersonalizationFileDownloader} will enforce uri scheme instead.
      */
     @Override
     public boolean downloaderEnforceHttps() {
         return false;
     }
+
+    /**
+     * Allow sideloading for files. This will be used for debuggable packages.
+     * {@link OnDevicePersonalizationFileDownloader} will enforce uri scheme instead.
+     */
+    @Override
+    public boolean enableSideloading() {
+        return true;
+    }
 }
diff --git a/tests/servicetests/src/com/android/ondevicepersonalization/services/download/mdd/OnDevicePersonalizationFileGroupPopulatorTest.java b/tests/servicetests/src/com/android/ondevicepersonalization/services/download/mdd/OnDevicePersonalizationFileGroupPopulatorTest.java
index 76169ad..c8d9026 100644
--- a/tests/servicetests/src/com/android/ondevicepersonalization/services/download/mdd/OnDevicePersonalizationFileGroupPopulatorTest.java
+++ b/tests/servicetests/src/com/android/ondevicepersonalization/services/download/mdd/OnDevicePersonalizationFileGroupPopulatorTest.java
@@ -21,7 +21,6 @@
 import static org.junit.Assert.assertTrue;
 
 import android.content.Context;
-import android.net.Uri;
 
 import androidx.test.core.app.ApplicationProvider;
 
@@ -121,7 +120,7 @@
     }
 
     @Test
-    public void testAddDownloadUrlQueryParameters() throws Exception {
+    public void testCreateDownloadUrlQueryParameters() throws Exception {
         long timestamp = System.currentTimeMillis();
         assertTrue(OnDevicePersonalizationVendorDataDao.getInstanceForTest(mContext, mPackageName,
                         PackageUtils.getCertDigest(mContext, mPackageName))
@@ -129,8 +128,7 @@
                         timestamp));
 
         String downloadUrl =
-                OnDevicePersonalizationFileGroupPopulator.addDownloadUrlQueryParameters(
-                        Uri.parse(BASE_URL), mPackageName, mContext);
+                OnDevicePersonalizationFileGroupPopulator.createDownloadUrl(mPackageName, mContext);
         assertTrue(downloadUrl.startsWith(BASE_URL));
         assertTrue(downloadUrl.contains(String.valueOf(timestamp)));
     }
diff --git a/tests/servicetests/src/com/android/ondevicepersonalization/services/download/mdd/OnDevicePersonalizationMddFlagsTests.java b/tests/servicetests/src/com/android/ondevicepersonalization/services/download/mdd/OnDevicePersonalizationMddFlagsTests.java
index d5ed602..408df72 100644
--- a/tests/servicetests/src/com/android/ondevicepersonalization/services/download/mdd/OnDevicePersonalizationMddFlagsTests.java
+++ b/tests/servicetests/src/com/android/ondevicepersonalization/services/download/mdd/OnDevicePersonalizationMddFlagsTests.java
@@ -17,6 +17,7 @@
 package com.android.ondevicepersonalization.services.download.mdd;
 
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -26,8 +27,14 @@
 public class OnDevicePersonalizationMddFlagsTests {
 
     @Test
-    public void testBackgroundExecutorSettings() {
+    public void testDownloaderEnforceHttps() {
         OnDevicePersonalizationMddFlags mddFlags = new OnDevicePersonalizationMddFlags();
         assertFalse(mddFlags.downloaderEnforceHttps());
     }
+
+    @Test
+    public void testEnableSideloading() {
+        OnDevicePersonalizationMddFlags mddFlags = new OnDevicePersonalizationMddFlags();
+        assertTrue(mddFlags.enableSideloading());
+    }
 }