178 lines
6.8 KiB
Java
178 lines
6.8 KiB
Java
/*
|
|
* 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<Account> accountOptional();
|
|
|
|
public abstract Optional<String> variantIdOptional();
|
|
|
|
/**
|
|
* If present, title text to display in notification when using foreground downloads. Otherwise,
|
|
* the file group name will be used.
|
|
*
|
|
* <p>See <internal> for an example of the notification.
|
|
*/
|
|
public abstract Optional<String> contentTitleOptional();
|
|
|
|
/**
|
|
* If present, content text to display in notification when using foreground downloads. Otherwise,
|
|
* the file group name will be used.
|
|
*
|
|
* <p>See <internal> for an example of the notification.
|
|
*/
|
|
public abstract Optional<String> contentTextOptional();
|
|
|
|
/**
|
|
* The conditions for the download. If absent, MDD will use the download conditions from the
|
|
* server config.
|
|
*/
|
|
public abstract Optional<DownloadConditions> downloadConditionsOptional();
|
|
|
|
/** If present, will receive download progress update. */
|
|
public abstract Optional<DownloadListener> 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<Account> accountOptional);
|
|
|
|
/**
|
|
* Sets the variant id that is associated to the file group.
|
|
*
|
|
* <p>This parameter is only required to download a group that was added to MDD with a variantId
|
|
* specified (see {@link AddFileGroupRequest.Builder#setVariantIdOptional}).
|
|
*
|
|
* <p>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.
|
|
*
|
|
* <p>Similarly, if a variantId was <em>not</em> specified when adding the group to MDD and
|
|
* <em>is</em> included here, the request will also fail with the same exception.
|
|
*/
|
|
public abstract Builder setVariantIdOptional(Optional<String> variantIdOptional);
|
|
|
|
/** Sets the optional title text for a notification when using foreground downloads. */
|
|
public abstract Builder setContentTitleOptional(Optional<String> contentTitleOptional);
|
|
|
|
/** Sets the optional content text for a notification when using foreground downloads. */
|
|
public abstract Builder setContentTextOptional(Optional<String> contentTextOptional);
|
|
|
|
/**
|
|
* Sets the optional download conditions. If absent, MDD will use the download conditions from
|
|
* the server config.
|
|
*/
|
|
public abstract Builder setDownloadConditionsOptional(
|
|
Optional<DownloadConditions> downloadConditionsOptional);
|
|
|
|
/**
|
|
* Sets the optional download listener when using foreground downloads. If present, will receive
|
|
* download progress update.
|
|
*/
|
|
public abstract Builder setListenerOptional(Optional<DownloadListener> 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.
|
|
*
|
|
* <p>Setting this option to false allows clients to bypass this check, reducing the latency for
|
|
* critical callpaths.
|
|
*
|
|
* <p>For groups that do not have an isolated structure, this option is a no-op.
|
|
*
|
|
* <p>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();
|
|
}
|
|
}
|