diff --git a/libraries/mogo-skin/src/main/java/com/mogo/skin/SkinManager.java b/libraries/mogo-skin/src/main/java/com/mogo/skin/SkinManager.java index 43e43f4..9569cb1 100644 --- a/libraries/mogo-skin/src/main/java/com/mogo/skin/SkinManager.java +++ b/libraries/mogo-skin/src/main/java/com/mogo/skin/SkinManager.java @@ -144,13 +144,22 @@ public class SkinManager extends Observable { public void downloadSkin(Context context, Skin skin, SkinLoadListener skinLoadListener) { File theme = new File(FileUtils.getExternalAppDirectory(context), "theme"); if (theme.exists() && theme.isFile()) { + Log.w(TAG, "皮肤包 目录已存在,但是文件类型,删除。"); theme.delete(); + theme.mkdirs(); } - theme.mkdirs(); + if (!theme.exists()) { + Log.w(TAG, "皮肤包 存储目录不存在,创建 " + theme.getAbsolutePath()); + theme.mkdirs(); + } + + // 打印文件夹内的文件 + FileUtils.listFilesForFolder(theme); + // 获取皮肤插件文件对象 File skinFile = skin.getSkinFile(theme); // 判断是否存在 - if (skinFile.exists()) { + if (FileUtils.fileIsExists(theme, skin.getSkinFileName())) { // 检验皮肤包完整性,即MD5是否一致,不一致则删除 String localSkinFileMd5 = SkinUtils.getSkinMD5(skinFile); if (!TextUtils.equals(localSkinFileMd5, skin.md5)) { @@ -188,7 +197,7 @@ public class SkinManager extends Observable { //皮肤包的md5校验 防止下载文件损坏(但是会减慢速度。从数据库查询已下载皮肤表数据库中保留md5字段) String localSkinFileMd5 = SkinUtils.getSkinMD5(skinFile); if (TextUtils.equals(localSkinFileMd5, skin.md5)) { - Log.d(TAG, "皮肤包 MD5 校验成功,本地文件 MD5 = " + localSkinFileMd5 + " 与云端文件 MD5 = " + skin.md5 + " 删除其它皮肤包。"); + Log.d(TAG, "皮肤包 MD5 校验成功,本地文件 MD5 = " + localSkinFileMd5 + " 与云端文件 MD5 = " + skin.md5 + " ,删除其它皮肤包。"); // 加载指定皮肤包 SkinManager.getInstance().loadSkin(skin.getPathLocal()); // 校验文件签名没问题后删除其他主题 @@ -196,8 +205,8 @@ public class SkinManager extends Observable { // 回调给使用方成功 skinLoadListener.onLoadSuccess(); } else { - Log.e(TAG, "皮肤包 皮肤文件 MD5校验出错, 本地文件 MD5 = " + localSkinFileMd5 + " 与云端文件 MD5 = " + skin.md5 + " 不一致。"); - Toast.makeText(mApplication, "皮肤文件校验出错,本地文件 MD5 = " + localSkinFileMd5 + " 与云端文件 MD5 = " + skin.md5 + " 不一致。", Toast.LENGTH_LONG).show(); + Log.e(TAG, "皮肤包 皮肤文件 MD5校验出错, 本地文件 MD5 = " + localSkinFileMd5 + " 与云端文件 MD5 = " + skin.md5 + " 不一致,删除皮肤包。"); + Toast.makeText(mApplication, "皮肤文件校验出错,本地文件 MD5 = " + localSkinFileMd5 + " 与云端文件 MD5 = " + skin.md5 + " 不一致,删除皮肤包。", Toast.LENGTH_LONG).show(); // TODO 删除本地皮肤文件,并重新下载(这个操作比较危险,需要严格保证配置文件中的md5与实际皮肤包一致,否则将是灾难) skinFile.delete(); diff --git a/libraries/mogo-skin/src/main/java/com/mogo/skin/utils/FileUtils.java b/libraries/mogo-skin/src/main/java/com/mogo/skin/utils/FileUtils.java index 75d14bd..432d71a 100644 --- a/libraries/mogo-skin/src/main/java/com/mogo/skin/utils/FileUtils.java +++ b/libraries/mogo-skin/src/main/java/com/mogo/skin/utils/FileUtils.java @@ -103,4 +103,47 @@ public class FileUtils { return false; } } + + /** + * 递归打印文件夹内的文件 + * + * @param folder + */ + public static void listFilesForFolder(final File folder) { + for (final File fileEntry : folder.listFiles()) { + if (fileEntry.isDirectory()) { + // 如果是目录,则递归调用本方法 + listFilesForFolder(fileEntry); + } else { + // 如果是文件,则打印文件名 + Log.d(TAG, "递归打印文件夹内的文件:" + fileEntry.getAbsolutePath()); + } + } + } + + + /** + * 递归查询指定文件是否存在 + * + * @param folder + * @param fileName + */ + public static boolean fileIsExists(final File folder, final String fileName) { + for (final File fileEntry : folder.listFiles()) { + if (fileEntry.isDirectory()) { + // 如果是目录,则递归调用本方法 + listFilesForFolder(fileEntry); + } else { + if (fileEntry.getName().equals(fileName)) { + // 如果是文件,则打印文件名 + Log.w(TAG, "递归查询指定文件是否存在:已存在," + fileEntry.getAbsolutePath()); + return true; + } + } + } + Log.w(TAG, "递归查询指定文件是否存在:不存在!fileName = " + fileName); + return false; + } + + } \ No newline at end of file