package com.tencent.onesecurity.update; import java.util.ArrayList; import android.content.Context; import android.content.Intent; import android.os.Handler; import android.os.Message; import com.tencent.onesecurity.dao.DBHelper; import com.tencent.onesecurity.safebox.dao.SafeBoxDBHelper; import com.tencent.onesecurity.service.UpdateService; public class UpdateManager { private static UpdateManager instance; /** * updateState状态 * 不需要更新 */ private static final int NO_NEED_UPDATE = 0; /** * updateState状态 * 需要更新 */ private static final int NEED_UPDATE = 1; /** * updateState状态 * 正在更新 */ private static final int UPDATEING = 1; private int updateState = NO_NEED_UPDATE; /** * 保存需要检查的组件 */ private ArrayList<UpdateInterface> updateList= new ArrayList<UpdateInterface>(); private UpdateManager(){ DBHelper.getInstance().createDB(); SafeBoxDBHelper.getInstance().createDB(); updateList.add(DBHelper.getInstance()); updateList.add(SafeBoxDBHelper.getInstance()); }; public static UpdateManager getInstance() { if (instance == null) { if (instance == null) { instance = new UpdateManager(); } } return instance; } public boolean checkUpdate(){ for(UpdateInterface update: this.updateList){ if(update.isNeedUpdate()){ updateState = NEED_UPDATE; } } return updateState==NEED_UPDATE; } /** * 用于mainActivity跳转更新页面时判断service是否正在更新 * @return */ public boolean isNeedToUpdateShow(){ if(updateState == NEED_UPDATE || updateState == UPDATEING){ return true; } return false; } public void startUpdateService(Context context){ Intent intent = new Intent(context,UpdateService.class); intent.setAction(UpdateService.START_UPDATE_ACTION); context.startService(intent); } /** * 升级转移数据的总量,用于ui显示进度条 * @return */ public int getUpdateCounts(){ int count = 0; for(UpdateInterface update: this.updateList){ count +=update.updateCount(); } return count; } /** * 组件更新 * @param handler */ public void updateApp(Handler handler){ updateState = UPDATEING; UpdateRefresh updateRefresh = new UpdateRefresh(handler); for(UpdateInterface update: this.updateList){ update.update(updateRefresh); } } /** * 更新结束后调用 */ public void updateFinish(){ updateState = NO_NEED_UPDATE; updateList.clear(); } /** * 用于刷新进度条的类 * @author sandrocheng * */ public static class UpdateRefresh{ private Handler mHandler; private int refreshCount; public UpdateRefresh(Handler handler){ this.mHandler = handler; refreshCount = 0; } public void sendRefreshCommend(){ if(this.mHandler != null){ refreshCount ++; Message msg = this.mHandler.obtainMessage(UpdateService.RESRESH_COUNT); msg.arg1 = refreshCount; msg.sendToTarget(); } } } }