/* * Copyright (C) 2016 AriaLyy(https://github.com/AriaLyy/Aria) * * 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.arialyy.aria.util; import android.util.Log; import com.arialyy.aria.core.AriaManager; import java.io.File; import java.io.IOException; import java.util.Map; import java.util.Properties; import java.util.Set; import java.util.WeakHashMap; /** * Created by AriaL on 2016/12/8. * 信息配置 */ public class Configuration { private static final String TAG = "Configuration"; private static final String CONFIG_FILE = "/Aria/ADConfig.properties"; /** * 当前调度器最大下载数,默认最大下载数为 “2” */ private static final String DOWNLOAD_NUM = "DOWNLOAD_NUM"; /** * 失败重试次数,默认最多重试 10 次 */ private static final String RE_TRY_NUM = "RE_TRY_NUM"; /** * 是否打开下载广播,默认 false */ private static final String OPEN_BROADCAST = "OPEN_BROADCAST"; /** * 失败重试间隔时间,默认 4000 ms */ private static final String RE_TRY_INTERVAL = "RE_TRY_INTERVAL"; /** * 超时时间,默认 10000 ms */ private static final String DOWNLOAD_TIME_OUT = "DOWNLOAD_TIME_OUT"; public static boolean isOpenBreadCast = false; private static Configuration INSTANCE = null; private File mConfigFile = null; private static final Object LOCK = new Object(); public static Configuration getInstance() { if (INSTANCE == null) { synchronized (LOCK) { INSTANCE = new Configuration(); } } return INSTANCE; } private Configuration() { mConfigFile = new File(AriaManager.APP.getFilesDir().getPath() + CONFIG_FILE); try { if (!mConfigFile.exists()) { mConfigFile.getParentFile().mkdirs(); mConfigFile.createNewFile(); init(); }else { isOpenBreadCast = isOpenBroadcast(); } } catch (IOException e) { e.printStackTrace(); } } private void init() { Map config = new WeakHashMap<>(); config.put(DOWNLOAD_NUM, 2 + ""); config.put(RE_TRY_NUM, 10 + ""); config.put(OPEN_BROADCAST, false + ""); config.put(RE_TRY_INTERVAL, 4000 + ""); config.put(DOWNLOAD_TIME_OUT, 10000 + ""); saveConfig(config); } private void saveConfig(Map config) { if (config == null || config.size() == 0) { return; } Properties properties = CommonUtil.loadConfig(mConfigFile); Set keys = config.keySet(); for (String key : keys) { properties.setProperty(key, config.get(key)); } CommonUtil.saveConfig(mConfigFile, properties); } private void save(String key, String value) { Map map = new WeakHashMap<>(); map.put(key, value); saveConfig(map); } /** * 获取下载超时时间 * * @return 默认4000ms */ public int getTimeOut() { return Integer.parseInt(CommonUtil.loadConfig(mConfigFile).getProperty(DOWNLOAD_TIME_OUT)); } /** * 设置重试间隔 */ public void setTimeOut(int timeOut) { if (timeOut < 10000) { Log.w(TAG, "下载超时时间不能小于 10000 ms"); return; } save(DOWNLOAD_TIME_OUT, timeOut + ""); } /** * 获取失败重试间隔时间 * * @return 默认4000ms */ public int getReTryInterval() { return Integer.parseInt(CommonUtil.loadConfig(mConfigFile).getProperty(RE_TRY_INTERVAL)); } /** * 设置重试间隔 */ public void setReTryInterval(int reTryInterval) { if (reTryInterval < 4000) { Log.w(TAG, "重试间隔不能小于4000ms"); return; } save(RE_TRY_INTERVAL, reTryInterval + ""); } /** * 获取最大下载数 * * @return 默认返回2 */ public int getDownloadNum() { return Integer.parseInt(CommonUtil.loadConfig(mConfigFile).getProperty(DOWNLOAD_NUM)); } /** * 设置最大下载数 */ public void setDownloadNum(int downloadNum) { if (downloadNum < 1) { Log.w(TAG, "最大下载数不能小于1"); return; } save(DOWNLOAD_NUM, downloadNum + ""); } /** * 获取最大重试数 * * @return 默认返回 10 */ public int getReTryNum() { return Integer.parseInt(CommonUtil.loadConfig(mConfigFile).getProperty(RE_TRY_NUM)); } /** * 设置重试数 */ public void setReTryNum(int reTryNum) { if (reTryNum < 1) { Log.w(TAG, "最大下载数不能小于1"); return; } save(RE_TRY_NUM, reTryNum + ""); } /** * 是否打开下载广播 * * @return 默认false */ public boolean isOpenBroadcast() { return Boolean.parseBoolean(CommonUtil.loadConfig(mConfigFile).getProperty(RE_TRY_NUM)); } /** * 设置是否打开下载广播 */ public void setOpenBroadcast(boolean openBroadcast) { isOpenBreadCast = openBroadcast; save(OPEN_BROADCAST, openBroadcast + ""); } }