package com.hawkbrowser.app; import java.io.Serializable; import com.hawkbrowser.util.CommonUtil; import android.text.format.Time; import android.util.Log; public class DownloadItem implements Serializable { enum Status { NOTSTARTED, ONPROGRESS, PAUSED, FINISHED, FAILED } private static final long serialVersionUID = 1L; private int mId; private long mProgress; private long mLength; private String mUrl; private Status mStatus; private String mName; private String mLocalFilePath; transient private long mLastSetProgressTime; transient private long mSpeed; public DownloadItem(int id, long length, String url, String fileName) { mId = id; mProgress = 0; mLength = length; mUrl = url; mStatus = Status.NOTSTARTED; mSpeed = 0; mLastSetProgressTime = 0; mName = fileName; if(null == mName) { CommonUtil.fileNameFromUrl(url); } } public void setProgress(long progress) { mProgress += progress; if(mProgress >= mLength) { mProgress = mLength; } long now = System.nanoTime(); if(0 != mLastSetProgressTime) { long timeDistance = now - mLastSetProgressTime; if(timeDistance > 0) { mSpeed = progress * 1000 * 1000 * 1000 / (timeDistance << 10); } } else { mLastSetProgressTime = now; } } public long progress() { return mProgress; } public void setStatus(Status status) { mStatus = status; } public Status status() { return mStatus; } public long downloadSpeed() { return mSpeed; } public String url() { return mUrl; } public int hashCode() { return mId; } public String name() { return mName; } public long size() { return mLength; } public void setLocalFilePath(String path) { mLocalFilePath = path; } public String localFilePath() { return mLocalFilePath; } @Override public String toString() { return String.format("DownloadItem: %s, Status: %s", mName, mStatus); } }