/**
* 文 件 名: MT_BootRestorePolicyImpl.java
* 描 述:
* 版 权: Copyright (c)20010-2011 motone All Rights Reserved.
* 公 司: 摩通科技
* 作 者: 邓丽霞
* 版 本: 1.0
* 创建时间: 2011-4-14
*
* 修改历史:
* 时间 作者 版本 描述
* ------------------------------------------------------------------
* 2011-4-14 邓丽霞 1.0 1.0 Version
*/
package com.mogoo.launcher2.restore;
import com.mogoo.launcher2.CellLayout;
import com.mogoo.launcher2.LauncherApplication;
import com.mogoo.launcher2.LauncherModel;
import com.mogoo.launcher2.LauncherSettings;
import com.mogoo.launcher2.Mogoo_FolderInfo;
import com.mogoo.launcher2.config.Mogoo_GlobalConfig;
import com.mogoo.launcher2.utils.Mogoo_Utilities;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.util.Log;
import java.util.HashMap;
import java.util.Iterator;
public class Mogoo_BootRestorePolicyImpl implements Mogoo_RestorePlolicy{
private static final String TAG = "Mogoo_BootRestorePolicyImpl";
public void runPlolicy(Context context) {
// TODO Auto-generated method stub
if(Mogoo_GlobalConfig.LOG_DEBUG)
{
Log.d(TAG, "Mogoo_BootRestorePolicyImpl : runPlolicy");
}
LauncherApplication app = (LauncherApplication)context.getApplicationContext();
LauncherModel laucherModel = app.getModel();
//添加launcher数据库里没有的应用程序到数据库中
laucherModel.addInDbForNotAddToDesk();
folderErrorExecute(context);
}
private void folderErrorExecute(Context context) {
final ContentResolver contentResolver = context.getContentResolver();
//比对文件夹错误部分
Cursor c = null;
try {
c = contentResolver.query(LauncherSettings.Favorites.CONTENT_URI, null,
" container > 0 or itemType = 5", null, null);
HashMap<Long, Integer> folderMap = new HashMap<Long, Integer>();
HashMap<Long, Integer> itemMap = new HashMap<Long, Integer>();
final int idIndex = c.getColumnIndexOrThrow(LauncherSettings.Favorites._ID);
final int containerIndex = c
.getColumnIndexOrThrow(LauncherSettings.Favorites.CONTAINER);
final int itemTypeIndex = c.getColumnIndexOrThrow(LauncherSettings.Favorites.ITEM_TYPE);
long id = -1;
int container = -1;
int itemType = -1;
while (c.moveToNext()) {
id = c.getLong(idIndex);
itemType = c.getInt(itemTypeIndex);
container = c.getInt(containerIndex);
// 文件夹处理部分
if (itemType == LauncherSettings.Favorites.ITEM_TYPE_MOGOO_FOLDER) {
folderMap.put(id, 0);
}
// 图标处理部分
else if (container > 0) {
itemMap.put(id, container);
}
}
redundancyFolderExecute(contentResolver, folderMap, itemMap);
lostFolderExecute(context, folderMap, itemMap);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (c != null) {
c.close();
}
}
}
/**
*
* 缺失文件夹处理
* @ author: 黄悦
*@param contentResolver
*@param folderMap
*@param itemMap
*/
private void lostFolderExecute(Context context, HashMap<Long, Integer> folderMap, HashMap<Long, Integer> itemMap){
HashMap<Integer, Mogoo_FolderInfo> idMapping = new HashMap<Integer, Mogoo_FolderInfo>();
Iterator<Long> itr = itemMap.keySet().iterator();
Mogoo_FolderInfo folderIndo = null;
while(itr.hasNext()){
Long itemId = itr.next();
Integer container = itemMap.get(itemId);
if(!folderMap.containsKey(container.longValue())){
if(idMapping.containsKey(container)){
folderIndo = idMapping.get(container);
}else{
folderIndo = createFolderInfo(context);
idMapping.put(container, folderIndo);
}
updateContainer(context, itemId, container);
}
}
}
/**
*
* 刷新容器id
* @ author: 黄悦
*@param context
*@param id
*@param container
*/
private void updateContainer(Context context, long id, int container) {
final ContentValues values = new ContentValues();
final ContentResolver cr = context.getContentResolver();
values.put(LauncherSettings.Favorites.CONTAINER, container);
cr.update(LauncherSettings.Favorites.getContentUri(id, false), values, null, null);
}
/**
*
* 创建新的的文件夹容器
* @ author: 黄悦
*@return
*/
private Mogoo_FolderInfo createFolderInfo(Context context){
Mogoo_FolderInfo folderInfo = new Mogoo_FolderInfo();
int[] shortcutScreen = Mogoo_GlobalConfig.getShortcutScreen();
for (int i : shortcutScreen) {
final int[] coordinates; // 存放找出的空位坐标
if ((coordinates = CellLayout.findBlackCell(context.getApplicationContext(), i)) != null) {
folderInfo.cellX = coordinates[0];
folderInfo.cellY = coordinates[1];
folderInfo.screen = i;
folderInfo.appType = LauncherSettings.Favorites.APP_TYPE_OTHER ;
folderInfo.container = LauncherSettings.Favorites.CONTAINER_DESKTOP ;
folderInfo.isSystem = LauncherSettings.Favorites.NOT_SYSTEM_APP ;
folderInfo.title = "New folder" ;
LauncherModel.addItemToDatabase(context, folderInfo, folderInfo.container, folderInfo.screen, folderInfo.cellX, folderInfo.cellY, false) ;
folderInfo.intent = Mogoo_Utilities.generateMtFolderIntent(folderInfo.id) ;
LauncherModel.updateItemInDatabase(context, folderInfo);
break;
}
}
return folderInfo;
}
/**
*
* 处理冗余的文件夹
* @ author: 黄悦
*@param folderMap
*@param itemMap
*/
private void redundancyFolderExecute(ContentResolver contentResolver, HashMap<Long, Integer> folderMap, HashMap<Long, Integer> itemMap){
Iterator<Long> itr = folderMap.keySet().iterator();
while(itr.hasNext()){
Long id = itr.next();
if(id == null){
continue;
}
if(!itemMap.containsValue(id.intValue())){
contentResolver.delete(LauncherSettings.Favorites.getContentUri(id, false), null, null);
}
}
}
}