/* * Copyright 2022 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.google.android.libraries.mobiledatadownload.downloader; import static com.google.android.libraries.mobiledatadownload.internal.MddConstants.INLINE_FILE_URL_SCHEME; import static com.google.common.base.Preconditions.checkArgument; import android.net.Uri; import android.util.Pair; import com.google.auto.value.AutoValue; import com.google.common.base.Optional; import com.google.common.collect.ImmutableList; import javax.annotation.concurrent.Immutable; /** Request to download a file. */ @Immutable @AutoValue public abstract class DownloadRequest { // Default value for Traffic Tag if not set by clients. // MDD will not tag the traffic if the TrafficTag is not set to a valid value (>0). private static final int UNSPECIFIED_TRAFFIC_TAG = -1; DownloadRequest() {} /** The File Uri to download the file at. */ public abstract Uri fileUri(); /** The url to download the file from. */ public abstract String urlToDownload(); /** * Conditions under which this file should be downloaded. * *
These conditions relate to the type of network that should be used when downloading and must * be provided when performing a network download. * *
When performing in-memory downloads (using the "inlinefile" url scheme), this will not be * used. */ public abstract DownloadConstraints downloadConstraints(); /** * Traffic tag used for this request. * *
If not set, it will take the default value of UNSPECIFIED_TRAFFIC_TAG and MDD will not tag
* the traffic.
*/
public abstract int trafficTag();
/** The extra HTTP headers for this request. */
public abstract ImmutableList An instance of {@link InlineDownloadParams} must be included in the request to support
* in-memory downloads (see Implementations of {@link FileDownloader} that support downloading from an inline file
* should ensure that 1) the "inlinefile" url scheme is used and 2) an {@link
* InlineDownloadParams} is provided.
*/
public abstract Optional Only required when performing network downloads. If performing an in-memory download, this
* is not required.
*/
public abstract Builder setDownloadConstraints(DownloadConstraints downloadConstraints);
/** Sets the traffic tag for this request. */
public abstract Builder setTrafficTag(int trafficTag);
/** Sets the extra HTTP headers for this request. */
public abstract Builder setExtraHttpHeaders(
ImmutableList Only required when performing an in-memory download (using an "inlinefile" url scheme). If
* performing a network download, this is not required.
*/
public abstract Builder setInlineDownloadParamsOptional(
InlineDownloadParams inlineDownloadParams);
/** Builds a {@link DownloadRequest} and checks for correct data. */
public final DownloadRequest build() {
// Ensure that inlinefile: requests include InlineDownloadParams
if (urlToDownload().startsWith(INLINE_FILE_URL_SCHEME)) {
checkArgument(
inlineDownloadParamsOptional().isPresent(),
"InlineDownloadParams must be set when using inlinefile: scheme");
// inline file request doesn't require download constraints, so set to NONE.
setDownloadConstraints(DownloadConstraints.NONE);
}
return autoBuild();
}
/** Tells AutoValue to generate an automated builder used in {@link #build} */
abstract DownloadRequest autoBuild();
abstract String urlToDownload();
abstract Optional