chromium/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/DirectoryOption.java

// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package org.chromium.chrome.browser.download;

import androidx.annotation.IntDef;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

/** Denotes a given option for directory selection; includes name, location, and space. */
public class DirectoryOption {
    // Type to track user's selection of directory option. This enum is used in histogram and must
    // match DownloadLocationDirectoryType in enums.xml, so don't delete or reuse values.
    @IntDef({
        DownloadLocationDirectoryType.DEFAULT,
        DownloadLocationDirectoryType.ADDITIONAL,
        DownloadLocationDirectoryType.ERROR
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface DownloadLocationDirectoryType {
        int DEFAULT = 0;
        int ADDITIONAL = 1;
        int ERROR = 2;

        int NUM_ENTRIES = 3;
    }

    /** Name of the current download directory. */
    public String name;

    /** The absolute path of the download location. */
    public final String location;

    /** The available space in this download directory. */
    public final long availableSpace;

    /** The total disk space of the partition. */
    public final long totalSpace;

    /** The type of the directory option. */
    public final @DownloadLocationDirectoryType int type;

    public DirectoryOption(
            String name,
            String location,
            long availableSpace,
            long totalSpace,
            @DownloadLocationDirectoryType int type) {
        this(location, availableSpace, totalSpace, type);
        this.name = name;
    }

    public DirectoryOption(
            String location,
            long availableSpace,
            long totalSpace,
            @DownloadLocationDirectoryType int type) {
        this.location = location;
        this.availableSpace = availableSpace;
        this.totalSpace = totalSpace;
        this.type = type;
    }

    @Override
    public Object clone() {
        DirectoryOption directoryOption =
                new DirectoryOption(
                        this.name, this.location, this.availableSpace, this.totalSpace, this.type);
        return directoryOption;
    }
}