package com.qiniu.android.storage;
import android.os.Looper;
import android.util.Log;
import com.qiniu.android.utils.AndroidNetwork;
import java.util.HashMap;
import java.util.Map;
/**
* 定义数据或文件上传时的可选项
*/
public final class UploadOptions {
/**
* 扩展参数,以<code>x:</code>开头的用户自定义参数
*/
final Map<String, String> params;
/**
* 指定上传文件的MimeType
*/
final String mimeType;
/**
* 启用上传内容crc32校验
*/
final boolean checkCrc;
/**
* 上传内容进度处理
*/
final UpProgressHandler progressHandler;
/**
* 取消上传信号
*/
final UpCancellationSignal cancellationSignal;
/**
* 当网络暂时无法使用时,由用户决定是否继续处理
*/
final NetReadyHandler netReadyHandler;
public UploadOptions(Map<String, String> params, String mimeType, boolean checkCrc,
UpProgressHandler progressHandler, UpCancellationSignal cancellationSignal) {
this(params, mimeType, checkCrc, progressHandler, cancellationSignal, null);
}
public UploadOptions(Map<String, String> params, String mimeType, boolean checkCrc,
UpProgressHandler progressHandler, UpCancellationSignal cancellationSignal, NetReadyHandler netReadyHandler) {
this.params = filterParam(params);
this.mimeType = mime(mimeType);
this.checkCrc = checkCrc;
this.progressHandler = progressHandler != null ? progressHandler : new UpProgressHandler() {
@Override
public void progress(String key, double percent) {
Log.d("Qiniu.UploadProgress", "" + percent);
}
};
this.cancellationSignal = cancellationSignal != null ? cancellationSignal : new UpCancellationSignal() {
@Override
public boolean isCancelled() {
return false;
}
};
this.netReadyHandler = netReadyHandler != null ? netReadyHandler : new NetReadyHandler() {
@Override
public void waitReady() {
if (Thread.currentThread() == Looper.getMainLooper().getThread()) {
return;
}
for (int i = 0; i < 6; i++) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (AndroidNetwork.isNetWorkReady()) {
return;
}
}
}
};
}
/**
* 过滤用户自定义参数,只有参数名以<code>x:</code>开头的参数才会被使用
*
* @param params 待过滤的用户自定义参数
* @return 过滤后的用户自定义参数
*/
private static Map<String, String> filterParam(Map<String, String> params) {
Map<String, String> ret = new HashMap<String, String>();
if (params == null) {
return ret;
}
for (Map.Entry<String, String> i : params.entrySet()) {
if (i.getKey().startsWith("x:") && i.getValue() != null && !i.getValue().equals("")) {
ret.put(i.getKey(), i.getValue());
}
}
return ret;
}
static UploadOptions defaultOptions() {
return new UploadOptions(null, null, false, null, null);
}
private static String mime(String mimeType) {
if (mimeType == null || mimeType.equals("")) {
return "application/octet-stream";
}
return mimeType;
}
}