diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml index 257e287..6049e58 100644 --- a/.idea/deploymentTargetDropDown.xml +++ b/.idea/deploymentTargetDropDown.xml @@ -1,17 +1,17 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> <component name="deploymentTargetDropDown"> - <targetSelectedWithDropDown> + <runningDeviceTargetSelectedWithDropDown> <Target> - <type value="QUICK_BOOT_TARGET" /> + <type value="RUNNING_DEVICE_TARGET" /> <deviceKey> <Key> - <type value="VIRTUAL_DEVICE_PATH" /> - <value value="C:\Users\moli\.android\avd\11.avd" /> + <type value="SERIAL_NUMBER" /> + <value value="127.0.0.1:59865" /> </Key> </deviceKey> </Target> - </targetSelectedWithDropDown> - <timeTargetWasSelectedWithDropDown value="2023-01-02T12:00:59.533203600Z" /> + </runningDeviceTargetSelectedWithDropDown> + <timeTargetWasSelectedWithDropDown value="2023-01-03T15:45:50.203855400Z" /> </component> </project> \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index af15c2f..f3da68e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ android { applicationId "com.molihua.hlbmerge" minSdk 21 targetSdk 33 - versionCode 42 - versionName "1.6.3 beta" + versionCode 44 + versionName "1.6.4beta" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -57,6 +57,11 @@ dependencies { implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.github.bumptech.glide:glide:4.12.0' //XUI + //友盟依赖 + implementation 'com.umeng.umsdk:common:9.5.4'// (必选) + implementation 'com.umeng.umsdk:asms:1.6.3'// 必选 + implementation 'com.umeng.umsdk:apm:1.8.0'// U-APM产品包依赖(必选) + implementation 'androidx.appcompat:appcompat:1.4.1' implementation 'com.google.android.material:material:1.5.0' diff --git a/app/release/1.6.3 beta.apk b/app/release/app-release.apk similarity index 82% rename from app/release/1.6.3 beta.apk rename to app/release/app-release.apk index e29548f..ed3600e 100644 Binary files a/app/release/1.6.3 beta.apk and b/app/release/app-release.apk differ diff --git a/app/release/output-metadata.json b/app/release/output-metadata.json index 536c35a..0aa538f 100644 --- a/app/release/output-metadata.json +++ b/app/release/output-metadata.json @@ -11,8 +11,8 @@ "type": "SINGLE", "filters": [], "attributes": [], - "versionCode": 42, - "versionName": "1.6.3 beta", + "versionCode": 44, + "versionName": "1.6.4beta", "outputFile": "app-release.apk" } ], diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 54a8e6a..4c019d6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -22,6 +22,15 @@ <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> + <intent-filter> + <action android:name="android.intent.action.VIEW" /> + + <category android:name="android.intent.category.DEFAULT" /> + <category android:name="android.intent.category.BROWSABLE" /> + + <data android:scheme="um.63b302eed64e6861390b324f" /> + </intent-filter> + <meta-data android:name="android.app.lib_name" android:value="" /> diff --git a/app/src/main/assets/openSourceLicense.html b/app/src/main/assets/openSourceLicense.html index c10cb5a..057f61b 100644 --- a/app/src/main/assets/openSourceLicense.html +++ b/app/src/main/assets/openSourceLicense.html @@ -44,6 +44,12 @@ <h3><span>DKVideoPlayer</span></h3> <a href="https://github.com/Doikki/DKVideoPlayer">https://github.com/Doikki/DKVideoPlayer</a> </p> + <h3><span>XUpdate</span></h3> + <p> + <span>项目地址:</span> + <a href="https://github.com/xuexiangjys/XUpdate">https://github.com/xuexiangjys/XUpdate</a> + </p> + </div> </body> </html> diff --git a/app/src/main/assets/privacy.html b/app/src/main/assets/privacy.html index 96ef9ad..67b363d 100644 --- a/app/src/main/assets/privacy.html +++ b/app/src/main/assets/privacy.html @@ -1,19 +1,21 @@ <!DOCTYPE html> <!-- saved from url=(0036)http://www.moji.com/about/agreement/ --> -<html><head> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> -<title>隐私政策</title> -<meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1.0, maximum-scale=1.0"> -<meta content="yes" name="apple-mobile-web-app-capable"> -<meta content="yes" name="apple-touch-fullscreen"> -<meta name="baidu-site-verification" content="fmADvr1NSK"> -<meta name="description" content="隐私政策"> -<meta name="keywords" content="隐私政策"> -<link rel="shortcut icon" href="https://www.ntcyan.com/favicon.ico"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>隐私政策</title> + <meta name="viewport" + content="user-scalable=no, width=device-width, initial-scale=1.0, maximum-scale=1.0"> + <meta content="yes" name="apple-mobile-web-app-capable"> + <meta content="yes" name="apple-touch-fullscreen"> + <meta name="baidu-site-verification" content="fmADvr1NSK"> + <meta name="description" content="隐私政策"> + <meta name="keywords" content="隐私政策"> + <link rel="shortcut icon" href="https://www.ntcyan.com/favicon.ico"> -<!--[if It IE 9]> -<script type="text/javascript" src="/templets/mojichina/js/html5shiv.js"></script> -<![endif]--> + <!--[if It IE 9]> + <script type="text/javascript" src="/templets/mojichina/js/html5shiv.js"></script> + <![endif]--> <style type="text/css"> @media screen and (max-width: 640px){ @@ -49,44 +51,55 @@ } } + + + + + + </style> </head> <body class="second-page"> - <div class="main-box server-agreement"> - <div class="wrap"> - <div class="common-pannel"> - <h2>隐私政策</h2> - <div class="text"> - <p>开发者和他的小伙伴们(以下称"我们")隐私权保护声明保护用户个人隐私的承诺。鉴于移动产品的特性, "我们将无可避免地与您产生直接或间接的互动关系,故特此说明我们对用户个人信息所采取的收集、使用和保护政策,请您务必仔细阅读!</p> - <h3>更新日期</h3> - <p>2022 年 5 月 4 日</p> - <h3>个人信息的收集和使用</h3> - <p>个人信息是可用于唯一地识别或联系某人的数据。</p> - <p>你在使用此工具时,可能会要求提供你的个人信息。我们会严格按本隐私政策使用该信息。我们还可将此信息与其他信息合并在一起,用于提供和改进我们的产品、服务、内容。</p> - <p>下文是我们可能收集的个人信息的类型以及我们如何使用该信息的一些示例。</p> - <h3>我们使用何种权限</h3> - <p>当你下载并使用“HLB站缓存合并”时,我们会使用几种权限,包括你的存储权限、Android/data目录访问权限、设备信息等。</p> - <p>存储权限:用于合并数据的处理、包括创建文件、修改文件、复制文件、删除文件等操作;</p> - <p>Android/data目录访问权限:用于读取bilibili缓存数据;</p> - <p>设备信息:用于获取设备基本信息主要是崩溃信息用于分析和修复bug以改进工具,这部分信息由腾讯Bugly统计SDK获取,所以你必须遵守其隐私政策。</p> - <h3>我们如何使用你的个人信息</h3> - <p>我们使用个人信息帮助我们开发、交付和改进我们的产品、服务、内容。</p> - <p>我们会不时地使用你的个人信息以帮助开发者排查崩溃问题,帮助APP提升稳定性。由于此信息对你与 我们 之间的互动至关重要,你不能放弃接收此类沟通信息。</p> - <h3>第三方SDK</h3> - <p>我们可能会提供从我们的网站链接或连接到第三方网站或服务,对第三方网站的隐私做法或内容,我们不予负责。</p> - <p>腾讯BuglySDK</p> - <p>腾讯BuglySDK获取了设备品牌、型号、软件系统版本等等相关信息,用于帮助开发者排查崩溃问题,帮助APP提升稳定性</p> - <p>腾讯BuglySDK隐私政策地址:https://privacy.qq.com/document/preview/fc748b3d96224fdb825ea79e132c1a56</p> - <h3>隐私问题</h3> - <p>如果你对我们的隐私政策或数据处理有任何问题或顾虑,请联系我们(邮箱:1492906929@qq.com)。</p> - <p>我们可随时对隐私政策加以更新。我们保留对其的最终解释权。</p> - </div> - +<div class="main-box server-agreement"> + <div class="wrap"> + <div class="common-pannel"> + <h2>隐私政策</h2> + <div class="text"> + <p>开发者和他的小伙伴们(以下称"我们")隐私权保护声明保护用户个人隐私的承诺。鉴于移动产品的特性, + "我们将无可避免地与您产生直接或间接的互动关系,故特此说明我们对用户个人信息所采取的收集、使用和保护政策,请您务必仔细阅读!</p> + <h3>更新日期</h3> + <p>2022 年 5 月 4 日</p> + <h3>个人信息的收集和使用</h3> + <p>个人信息是可用于唯一地识别或联系某人的数据。</p> + <p> + 你在使用此工具时,可能会要求提供你的个人信息。我们会严格按本隐私政策使用该信息。我们还可将此信息与其他信息合并在一起,用于提供和改进我们的产品、服务、内容。</p> + <p>下文是我们可能收集的个人信息的类型以及我们如何使用该信息的一些示例。</p> + <h3>我们使用何种权限</h3> + <p>当你下载并使用“HLB站缓存合并”时,我们会使用几种权限,包括你的存储权限、Android/data目录访问权限、设备信息等。</p> + <p>存储权限:用于合并数据的处理、包括创建文件、修改文件、复制文件、删除文件等操作;</p> + <p>Android/data目录访问权限:用于读取bilibili缓存数据;</p> + <p>设备信息:用于获取设备基本信息主要是崩溃信息用于分析和修复bug以改进工具,这部分信息由腾讯Bugly统计SDK获取,所以你必须遵守其隐私政策。</p> + <h3>我们如何使用你的个人信息</h3> + <p>我们使用个人信息帮助我们开发、交付和改进我们的产品、服务、内容。</p> + <p>我们会不时地使用你的个人信息以帮助开发者排查崩溃问题,帮助APP提升稳定性。由于此信息对你与 我们 之间的互动至关重要,你不能放弃接收此类沟通信息。</p> + <h3>第三方SDK</h3> + <p>我们可能会提供从我们的网站链接或连接到第三方网站或服务,对第三方网站的隐私做法或内容,我们不予负责。</p> + <p>友盟SDK</p> + <p>友盟SDK统计分析,收集个人信息类型:设备信息(IMEI/MAC/Android ID/IDFA/OpenUDID/GUID/IP地址/SIM 卡 IMSI + 信息等),用于帮助开发者排查崩溃问题,提升APP稳定性</p> + <p> + 友盟SDK隐私权政策链接:https://www.umeng.com/page/policy + </p> + <h3>隐私问题</h3> + <p>如果你对我们的隐私政策或数据处理有任何问题或顾虑,请联系我们(邮箱:1492906929@qq.com)。</p> + <p>我们可随时对隐私政策加以更新。我们保留对其的最终解释权。</p> </div> + </div> </div> +</div> - <footer class="footer clearfix"> +<footer class="footer clearfix"> <div class="copyright" id="cr"> <p>Copyright © 2019-2023molihuan All Right Reserved </p> </div> @@ -94,4 +107,5 @@ <h3>隐私问题</h3> </footer> -</body></html> \ No newline at end of file +</body> +</html> \ No newline at end of file diff --git a/app/src/main/assets/statement.txt b/app/src/main/assets/statement.txt index 9377cbd..59324b4 100644 --- a/app/src/main/assets/statement.txt +++ b/app/src/main/assets/statement.txt @@ -1,13 +1,14 @@ - 本《声明》包括:特别鸣谢和《软件协议》。 + 本协议包括:特别鸣谢和《软件协议》。 一、特别鸣谢 为本软件开发提供重要帮助的开源项目以及其依赖项目和用户: 【ffmpeg开源项目】:此软件是基于ffmpeg进行开发的。 【RxFFmpeg开源项目】:感谢microshow提供的ffmpeg开源解决方案。 【CSDN】:作者从网站上查找了大量的资料,解决了许多的问题。 【云注入】:感谢云注入曾经提供的网络弹窗技术支持。(现已不用) - 【Bugly】:感谢腾讯提供的技术服务。 + 【Bugly】:感谢腾讯曾经提供的技术服务。(现已不用) 【MMKV】:感谢腾讯提供的开源项目。 - 【XUI】:感谢xuexiangjys提供的开源UI框架。 + 【友盟】:感谢友盟提供的技术服务。 + 【XUI】【XUpdate】:感谢xuexiangjys提供的开源UI框架、版本更新框架。 【XXPermissions】【EasyHttp】:感谢getActivity提供的开源权限请求和网络框架。 【AndroidUtilCode】:感谢Blankj提供的开源utils。 【DanmakuFlameMaster】:感谢bilibili提供的开源项目。 @@ -46,7 +47,7 @@ 【@娜】:设计软件图标,提供部分图片资源。 【@bilibili官方】:部分小图标资源。 等等(还有很多朋友,篇幅有限) - 《软件协议》描述我们与您之间关于本软件许可使用及相关方面的权利义务。请您务必审慎阅读、充分理解各条款内容,以及知晓隐私政策,并选择接受或不接受(未成年人应在法定监护人陪同下审阅)。除非您接受本《软件协议》条款,否则您无权下载、安装或使用本软件及其相关服务。您的安装、使用行为将视为对本《协议》的接受,并同意接受本《协议》各项条款的约束。 + 《软件协议》描述我们与您之间关于本软件许可使用及相关方面的权利义务。请您务必审慎阅读、充分理解各条款内容,以及知晓隐私政策,并选择接受或不接受(未成年人应在法定监护人陪同下审阅)。除非您接受本《软件协议》条款,否则您无权下载、安装或使用本软件及其相关服务。您的安装、使用行为将视为对本协议的接受,并同意接受本协议各项条款的约束。 二、《软件协议》 【关于本软件】此软件是由我们开发的一款将B站缓存进行合并的小工具,这里的"我们"是指所有直接或间接参与软件开发的人员以及测试和反馈Bug的网友、提供资源的朋友同学、此项目依赖或间接依赖的项目。感谢你们的帮助和陪伴。 @@ -56,8 +57,9 @@ 【法律责任与免责】 (1)本软件仅用于学习和技术交流,严禁用于商业用途!严禁用于商业用途!严禁用于商业用途!造成的损失原作者不承担任何责任。 (2)可以进行二次修改,但不可删除本软件及其副本上关于原作者著作权的信息,二次修改后的软件造成您的损失原作者不承担任何责任。 - (3)如此软件侵犯到您的权益请联系邮箱:1492906929@qq.com,我们会进行处理,给您带来不便我深感抱歉。 - (4)在使用本软件前您必须知晓本软件的软件协议和隐私条款,并选择接受或不接受,当您的安装、使用行为将视为对软件协议和隐私条款的接受,并同意接受软件协议和隐私条款的各项条款的约束。 + (3)如此软件侵犯到您的权益请联系邮箱:1492906929@qq.com,我们会进行处理,给您带来不便我们深感抱歉。 + (4)我们深知个人信息对你的重要性,也感谢你对我们的信任,为了更好地保护你的权益,同时遵守相关监管的要求,我们通过左下角的隐私政策向你说明我们会如何收集、存储、保护、使用及对外提供你的信息。请务必仔细阅读。 + (5)在使用本软件前您必须知晓本软件的软件协议和隐私条款,并选择接受或不接受,当您的安装、使用行为将视为对软件协议和隐私条款的接受,并同意接受软件协议和隐私条款的各项条款的约束。 【其他条款】 (1)电子文本形式的授权协议和其附属的隐私政策如同双方书面签署的协议一样,具有完全的和等同的法律效力。您使用本软件或本服务即视为您已阅读并同意受本协议的约束。协议许可范围以外的行为,将直接违反本授权协议并构成侵权,我们有权随时终止授权,责令停止损害,并保留追究相关责任的权力。 (2)我们有权在必要时修改本协议条款。您可以在本软件的最新版本中查阅相关协议条款。本协议条款变更后,如果您继续使用本软件,即视为您已接受修改后的协议。如果您不接受修改后的协议,应当停止使用本软件。 diff --git a/app/src/main/java/com/molihua/hlbmerge/App.java b/app/src/main/java/com/molihua/hlbmerge/App.java index b14d779..d2d4ffb 100644 --- a/app/src/main/java/com/molihua/hlbmerge/App.java +++ b/app/src/main/java/com/molihua/hlbmerge/App.java @@ -5,6 +5,9 @@ import android.widget.Toast; import com.molihua.hlbmerge.dao.ConfigData; +import com.molihua.hlbmerge.utils.LConstants; +import com.molihua.hlbmerge.utils.UMTools; +import com.molihua.hlbmerge.utils.UpdataTools; import com.molihuan.pathselector.PathSelector; import com.molihuan.pathselector.configs.PathSelectorConfig; import com.molihuan.pathselector.utils.Mtools; @@ -36,11 +39,15 @@ public void onCreate() { //ffmpeg debug RxFFmpegInvoke.getInstance().setDebug(false); //路径选择器debug - PathSelector.setDebug(true); + PathSelector.setDebug(false); //取消自动申请权限 PathSelectorConfig.setAutoGetPermission(false); - + //XUpdate初始化 initXUpdate(); + //友盟预初始化 + UMTools.setDebug(false); + UMTools.setChannel(UMTools.CHANNEL_RELEASE); + UMTools.preInit(this); super.onCreate(); } @@ -56,12 +63,16 @@ private void initXUpdate() { .setOnUpdateFailureListener(new OnUpdateFailureListener() { //设置版本更新出错的监听 @Override public void onFailure(UpdateError error) { + int errorCode = error.getCode(); if (errorCode == UpdateError.ERROR.CHECK_NO_NEW_VERSION) { Mtools.toast("未发现新版本!"); } else { - Mtools.toast("更新失败!请自行进入下载:https://gitee.com/molihuan/BilibiliCacheVideoMergeAndroid", Toast.LENGTH_LONG); + Mtools.toast("更新失败!正在尝试使用备用链接 或 自行进入下载:" + LConstants.PROJECT_ADDRESS, Toast.LENGTH_LONG); + //启用备用检测更新 + UpdataTools.checkUpdataByGitlink(getApplicationContext()); } + } }) .supportSilentInstall(true) //设置是否支持静默安装,默认是true diff --git a/app/src/main/java/com/molihua/hlbmerge/activity/impl/AboutActivity.java b/app/src/main/java/com/molihua/hlbmerge/activity/impl/AboutActivity.java index 968a972..5bd74f6 100644 --- a/app/src/main/java/com/molihua/hlbmerge/activity/impl/AboutActivity.java +++ b/app/src/main/java/com/molihua/hlbmerge/activity/impl/AboutActivity.java @@ -11,6 +11,7 @@ import com.molihua.hlbmerge.utils.FragmentTools; import com.molihua.hlbmerge.utils.GeneralTools; import com.molihua.hlbmerge.utils.LConstants; +import com.molihua.hlbmerge.utils.UpdataTools; import com.xuexiang.xui.widget.grouplist.XUIGroupListView; import java.text.SimpleDateFormat; @@ -68,7 +69,7 @@ public void initView() { intent.putExtra("title", "开源许可"); startActivity(intent); }) - .addItemView(mAboutGroupListView.createItemView("检查更新"), v -> GeneralTools.checkUpdata()) + .addItemView(mAboutGroupListView.createItemView("检查更新"), v -> UpdataTools.limitClickCheckUpdata(this)) .addTo(mAboutGroupListView); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy", Locale.CHINA); diff --git a/app/src/main/java/com/molihua/hlbmerge/activity/impl/MainActivity.java b/app/src/main/java/com/molihua/hlbmerge/activity/impl/MainActivity.java index 97bc494..c9ab560 100644 --- a/app/src/main/java/com/molihua/hlbmerge/activity/impl/MainActivity.java +++ b/app/src/main/java/com/molihua/hlbmerge/activity/impl/MainActivity.java @@ -18,7 +18,6 @@ import com.molihua.hlbmerge.activity.AbstractMainActivity; import com.molihua.hlbmerge.adapter.CacheFileListAdapter; import com.molihua.hlbmerge.dao.ConfigData; -import com.molihua.hlbmerge.dialog.impl.StatementDialog; import com.molihua.hlbmerge.entity.CacheFile; import com.molihua.hlbmerge.fragment.AbstractMainFfmpegFragment; import com.molihua.hlbmerge.fragment.AbstractMainFileShowFragment; @@ -33,13 +32,14 @@ import com.molihua.hlbmerge.utils.FragmentTools; import com.molihua.hlbmerge.utils.GeneralTools; import com.molihua.hlbmerge.utils.LConstants; +import com.molihua.hlbmerge.utils.UMTools; +import com.molihua.hlbmerge.utils.UpdataTools; import com.molihuan.pathselector.fragment.impl.PathSelectFragment; import com.molihuan.pathselector.utils.FileTools; import com.molihuan.pathselector.utils.Mtools; import com.molihuan.pathselector.utils.PermissionsTools; +import com.umeng.analytics.MobclickAgent; import com.xuexiang.xui.adapter.FragmentAdapter; -import com.xuexiang.xui.widget.dialog.materialdialog.DialogAction; -import com.xuexiang.xui.widget.dialog.materialdialog.MaterialDialog; import com.xuexiang.xui.widget.searchview.MaterialSearchView; import java.util.List; @@ -79,20 +79,10 @@ public void getComponents() { @Override public void initData() { - - //是否同意用户协议 - if (ConfigData.isAgreeTerms()) { - //友盟初始化 - - } else { - StatementDialog.showStatementDialog(this, new StatementDialog.IButtonCallback() { - @Override - public void onClick(MaterialDialog dialog, DialogAction which) { - - } - }); - } - + //友盟初始化 + UMTools.init(this); + //自动周期检测更新 + UpdataTools.autoCheckUpdata(this); //存储权限的申请 PermissionsTools.generalPermissionsOfStorage(this, new OnPermissionCallback() { @Override @@ -186,9 +176,9 @@ public boolean onNavigationItemSelected(@NonNull MenuItem item) { intent.putExtra("title", "更新日志"); startActivity(intent); } else if (id == R.id.item_exitapp) { -// finish(); -// System.exit(0); - //EasyUpdate.checkUpdate(this, DEFAULT_UPDATE_URL); + MobclickAgent.onKillProcess(this); + finish(); + System.exit(0); } //侧滑菜单关闭 drawerLayout.closeDrawers(); @@ -225,6 +215,11 @@ public void onBackPressed() { super.onBackPressed(); } + @Override + protected void onDestroy() { + MobclickAgent.onKillProcess(this); + super.onDestroy(); + } @Override public void handleShowHide(boolean isShow) { diff --git a/app/src/main/java/com/molihua/hlbmerge/activity/impl/SettingsActivity.java b/app/src/main/java/com/molihua/hlbmerge/activity/impl/SettingsActivity.java index 40d90ea..b7d285e 100644 --- a/app/src/main/java/com/molihua/hlbmerge/activity/impl/SettingsActivity.java +++ b/app/src/main/java/com/molihua/hlbmerge/activity/impl/SettingsActivity.java @@ -5,11 +5,13 @@ import android.widget.RelativeLayout; import android.widget.TextView; +import com.blankj.molihuan.utilcode.util.TimeUtils; import com.molihua.hlbmerge.R; import com.molihua.hlbmerge.activity.BaseActivity; import com.molihua.hlbmerge.dao.ConfigData; import com.molihua.hlbmerge.fragment.impl.BackTitlebarFragment; import com.molihua.hlbmerge.utils.FragmentTools; +import com.molihua.hlbmerge.utils.UpdataTools; import com.molihuan.pathselector.PathSelector; import com.molihuan.pathselector.entity.FileBean; import com.molihuan.pathselector.entity.FontBean; @@ -35,6 +37,8 @@ public class SettingsActivity extends BaseActivity implements View.OnClickListen private RelativeLayout customOutputPathRela; private LinearLayout biliVersionLine; + private MaterialSpinner autoUpdataFrequencyMs; + @Override public int setContentViewID() { @@ -49,6 +53,7 @@ public void getComponents() { outputPathShowTv = findViewById(R.id.tv_output_path_show); customOutputPathRela = findViewById(R.id.rela_custom_output_path); biliVersionLine = findViewById(R.id.line_switch_bilibili_app_version); + autoUpdataFrequencyMs = findViewById(R.id.ms_auto_updata); } @Override @@ -58,10 +63,14 @@ public void initData() { @Override public void initView() { + //显示路径配置 String cacheFilePath = ConfigData.getCacheFilePath(); + int updateFrequency = ConfigData.getUpdateFrequency(); cachePathShowTv.setText(cacheFilePath); outputPathShowTv.setText(ConfigData.getOutputFilePath()); + autoUpdataFrequencyMs.setSelectedIndex(updateFrequency); + if (cacheFilePath.equals(MConstants.PATH_ANRROID_DATA + ConfigData.TYPE_CACHE_FILE_PATH_INTERNAL)) { biliVersionMs.setSelectedIndex(0); customCachePathRela.setAlpha(0.2f); @@ -114,6 +123,7 @@ public void setListeners() { customCachePathRela.setOnClickListener(this); customOutputPathRela.setOnClickListener(this); biliVersionMs.setOnItemSelectedListener(this); + autoUpdataFrequencyMs.setOnItemSelectedListener(this); } @Override @@ -210,6 +220,23 @@ public void onItemSelected(MaterialSpinner v, int position, long id, Object item customCachePathRela.setAlpha(0.2f); biliVersionLine.setAlpha(1f); + } else if (msid == R.id.ms_auto_updata) { + long nowMills = TimeUtils.getNowMills(); + long updateMills; + switch (position) { + case 0://一天 + updateMills = nowMills + UpdataTools.TIMESTAMP_DAY; + break; + case 2://一月 + updateMills = nowMills + UpdataTools.TIMESTAMP_MONTH; + break; + case 1://一周 + default: + updateMills = nowMills + UpdataTools.TIMESTAMP_WEEK; + } + ConfigData.setUpdateMills(updateMills); + ConfigData.setUpdateFrequency(position); + } } diff --git a/app/src/main/java/com/molihua/hlbmerge/dao/ConfigData.java b/app/src/main/java/com/molihua/hlbmerge/dao/ConfigData.java index 1c14f45..cb47e9e 100644 --- a/app/src/main/java/com/molihua/hlbmerge/dao/ConfigData.java +++ b/app/src/main/java/com/molihua/hlbmerge/dao/ConfigData.java @@ -1,6 +1,7 @@ package com.molihua.hlbmerge.dao; import com.blankj.molihuan.utilcode.util.AppUtils; +import com.blankj.molihuan.utilcode.util.TimeUtils; import com.molihuan.pathselector.utils.MConstants; import com.tencent.mmkv.MMKV; @@ -57,6 +58,12 @@ public class ConfigData { //弹幕速度 private int danmakuSpeed; + //更新日期毫秒时间戳(当前时间戳只有在这个时间戳后才会自动检测更新) + private long updateMills; + //自动检测更新频率(0:一天 1:一周 2:一月 3:永不) + private int updateFrequency; + + /** * 每当需要新增配置就 * 新增一个判断 @@ -83,6 +90,11 @@ public static void init() { setDanmakuSpeed(100); } + if (!kv.containsKey("updateMills")) { + setUpdateMills(TimeUtils.getNowMills()); + setUpdateFrequency(1); + } + } @@ -181,4 +193,24 @@ public static int getDanmakuSpeed() { public static boolean setDanmakuSpeed(int danmakuSpeed) { return kv.encode("danmakuSpeed", danmakuSpeed); } + + + public static long getUpdateMills() { + return kv.decodeLong("updateMills"); + } + + public static boolean setUpdateMills(long updateMills) { + return kv.encode("updateMills", updateMills); + } + + + public static int getUpdateFrequency() { + return kv.decodeInt("updateFrequency"); + } + + public static boolean setUpdateFrequency(int updateFrequency) { + return kv.encode("updateFrequency", updateFrequency); + } + + } diff --git a/app/src/main/java/com/molihua/hlbmerge/utils/GeneralTools.java b/app/src/main/java/com/molihua/hlbmerge/utils/GeneralTools.java index 2da7b14..34a8ce5 100644 --- a/app/src/main/java/com/molihua/hlbmerge/utils/GeneralTools.java +++ b/app/src/main/java/com/molihua/hlbmerge/utils/GeneralTools.java @@ -31,11 +31,5 @@ public static void jumpBrowser(Context context, String url) { } } - /** - * 检查更新 - */ - public static void checkUpdata() { - - } } diff --git a/app/src/main/java/com/molihua/hlbmerge/utils/LConstants.java b/app/src/main/java/com/molihua/hlbmerge/utils/LConstants.java index b36dcaa..6a6c215 100644 --- a/app/src/main/java/com/molihua/hlbmerge/utils/LConstants.java +++ b/app/src/main/java/com/molihua/hlbmerge/utils/LConstants.java @@ -18,10 +18,9 @@ public class LConstants { public static final String TAG_FRAGMENT_MAIN_HANDLE = "frameLayout_main_handle_area_mlh"; public static final String TAG_FRAGMENT_MAIN_FILE_SHOW = "frameLayout_main_file_show_area_mlh"; public static final String TAG_FRAGMENT_MAIN_FFMPEG = "frameLayout_main_ffmpeg_area_mlh"; - //************************** 更新url **************************** - //默认更新url(gitee) - public static final String DEFAULT_UPDATE_URL = "https://gitee.com/molihuan/BilibiliCacheVideoMergeAndroid/tree/master/jsonapi/update_release.json"; - //备份更新url(github) - public static final String BACKUPS_UPDATE_URL = "https://github.com/molihuan/BilibiliCacheVideoMerge/tree/master/jsonapi/update_release.json"; + + //本项目地址 + public static final String PROJECT_ADDRESS = "https://github.com/molihuan/BilibiliCacheVideoMerge"; + } diff --git a/app/src/main/java/com/molihua/hlbmerge/utils/UMTools.java b/app/src/main/java/com/molihua/hlbmerge/utils/UMTools.java new file mode 100644 index 0000000..2c51df9 --- /dev/null +++ b/app/src/main/java/com/molihua/hlbmerge/utils/UMTools.java @@ -0,0 +1,71 @@ +package com.molihua.hlbmerge.utils; + +import android.content.Context; + +import com.molihua.hlbmerge.dao.ConfigData; +import com.molihua.hlbmerge.dialog.impl.StatementDialog; +import com.umeng.commonsdk.UMConfigure; +import com.xuexiang.xui.widget.dialog.materialdialog.DialogAction; +import com.xuexiang.xui.widget.dialog.materialdialog.MaterialDialog; + +/** + * @ClassName: UMTools + * @Author: molihuan + * @Date: 2023/01/03/14:55 + * @Description: 友盟工具类 + */ +public class UMTools { + + public final static String APP_KEY = "63b302eed64e6861390b324f"; + public static String APP_CHANNEL = "release_molihuan"; + //debug渠道 + public final static String CHANNEL_DEBUG = "debug_molihuan"; + //release渠道 + public final static String CHANNEL_RELEASE = "release_molihuan"; + + /** + * 是否开启debug + * + * @param isDebug + */ + public static void setDebug(boolean isDebug) { + UMConfigure.setLogEnabled(isDebug); + } + + public static void setChannel(String channel) { + APP_CHANNEL = channel; + } + + /** + * 友盟预初始化 + * + * @param context + */ + public static void preInit(Context context) { + // SDK预初始化函数不会采集设备信息,也不会向友盟后台上报数据。 + UMConfigure.preInit(context, APP_KEY, APP_CHANNEL); + } + + /** + * 友盟初始化(带弹窗) + * + * @param context + */ + public static void init(Context context) { + //是否同意用户协议 + if (ConfigData.isAgreeTerms()) { + //友盟初始化 + //初始化组件化基础库, 所有友盟业务SDK都必须调用此初始化接口。 + UMConfigure.init(context, APP_KEY, APP_CHANNEL, UMConfigure.DEVICE_TYPE_PHONE, ""); + } else { + StatementDialog.showStatementDialog(context, new StatementDialog.IButtonCallback() { + @Override + public void onClick(MaterialDialog dialog, DialogAction which) { + UMConfigure.init(context, APP_KEY, APP_CHANNEL, UMConfigure.DEVICE_TYPE_PHONE, ""); + } + }); + } + } + + +} diff --git a/app/src/main/java/com/molihua/hlbmerge/utils/UpdataTools.java b/app/src/main/java/com/molihua/hlbmerge/utils/UpdataTools.java new file mode 100644 index 0000000..fdc57bb --- /dev/null +++ b/app/src/main/java/com/molihua/hlbmerge/utils/UpdataTools.java @@ -0,0 +1,124 @@ +package com.molihua.hlbmerge.utils; + +import android.content.Context; + +import com.blankj.molihuan.utilcode.util.TimeUtils; +import com.molihua.hlbmerge.dao.ConfigData; +import com.molihuan.pathselector.utils.Mtools; +import com.xuexiang.xupdate.easy.EasyUpdate; + +/** + * @ClassName: UpdataTools + * @Author: molihuan + * @Date: 2023/01/03/15:47 + * @Description: + */ +public class UpdataTools { + //************************** 更新url **************************** + //默认更新url(gitee) + public static final String UPDATE_URL_CHANNEL_GITEE = "https://gitee.com/molihuan/BilibiliCacheVideoMergeAndroid/raw/master/jsonapi/update_release.json"; + //备份更新url(gitlink) + public static final String UPDATE_URL_CHANNEL_GITLINK = "https://www.gitlink.org.cn/api/molihuan/BilibiliCacheVideoMerge/raw?filepath=jsonapi/update_release.json&ref=master"; + //备份更新url(github) + public static final String UPDATE_URL_CHANNEL_GITHUB = "https://raw.githubusercontent.com/molihuan/BilibiliCacheVideoMerge/master/jsonapi/update_release.json"; + //已经使用gitlink检测更新 + private static boolean usedGitlinkCheckUpdata = false; + //已经使用github检测更新 + private static boolean usedGithubCheckUpdata = false; + + //点击检测更新次数 + private static int clickCheckUpdataTimes = 0; + + //解除点击更新限制毫秒时间戳 + private static long unlimitClickCheckUpdataMills = 0; + + public final static long TIMESTAMP_DAY = 86400000; + public final static long TIMESTAMP_WEEK = 604800000; + public final static long TIMESTAMP_MONTH = Long.parseLong("2592000000"); + + /** + * 限制点击检查更新频率(gitee) + */ + public static void limitClickCheckUpdata(Context context) { + if (clickCheckUpdataTimes++ <= 2) { + checkUpdata(context); + } else { + long nowMills = TimeUtils.getNowMills(); + + if (unlimitClickCheckUpdataMills == 0) { + unlimitClickCheckUpdataMills = nowMills + 300000; + Mtools.toast("为了减小服务器压力,请5分钟后再试 或 自行进入下载:" + LConstants.PROJECT_ADDRESS); + } else if (nowMills < unlimitClickCheckUpdataMills) { + Mtools.toast(String.format("为了减小服务器压力,请%s分钟后再试 或 自行进入下载:" + LConstants.PROJECT_ADDRESS, (unlimitClickCheckUpdataMills - nowMills) / 60000)); + } else { + checkUpdata(context); + clickCheckUpdataTimes = 0; + } + + } + + } + + /** + * 周期自动检查更新(gitee) + * 自动检测更新频率 + */ + public static void autoCheckUpdata(Context context) { + long nowMills = TimeUtils.getNowMills(); + long updateMills = ConfigData.getUpdateMills(); + int updateFrequency = ConfigData.getUpdateFrequency(); + + if (updateFrequency != 3 && nowMills > updateMills) { + checkUpdata(context); + + switch (updateFrequency) { + case 0://一天 + updateMills = nowMills + TIMESTAMP_DAY; + break; + case 2://一月 + updateMills = nowMills + TIMESTAMP_MONTH; + break; + case 1://一周 + default: + updateMills = nowMills + TIMESTAMP_WEEK; + } + //设置下一次更新时间戳 + ConfigData.setUpdateMills(updateMills); + + } + + + } + + + /** + * 检查更新(gitee) + */ + public static void checkUpdata(Context context) { + EasyUpdate.checkUpdate(context, UPDATE_URL_CHANNEL_GITEE); + } + + /** + * 备用检查更新(gitlink) + * + * @param context + */ + public static void checkUpdataByGitlink(Context context) { + if (!usedGitlinkCheckUpdata) { + usedGitlinkCheckUpdata = true; + EasyUpdate.checkUpdate(context, UPDATE_URL_CHANNEL_GITLINK); + } + } + + /** + * 备用检查更新(github) + * + * @param context + */ + public static void checkUpdataByGithub(Context context) { + if (!usedGithubCheckUpdata) { + usedGithubCheckUpdata = true; + EasyUpdate.checkUpdate(context, UPDATE_URL_CHANNEL_GITHUB); + } + } +} diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml index 4765e35..ce5b60e 100644 --- a/app/src/main/res/layout/activity_about.xml +++ b/app/src/main/res/layout/activity_about.xml @@ -42,10 +42,6 @@ android:layout_height="wrap_content" android:layout_marginTop="35dp" /> - <Space - android:layout_width="match_parent" - android:layout_height="0dp" - android:layout_weight="1" /> <TextView android:id="@+id/copyright" diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index b77d935..6d7f048 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -188,4 +188,35 @@ </LinearLayout> + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="更新设置" + android:textColor="@color/orange_mlh" + android:paddingHorizontal="15dp" + android:paddingTop="15dp" /> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:descendantFocusability="blocksDescendants" + android:padding="15dp" + android:orientation="vertical"> + + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="自动检测更新频率" + android:textColor="@color/black_mlh" + android:textSize="16dp" /> + + <com.xuexiang.xui.widget.spinner.materialspinner.MaterialSpinner + android:id="@+id/ms_auto_updata" + android:layout_width="match_parent" + android:layout_height="wrap_content" + app:ms_entries="@array/auto_updata_frequency_string_array" /> + + </LinearLayout> + + </LinearLayout> \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e5c8c62..1f069d3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -12,6 +12,12 @@ <item>哔哩哔哩(概念版)</item> <item> </item> </string-array> + <string-array name="auto_updata_frequency_string_array"> + <item>每天</item> + <item>每周</item> + <item>每月</item> + <item>永不</item> + </string-array> <string name="tip_uri_authorization_permission_content_hlb">访问%s目录需要授予权限,\n是否进行授权?</string> <string name="option_confirm_hlb">确定</string> <string name="option_cancel_hlb">取消</string> diff --git a/jsonapi/update_custom.json b/jsonapi/update_custom.json index 7fe84b8..a9b8200 100644 --- a/jsonapi/update_custom.json +++ b/jsonapi/update_custom.json @@ -4,6 +4,6 @@ "versionCode": 3, "versionName": "1.0.2", "updateLog": "\r\n1、优化api接口。\r\n2、添加使用demo演示。\r\n3、新增自定义更新服务API接口。\r\n4、优化更新提示界面。", - "apkUrl": "https://xuexiangjys.oss-cn-shanghai.aliyuncs.com/apk/xupdate_demo_1.0.2.apk", + "apkUrl": "https://gitee.com/molihuan/BilibiliCacheVideoMergeAndroid/raw/master/app/release/app-release.apk", "apkSize": 4096 } \ No newline at end of file diff --git a/jsonapi/update_forced.json b/jsonapi/update_forced.json index fb00465..96d42bd 100644 --- a/jsonapi/update_forced.json +++ b/jsonapi/update_forced.json @@ -6,7 +6,7 @@ "VersionName": "1.0.2", "UploadTime": "2018-07-10 17:28:41", "ModifyContent": "\r\n1、优化api接口。\r\n2、添加使用demo演示。\r\n3、新增自定义更新服务API接口。\r\n4、优化更新提示界面。", - "DownloadUrl": "https://xuexiangjys.oss-cn-shanghai.aliyuncs.com/apk/xupdate_demo_1.0.2.apk", + "DownloadUrl": "https://gitee.com/molihuan/BilibiliCacheVideoMergeAndroid/raw/master/app/release/app-release.apk", "ApkSize": 4096, "ApkMd5": "E4B79A36EFB9F17DF7E3BB161F9BCFD8" } \ No newline at end of file diff --git a/jsonapi/update_ignore.json b/jsonapi/update_ignore.json index 5eddea5..119e140 100644 --- a/jsonapi/update_ignore.json +++ b/jsonapi/update_ignore.json @@ -6,7 +6,7 @@ "VersionName": "1.0.2", "UploadTime": "2018-07-10 17:28:41", "ModifyContent": "\r\n1、优化api接口。\r\n2、添加使用demo演示。\r\n3、新增自定义更新服务API接口。\r\n4、优化更新提示界面。", - "DownloadUrl": "https://xuexiangjys.oss-cn-shanghai.aliyuncs.com/apk/xupdate_demo_1.0.2.apk", + "DownloadUrl": "https://gitee.com/molihuan/BilibiliCacheVideoMergeAndroid/raw/master/app/release/app-release.apk", "ApkSize": 4096, "ApkMd5": "E4B79A36EFB9F17DF7E3BB161F9BCFD8" } \ No newline at end of file diff --git a/jsonapi/update_release.json b/jsonapi/update_release.json index 6655537..15f8ca9 100644 --- a/jsonapi/update_release.json +++ b/jsonapi/update_release.json @@ -2,11 +2,11 @@ "Code": 0, "Msg": "", "UpdateStatus": 1, - "VersionCode": 50, - "VersionName": "1.6.3", - "UploadTime": "2018-07-10 17:28:41", - "ModifyContent": "\r\n1、优化api接口666。\r\n2、添加使用demo演示。\r\n3、新增自定义更新服务API接口。\r\n4、优化更新提示界面。", - "DownloadUrl": "https://xuexiangjys.oss-cn-shanghai.aliyuncs.com/apk/xupdate_demo_1.0.2.apk", - "ApkSize": 2048, + "VersionCode": 44, + "VersionName": "1.6.4beta", + "UploadTime": "2023-01-3", + "ModifyContent": "\r\n1、增加稳定性。\r\n2、优化播放器。", + "DownloadUrl": "https://gitee.com/molihuan/BilibiliCacheVideoMergeAndroid/raw/master/app/release/app-release.apk", + "ApkSize": 23460, "ApkMd5": "" } \ No newline at end of file