From 99a93c2f9fc2888be412b58766eebbe1cbed4cc1 Mon Sep 17 00:00:00 2001 From: xyz Date: Tue, 24 Dec 2024 18:16:18 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=8CFix=20Skin=E3=80=8D=201=E3=80=81?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=9A=AE=E8=82=A4=E5=8C=85=E5=A4=9A=E6=AC=A1?= =?UTF-8?q?=E4=B8=8B=E8=BD=BD=E5=90=8C=E4=B8=80=E4=B8=AA=E7=9A=AE=E8=82=A4?= =?UTF-8?q?=E5=8C=85=E5=AF=BC=E8=87=B4=E4=B8=8B=E8=BD=BD=E7=9A=84=E4=BA=A7?= =?UTF-8?q?=E7=89=A9=E4=B8=8E=E4=BA=91=E7=AB=AF=E4=BA=A7=E7=89=A9md5?= =?UTF-8?q?=E4=B8=8D=E4=B8=80=E8=87=B4=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/mogo/skin/SkinManager.java | 19 +++++--- .../java/com/mogo/skin/utils/FileUtils.java | 43 +++++++++++++++++++ 2 files changed, 57 insertions(+), 5 deletions(-) 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