Allow extra args to the dynamic resolver queries

Test: unit tests
Bug: 149516126
Change-Id: I622c3a81fd000f9b8fa63ece1c3a5d4a6acae37c
diff --git a/src/com/android/tradefed/config/DynamicRemoteFileResolver.java b/src/com/android/tradefed/config/DynamicRemoteFileResolver.java
index 56467a6..3b9e778 100644
--- a/src/com/android/tradefed/config/DynamicRemoteFileResolver.java
+++ b/src/com/android/tradefed/config/DynamicRemoteFileResolver.java
@@ -74,6 +74,8 @@
     public static final String OPTIONAL_KEY = "optional";
 
     private Map<String, OptionFieldsForName> mOptionMap;
+    // Populated from {@link ICommandOptions#getDynamicDownloadArgs()}
+    private Map<String, String> mExtraArgs = new LinkedHashMap<>();
     private ITestDevice mDevice;
 
     /** Sets the map of options coming from {@link OptionSetter} */
@@ -86,6 +88,11 @@
         mDevice = device;
     }
 
+    /** Add extra args for the query. */
+    public void addExtraArgs(Map<String, String> extraArgs) {
+        mExtraArgs.putAll(extraArgs);
+    }
+
     /**
      * Runs through all the {@link File} option type and check if their path should be resolved.
      *
@@ -357,6 +364,8 @@
                 CLog.d(
                         "Considering option '%s' with path: '%s' for download.",
                         option.name(), path);
+                // Overrides query args
+                query.putAll(mExtraArgs);
                 return resolver.resolveRemoteFiles(fileToResolve, query);
             } catch (BuildRetrievalError e) {
                 if (isOptional(query)) {