/* * 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; import android.accounts.Account; import com.google.auto.value.AutoValue; import com.google.common.base.Optional; import com.google.mobiledatadownload.DownloadConfigProto.DownloadConditions; import javax.annotation.concurrent.Immutable; /** Request to download file group in MDD. */ @AutoValue @Immutable public abstract class DownloadFileGroupRequest { /** Defines notifiction behavior for foreground download requests. */ public enum ShowNotifications { NONE, ALL, } DownloadFileGroupRequest() {} public abstract String groupName(); public abstract Optional accountOptional(); public abstract Optional variantIdOptional(); /** * If present, title text to display in notification when using foreground downloads. Otherwise, * the file group name will be used. * *

See for an example of the notification. */ public abstract Optional contentTitleOptional(); /** * If present, content text to display in notification when using foreground downloads. Otherwise, * the file group name will be used. * *

See for an example of the notification. */ public abstract Optional contentTextOptional(); /** * The conditions for the download. If absent, MDD will use the download conditions from the * server config. */ public abstract Optional downloadConditionsOptional(); /** If present, will receive download progress update. */ public abstract Optional listenerOptional(); // The size of the being downloaded file in bytes. // This is used to display the progressbar. // If not specified, an indeterminate progressbar will be displayed. // https://developer.android.com/reference/android/app/Notification.Builder.html#setProgress(int,%20int,%20boolean) public abstract int groupSizeBytes(); /** * If {@link ShowNotifications.NONE}, will not create notifications for this foreground download * request. */ public abstract ShowNotifications showNotifications(); public abstract boolean preserveZipDirectories(); public abstract boolean verifyIsolatedStructure(); public abstract Builder toBuilder(); public static Builder newBuilder() { return new AutoValue_DownloadFileGroupRequest.Builder() .setGroupSizeBytes(0) .setShowNotifications(ShowNotifications.ALL) .setPreserveZipDirectories(false) .setVerifyIsolatedStructure(true); } /** Builder for {@link DownloadFileGroupRequest}. */ @AutoValue.Builder public abstract static class Builder { Builder() {} /** Sets the name of the file group. */ public abstract Builder setGroupName(String groupName); /** Sets the optional account that is associated to the file group. */ public abstract Builder setAccountOptional(Optional accountOptional); /** * Sets the variant id that is associated to the file group. * *

This parameter is only required to download a group that was added to MDD with a variantId * specified (see {@link AddFileGroupRequest.Builder#setVariantIdOptional}). * *

If a variantId was specified when adding the group to MDD and is not included here, the * request will fail with a {@link DownloadException} and a GROUP_NOT_FOUND result code. * *

Similarly, if a variantId was not specified when adding the group to MDD and * is included here, the request will also fail with the same exception. */ public abstract Builder setVariantIdOptional(Optional variantIdOptional); /** Sets the optional title text for a notification when using foreground downloads. */ public abstract Builder setContentTitleOptional(Optional contentTitleOptional); /** Sets the optional content text for a notification when using foreground downloads. */ public abstract Builder setContentTextOptional(Optional contentTextOptional); /** * Sets the optional download conditions. If absent, MDD will use the download conditions from * the server config. */ public abstract Builder setDownloadConditionsOptional( Optional downloadConditionsOptional); /** * Sets the optional download listener when using foreground downloads. If present, will receive * download progress update. */ public abstract Builder setListenerOptional(Optional listenerOptional); /** * Sets size of the being downloaded group in bytes when using foreground downloads. This is * used to display the progressbar. If not specified, a indeterminate progressbar will be * displayed. * https://developer.android.com/reference/android/app/Notification.Builder.html#setProgress(int,%20int,%20boolean) */ public abstract Builder setGroupSizeBytes(int groupSizeBytes); /** * Controls if notifications should be created for this download request when using foreground * downloads. Defaults to true. */ public abstract Builder setShowNotifications(ShowNotifications notifications); /** * By default, MDD will scan the directories generated by unpacking zip files in a download * transform and generate a ClientDataFile for each contained file. By default, MDD also hides * the root directory. Setting this to true disables that behavior, and will simply return the * directories as ClientDataFiles. */ public abstract Builder setPreserveZipDirectories(boolean preserve); /** * By default, file groups will isolated structures will have this structure checked for each * file when returning the file group. If the isolated structure is not correct, MDD will return * a failure. * *

Setting this option to false allows clients to bypass this check, reducing the latency for * critical callpaths. * *

For groups that do not have an isolated structure, this option is a no-op. * *

NOTE: All groups with isolated structures are also verified/fixed during MDD's maintenance * periodic task. */ public abstract Builder setVerifyIsolatedStructure(boolean verifyIsolatedStructure); public abstract DownloadFileGroupRequest build(); } }