1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 package org.chromium.content.browser; 6 7 /** 8 * Class representing the state of a single download. 9 */ 10 public final class DownloadInfo { 11 private final String mUrl; 12 private final String mUserAgent; 13 private final String mMimeType; 14 private final String mCookie; 15 private final String mFileName; 16 private final String mDescription; 17 private final String mFilePath; 18 private final String mReferer; 19 private final long mContentLength; 20 private final boolean mHasDownloadId; 21 private final int mDownloadId; 22 private final boolean mHasUserGesture; 23 private final String mContentDisposition; 24 private final boolean mIsGETRequest; 25 private final boolean mIsSuccessful; 26 private final int mPercentCompleted; 27 private final long mTimeRemainingInMillis; 28 29 private DownloadInfo(Builder builder) { 30 mUrl = builder.mUrl; 31 mUserAgent = builder.mUserAgent; 32 mMimeType = builder.mMimeType; 33 mCookie = builder.mCookie; 34 mFileName = builder.mFileName; 35 mDescription = builder.mDescription; 36 mFilePath = builder.mFilePath; 37 mReferer = builder.mReferer; 38 mContentLength = builder.mContentLength; 39 mHasDownloadId = builder.mHasDownloadId; 40 mDownloadId = builder.mDownloadId; 41 mHasUserGesture = builder.mHasUserGesture; 42 mIsSuccessful = builder.mIsSuccessful; 43 mIsGETRequest = builder.mIsGETRequest; 44 mContentDisposition = builder.mContentDisposition; 45 mPercentCompleted = builder.mPercentCompleted; 46 mTimeRemainingInMillis = builder.mTimeRemainingInMillis; 47 } 48 49 public String getUrl() { 50 return mUrl; 51 } 52 53 public String getUserAgent() { 54 return mUserAgent; 55 } 56 57 public String getMimeType() { 58 return mMimeType; 59 } 60 61 public String getCookie() { 62 return mCookie; 63 } 64 65 public String getFileName() { 66 return mFileName; 67 } 68 69 public String getDescription() { 70 return mDescription; 71 } 72 73 public String getFilePath() { 74 return mFilePath; 75 } 76 77 public String getReferer() { 78 return mReferer; 79 } 80 81 public long getContentLength() { 82 return mContentLength; 83 } 84 85 public boolean isGETRequest() { 86 return mIsGETRequest; 87 } 88 89 public boolean hasDownloadId() { 90 return mHasDownloadId; 91 } 92 93 public int getDownloadId() { 94 return mDownloadId; 95 } 96 97 public boolean hasUserGesture() { 98 return mHasUserGesture; 99 } 100 101 public boolean isSuccessful() { 102 return mIsSuccessful; 103 } 104 105 public String getContentDisposition() { 106 return mContentDisposition; 107 } 108 109 /** 110 * @return percent completed as an integer, -1 if there is no download progress. 111 */ 112 public int getPercentCompleted() { 113 return mPercentCompleted; 114 } 115 116 public long getTimeRemainingInMillis() { 117 return mTimeRemainingInMillis; 118 } 119 120 public static class Builder { 121 private String mUrl; 122 private String mUserAgent; 123 private String mMimeType; 124 private String mCookie; 125 private String mFileName; 126 private String mDescription; 127 private String mFilePath; 128 private String mReferer; 129 private long mContentLength; 130 private boolean mIsGETRequest; 131 private boolean mHasDownloadId; 132 private int mDownloadId; 133 private boolean mHasUserGesture; 134 private boolean mIsSuccessful; 135 private String mContentDisposition; 136 private int mPercentCompleted = -1; 137 private long mTimeRemainingInMillis; 138 139 public Builder setUrl(String url) { 140 mUrl = url; 141 return this; 142 } 143 144 public Builder setUserAgent(String userAgent) { 145 mUserAgent = userAgent; 146 return this; 147 } 148 149 public Builder setMimeType(String mimeType) { 150 mMimeType = mimeType; 151 return this; 152 } 153 154 public Builder setCookie(String cookie) { 155 mCookie = cookie; 156 return this; 157 } 158 159 public Builder setFileName(String fileName) { 160 mFileName = fileName; 161 return this; 162 } 163 164 public Builder setDescription(String description) { 165 mDescription = description; 166 return this; 167 } 168 169 public Builder setFilePath(String filePath) { 170 mFilePath = filePath; 171 return this; 172 } 173 174 public Builder setReferer(String referer) { 175 mReferer = referer; 176 return this; 177 } 178 179 public Builder setContentLength(long contentLength) { 180 mContentLength = contentLength; 181 return this; 182 } 183 184 public Builder setIsGETRequest(boolean isGETRequest) { 185 mIsGETRequest = isGETRequest; 186 return this; 187 } 188 189 public Builder setHasDownloadId(boolean hasDownloadId) { 190 mHasDownloadId = hasDownloadId; 191 return this; 192 } 193 194 public Builder setDownloadId(int downloadId) { 195 mDownloadId = downloadId; 196 return this; 197 } 198 199 public Builder setHasUserGesture(boolean hasUserGesture) { 200 mHasUserGesture = hasUserGesture; 201 return this; 202 } 203 204 public Builder setIsSuccessful(boolean isSuccessful) { 205 mIsSuccessful = isSuccessful; 206 return this; 207 } 208 209 public Builder setContentDisposition(String contentDisposition) { 210 mContentDisposition = contentDisposition; 211 return this; 212 } 213 214 public Builder setPercentCompleted(int percentCompleted) { 215 assert percentCompleted <= 100; 216 mPercentCompleted = percentCompleted; 217 return this; 218 } 219 220 public Builder setTimeRemainingInMillis(long timeRemainingInMillis) { 221 mTimeRemainingInMillis = timeRemainingInMillis; 222 return this; 223 } 224 225 public DownloadInfo build() { 226 return new DownloadInfo(this); 227 } 228 229 /** 230 * Create a builder from the DownloadInfo object. 231 * @param downloadInfo DownloadInfo object from which builder fields are populated. 232 * @return A builder initialized with fields from downloadInfo object. 233 */ 234 public static Builder fromDownloadInfo(final DownloadInfo downloadInfo) { 235 Builder builder = new Builder(); 236 builder 237 .setUrl(downloadInfo.getUrl()) 238 .setUserAgent(downloadInfo.getUserAgent()) 239 .setMimeType(downloadInfo.getMimeType()) 240 .setCookie(downloadInfo.getCookie()) 241 .setFileName(downloadInfo.getFileName()) 242 .setDescription(downloadInfo.getDescription()) 243 .setFilePath(downloadInfo.getFilePath()) 244 .setReferer(downloadInfo.getReferer()) 245 .setContentLength(downloadInfo.getContentLength()) 246 .setHasDownloadId(downloadInfo.hasDownloadId()) 247 .setDownloadId(downloadInfo.getDownloadId()) 248 .setHasUserGesture(downloadInfo.hasUserGesture()) 249 .setContentDisposition(downloadInfo.getContentDisposition()) 250 .setIsGETRequest(downloadInfo.isGETRequest()) 251 .setIsSuccessful(downloadInfo.isSuccessful()) 252 .setPercentCompleted(downloadInfo.getPercentCompleted()) 253 .setTimeRemainingInMillis(downloadInfo.getTimeRemainingInMillis()); 254 return builder; 255 } 256 257 } 258 } 259