From cb397d919abf577ee66c4bbcfa8362c0b2e75c83 Mon Sep 17 00:00:00 2001 From: donghongyu Date: Fri, 25 Oct 2024 17:47:31 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=8CUpdate=E3=80=8D=201=E3=80=81=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0isUseSkin=E5=B1=9E=E6=80=A7=EF=BC=8C=E6=9D=A5=E9=92=88?= =?UTF-8?q?=E5=AF=B9=E6=80=A7=E7=9A=84=E5=BC=80=E5=90=AF=E6=8D=A2=E8=82=A4?= =?UTF-8?q?=EF=BC=8C=E9=98=B2=E6=AD=A2=E5=A4=A7=E9=9D=A2=E7=A7=AF=E8=AF=AF?= =?UTF-8?q?=E4=BC=A4=E5=85=B6=E5=AE=83View=E3=80=82=E5=8E=9F=E5=9B=A0?= =?UTF-8?q?=E6=98=AF=E5=BE=88=E5=A4=9A=E6=95=B0=E6=8D=AE=E3=80=81=E5=9B=BE?= =?UTF-8?q?=E7=89=87=E9=83=BD=E6=98=AF=E5=8A=A8=E6=80=81=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E7=9A=84=E3=80=82=E4=BC=9A=E6=8A=8A=E8=AE=BE=E7=BD=AE=E7=9A=84?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=86=B2=E6=8E=89=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/mogo/cloud/MainActivity.java | 12 ++++++--- app/src/main/res/layout/activity_main.xml | 7 ++++-- gradle.properties | 2 +- .../java/com/mogo/skin/SkinAttribute.java | 25 +++++++++++++------ .../main/java/com/mogo/skin/SkinManager.java | 7 +++--- .../java/com/mogo/skin/utils/FileUtils.java | 4 +++ .../mogo-skin/src/main/res/values/attrs.xml | 4 ++- 7 files changed, 43 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/mogo/cloud/MainActivity.java b/app/src/main/java/com/mogo/cloud/MainActivity.java index 8d3d7b6..b1690e3 100644 --- a/app/src/main/java/com/mogo/cloud/MainActivity.java +++ b/app/src/main/java/com/mogo/cloud/MainActivity.java @@ -86,11 +86,17 @@ public class MainActivity extends AppCompatActivity { Skin skin; if (isCheck) { skin = new Skin( - "88a7b397d6a03966aa332aea17f5210a", - "YiXin-skin_v1_2024_10_24.apk", - "https://carlife-static-1255510688.cos.ap-beijing.myqcloud.com/MoGoEagleEye/YiXin-skin_v1_2024_10_24.apk" + "ee3e1b0ed6e33a51366949294b07787d", + "YiXin-skin_v1_2024_10_25.zip", + "https://carlife-static-1255510688.cos.ap-beijing.myqcloud.com/MoGoEagleEye/YiXin-skin_v1_2024_10_25.zip" ); +// skin = new Skin( +// "a841e8819f06cfefa646f7adc697e070", +// "DeQing-skin_v1_2024_10_25.apk", +// "https://carlife-static-1255510688.cos.ap-beijing.myqcloud.com/MoGoEagleEye/DeQing-skin_v1_2024_10_25.apk" +// ); + //换肤 SkinManager.getInstance().downloadSkin(this, skin, new SkinManager.SkinLoadListener() { @Override diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 0f1ca52..0d6cdbc 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,5 +1,6 @@ + android:background="@drawable/icon_notice_default" + app:isUseSkin="true"> + android:src="@drawable/icon_notice_default" + app:isUseSkin="true" /> diff --git a/gradle.properties b/gradle.properties index 2c369b3..be3f94d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -58,4 +58,4 @@ MOGO_TELEMATIC_VERSION=1.4.7.42 # v2x MOGO_V2X_VERSION=1.4.7.42 # SKIN -MOGO_SKIN_VERSION=1.4.7.49.14-debug +MOGO_SKIN_VERSION=1.4.7.49.18-debug diff --git a/libraries/mogo-skin/src/main/java/com/mogo/skin/SkinAttribute.java b/libraries/mogo-skin/src/main/java/com/mogo/skin/SkinAttribute.java index e5c13ff..473b5ee 100644 --- a/libraries/mogo-skin/src/main/java/com/mogo/skin/SkinAttribute.java +++ b/libraries/mogo-skin/src/main/java/com/mogo/skin/SkinAttribute.java @@ -1,8 +1,8 @@ package com.mogo.skin; import android.util.AttributeSet; +import android.util.Log; import android.view.View; -import android.widget.TextView; import com.mogo.skin.utils.SkinThemeUtils; @@ -30,6 +30,8 @@ public class SkinAttribute { mAttributes.add("skinTypeface"); + mAttributes.add("isUseSkin"); + mAttributes.add("text"); mAttributes.add("hint"); } @@ -48,14 +50,18 @@ public class SkinAttribute { * 记录View中哪几个属性需要换肤,找到当前页面的所有属性 */ public void load(View view, AttributeSet attrs) { + // 记录View是否配置了isUseSkin属性 + boolean isUseSkin = false; List skinPairs = new ArrayList<>(); for (int i = 0; i < attrs.getAttributeCount(); i++) { //获得属性名 String attributeName = attrs.getAttributeName(i); // 筛选配置了换肤属性的View,防止因为换肤导致。动态控制了状态的View被还原的问题; - + if (attributeName.equals("isUseSkin")) { + isUseSkin = true; + } //是否符合 需要筛选的属性名 - if (mAttributes.contains(attributeName)) { + else if (mAttributes.contains(attributeName)) { //属性名写法 //#ffff //?attr/xxx @@ -95,11 +101,14 @@ public class SkinAttribute { } //将View与之对应的可以动态替换的属性集合 放入 集合中 - if (!skinPairs.isEmpty() || view instanceof TextView || view instanceof SkinViewSupport) { - //选择皮肤 更新 - SkinView skinView = new SkinView(view, skinPairs); - skinView.applySkin(); - mSkinViews.add(skinView); + if (isUseSkin) { + Log.d(TAG, "View 开启了换肤……isUseSkin"); + if (!skinPairs.isEmpty() || view instanceof SkinViewSupport) { + //选择皮肤 更新 + SkinView skinView = new SkinView(view, skinPairs); + skinView.applySkin(); + mSkinViews.add(skinView); + } } } 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 12d966b..1c728f4 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 @@ -180,7 +180,8 @@ public class SkinManager extends Observable { //下载成功,将皮肤包信息insert已下载数据库 Log.e(TAG, "DownloadManager 皮肤包下载完成开始校验"); //皮肤包的md5校验 防止下载文件损坏(但是会减慢速度。从数据库查询已下载皮肤表数据库中保留md5字段) - if (TextUtils.equals(SkinUtils.getSkinMD5(skinFile), skin.md5)) { + String localSkinFileMd5 = SkinUtils.getSkinMD5(skinFile); + if (TextUtils.equals(localSkinFileMd5, skin.md5)) { Log.d(TAG, "DownloadManager 校验成功,修改文件名。"); // 加载指定皮肤包 SkinManager.getInstance().loadSkin(skin.getPathLocal()); @@ -191,8 +192,8 @@ public class SkinManager extends Observable { } else { // 回调给使用方成功 skinLoadListener.onLoadFailed(new Exception("皮肤文件校验出错,本地文件MD5 与云端文件MD5 不一致。")); - Log.e(TAG, "DownloadManager 皮肤文件校验出错,本地文件MD5 与云端文件MD5 不一致。"); - Toast.makeText(mApplication, "皮肤文件校验出错,本地文件MD5 与云端文件MD5 不一致。", Toast.LENGTH_SHORT).show(); + Log.e(TAG, "DownloadManager 皮肤文件校验出错,本地文件 MD5 = " + localSkinFileMd5 + " 与云端文件 MD5 = " + skin.md5 + " 不一致。"); + Toast.makeText(mApplication, "皮肤文件校验出错,本地文件 MD5 = " + localSkinFileMd5 + " 与云端文件 MD5 = " + skin.md5 + " 不一致。", Toast.LENGTH_LONG).show(); // TODO 删除本地皮肤文件,并重新下载(这个操作比较危险,需要严格保证配置文件中的md5与实际皮肤包一致,否则将是灾难) } } catch (Exception e) { 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 70bab5a..75d14bd 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 @@ -8,6 +8,7 @@ import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.lang.reflect.Field; +import java.util.Arrays; public class FileUtils { private static final String TAG = "FileUtils"; @@ -48,9 +49,11 @@ public class FileUtils { * @param fields 获取raw文件夹的资源ID */ public static void copyVideoRawToFile(Context context, Field[] fields) { + Log.i(TAG, "File copyVideoRawToFile " + Arrays.toString(fields)); for (Field field : fields) {// 将资源文件的名称添加到列表中 // 过滤名称带有Video的Raw文件到指定目录 if (field.getName().startsWith("video_")) { + Log.i(TAG, "File copyVideoRawToFile field = " + field.getName()); copyVideoRawToFile(SkinResources.getInstance().getIdentifier(field.getName(), "raw"), getExternalAppDirectory(context).getAbsolutePath() + "/raw/"); } @@ -72,6 +75,7 @@ public class FileUtils { // 创建目标文件夹 File targetDirectory = new File(targetPath); if (!targetDirectory.exists()) { + Log.i(TAG, "File mkdirs path = " + targetDirectory); targetDirectory.mkdirs(); } diff --git a/libraries/mogo-skin/src/main/res/values/attrs.xml b/libraries/mogo-skin/src/main/res/values/attrs.xml index 85f1f3e..e5ca8ce 100644 --- a/libraries/mogo-skin/src/main/res/values/attrs.xml +++ b/libraries/mogo-skin/src/main/res/values/attrs.xml @@ -1,4 +1,6 @@ - + + + \ No newline at end of file