144 Commits

Author SHA1 Message Date
b8a5454a0d version:1.6.0226
bugfixes:
add:增加g128t平台,修复开发者问题
2026-03-02 16:04:52 +08:00
1dd810dcfe version:1.5.1216
bugfixes:
add:统一aidl,为中性mdm版本提供状态获取
2026-01-30 19:11:51 +08:00
6797c7a6bd version:1.5.1216
bugfixes:
add:优化默认管控,修复高木id管控
2026-01-29 10:12:20 +08:00
eea2af875b version:1.5.1018
bugfixes:
add:替换图标,优化网络连接
2025-11-03 09:49:59 +08:00
06513441bd version:1.5.0821
bugfixes:
add:优化sn显示,增加mt6765平台
2025-09-03 11:26:51 +08:00
64620b4778 version:1.5.0723
bugfixes:
add:优化开发者选项
2025-07-30 09:35:36 +08:00
a03e8b8613 version:1.5.0719
bugfixes:
add:优化websocket,增加锁定显示,优化解锁加锁恢复出厂设置
2025-07-23 14:32:46 +08:00
81e4f050ca version:1.5.0714
bugfixes:
add:增加浏览器下载开关,去掉易学派应用后台结束进程
2025-07-14 15:02:00 +08:00
2e2eae508a version:1.5.0707
bugfixes:allwinnerjar更新
2025-07-09 11:07:40 +08:00
c6232709e1 version:1.5.0707
bugfixes:allwinner接口优化至manager
2025-07-09 09:24:35 +08:00
a2ad1c705f version:1.5.0705
bugfixes:优化报错和网络优化
2025-07-07 10:19:30 +08:00
d041a3b1c8 version:
bugfixes:修复合并全志分支错误
2025-06-16 11:09:46 +08:00
589ab073b8 Merge branch 'master' into allwinner
# Conflicts:
#	app/src/main/java/com/aoleyun/sn/network/NetInterfaceManager.java
#	app/src/main/java/com/aoleyun/sn/push/PushManager.java
2025-06-16 10:46:41 +08:00
dc1b129039 version:
bugfixes:对接分组标签和强制下载分组应用,增加地理围栏接口,地理围栏功能未实现
2025-06-16 10:27:19 +08:00
eb73796554 version:
bugfixes:使用jclasslib降级jar,对接全志酷比接口
2025-06-13 10:49:48 +08:00
60dab59ef8 1.5.0610
bugfixes:优化蓝牙开关,增加u1302平台,准备迁移到高版本AndroidStudio
2025-06-10 16:38:54 +08:00
3056267c4e 1.5.0513
bugfixes:增加应用禁用和卸载监听
2025-05-27 16:41:24 +08:00
0e9f0e8394 1.5.0513
bugfixes:增加应用禁用和卸载监听
2025-05-27 16:34:33 +08:00
7599d14897 1.5.0328
bugfixes:增加希沃签名
2025-04-01 18:18:32 +08:00
8716bf0e36 1.4.1217
bugfixes:优化命名
2025-03-13 10:41:32 +08:00
816753a500 1.4.1126
bugfixes:增加设置壁纸
2024-12-10 17:19:43 +08:00
c360344acc 1.4.1014
bugfixes:修复应用安装开关问题,修改打开之后不会删除应用,id管控默认写入一条无效数据,修复应用安装之后不能联网的问题
2024-10-15 09:30:58 +08:00
c6bec5cd43 对接黑白名单和网址白名单 2024-09-14 09:34:49 +08:00
84e3fa87fa 去掉butterknife 2024-08-26 10:37:52 +08:00
6068bd4bb3 1.4.0708 优化默认桌面 2024-07-10 18:46:43 +08:00
343700837e 1.4.0705 优化后台,增加全局黑名单 2024-07-08 10:32:45 +08:00
526914c64c 1.4.0608 增加爱优读 2024-06-13 11:19:36 +08:00
08fd02bf93 1.4.0530 默认隐藏爱优读机型apk,首次开机打开爱优读 2024-05-31 09:45:58 +08:00
7a07105d15 1.4.0529 第一次联网打开默认桌面,默认桌面不允许退出 2024-05-30 10:31:55 +08:00
2f8a9e6f07 1.4.0521 优化开机动画 控制主页控件显示 2024-05-25 09:47:05 +08:00
367832516f 1.4.0515 修改c2上蓝牙问题 2024-05-15 15:46:07 +08:00
58c36173fd 1.4.0509 增加mvvm,修改主页 2024-05-10 09:21:20 +08:00
d62722452c 增加日志抓取app 2024-05-09 11:13:21 +08:00
004de0cc2e 1.4.0429 修改一键加速界面,去掉ToastUtil,对接权限和通知 2024-05-08 14:33:06 +08:00
08f5867864 1.4.0329 G10p增加 com.gaomuxuexi34 2024-04-02 16:25:55 +08:00
ba91b973e7 1.4.0320 修复yxpd1 不删除默认桌面,默认写入sn为激活码,默认启动九学王服务 2024-03-21 10:16:32 +08:00
124696a9dd 1.4.0318 修复升级后设置默认桌面,对接小程序管控,增加专注模式,接管系统打开app 2024-03-19 09:30:51 +08:00
367c8e333c 1.4.0202 增加易学派平台 2024-02-28 10:15:59 +08:00
6d8e4509f0 1.4.0117 YX-T01不显示小程序二维码 2024-01-18 19:40:51 +08:00
913270821c 1.4.0103 更换图标,G10P 标签MTK11改为G104,G10P标签为G10P 2024-01-04 11:39:25 +08:00
1bf394241c version:6.5.4
fix:
update:增加一百分接口,增加清理界面
2023-11-20 10:38:15 +08:00
a7af7cf2a8 version:6.4.8
fix:
update:修改主页效果
2023-11-04 10:05:56 +08:00
2122454ac3 version:6.4.7
fix:
update:增加绑定手机和绑定状态,增加扫码绑定
2023-10-19 11:00:30 +08:00
6de0c1f016 version:6.4.6
fix:
update:增加护眼模式,增加静默拍照,增加时间管控和专注模式
2023-09-28 15:01:45 +08:00
183cde2afb version:6.4.4
fix:修复从应用分类下载的app会被卸载
update:
2023-09-11 18:26:26 +08:00
129f47f9f0 version:6.4.3
fix:
update:增加白名单开关和应用管控分类和开关
2023-09-11 18:24:21 +08:00
a069f5c848 version:6.4.2
fix:统一版本号
update:增加G13型号
2023-09-07 14:43:52 +08:00
af14f02fba version:1.1.2 Huaruian
fix:
update:增加检查更新
2023-09-04 09:20:51 +08:00
51a125ce3f version:huaruian 1.1.1
fix:修复自动升级后不下载桌面和其他更新
update:增加bugly
2023-08-31 17:13:08 +08:00
03901123da version:6.4.1
fix:
update:去掉腾讯推送,增加保存电子书包激活码
2023-08-14 10:31:06 +08:00
8c948e62be version:6.4.0
fix:
update:更换推送
2023-06-17 09:38:37 +08:00
539203e818 fix:修复g10上删除手动安装的应用,修复默认输入法设置问题
update:更新头像
2023-04-20 16:27:06 +08:00
c7046475da fix:
update:接口优化,耗电优化
2023-04-10 15:20:46 +08:00
e5cdbc2ecc version:G10P 1.0.2
fix:
update:华瑞安G10P适配
2023-03-30 10:08:02 +08:00
93f87d3b68 version:zhanrui 6.3.8,MTK 2.3.8
fix:
update:接口优化,主页优化,心跳机制优化
2023-02-06 19:08:49 +08:00
4371ae3059 version:zhanrui 6.3.3,MTK 2.3.3
fix:
update:增加MTK12 签名
2023-01-13 22:09:45 +08:00
4f6a6cff93 version:zhanrui 6.3.3,MTK 2.3.3
fix:
update:重置只请求一次接口,增加网络波动记录接口
2023-01-13 18:56:10 +08:00
8d0579a0f5 version:zhanrui 6.3.1,MTK 2.3.1
fix:讯飞输入法加入白名单
update:接口优化,bug修复
2023-01-07 16:44:01 +08:00
5da1be5d70 version:2.2.11.3
fix:
update:更新白名单,优化gps耗电
2022-11-24 09:39:45 +08:00
a92fb6b8e0 version:2.2.11.3
fix:
update:优化推送
2022-11-07 12:02:02 +08:00
2db37bdfa4 version:2.2.10.25
fix:
update:增加禁用app
2022-10-26 09:20:21 +08:00
5875eff3c6 version:
fix:
update:优化获取数据
2022-09-01 20:31:45 +08:00
26075a1486 version:
fix:
update:更新主界面样式布局
2022-08-19 10:17:45 +08:00
99a8038e41 version:mtk 3.9
fix:优化解锁设置默认桌面
update:上传增加电池信息
2022-08-10 18:09:50 +08:00
7c9f21ed73 version:3.8 mtk
fix:
update:优化解锁后默认桌面
2022-08-10 11:13:19 +08:00
a8c0e5b9bc version:MTK 3.6
fix:
update:GPS定位成功后关闭
2022-07-29 18:27:49 +08:00
275b7693fc version:6.5 cube
fix:
update:修复没有写入强制安装应用
2022-07-27 21:50:55 +08:00
66787bb6a7 version:beta
fix:
update:增加一些电量设置
2022-07-23 10:05:30 +08:00
5edeeb6fd4 version:6.3
fix:修复检查应用版本报错,修复cube开发者选项失效
update:更新cube sdk
2022-07-22 16:19:49 +08:00
19c9dfc2fc version:
fix:
update:增加几个管控类型
2022-07-12 22:39:15 +08:00
1cbb3c8c65 version: cude 6.1
fix:
update:增加短信管控
2022-07-11 18:14:10 +08:00
45ce0fc8ee version:5.6
fix:
update:设置默认桌面不再打开
2022-07-06 09:18:48 +08:00
5b49f1370f version: cude 5.9 mtk 3.4
fix:优化百度地图位置乱码
update:增加手动爱华解锁判断
2022-07-05 20:24:57 +08:00
6ab5e00948 version:5.6
fix:
update:修复返回桌面会一直启动
2022-07-04 18:45:14 +08:00
b069c7a0eb version:5.5
fix:
update:增加设备信息开机自启应用
2022-07-04 17:24:20 +08:00
90e18aec0e version: cude 5.4 MTK 3.2
fix:优化AIDL报错
update:
2022-06-29 15:15:05 +08:00
f0655a2919 version: cude 5.3 MTK 3.1
fix:
update:彻底删除极光推送,以及高德地图sdk,优化百度sdk获取结果
2022-06-29 11:15:44 +08:00
006b80f8d4 version:3.0 beta
fix:
update:更换地图sdk为百度地图
2022-06-28 22:51:05 +08:00
06dd8b053a version: cude 5.2
fix:增加权限
update:
2022-06-21 11:01:41 +08:00
c9a5105e3e version:2.9
fix:
update:爱华解锁后不删除应用
2022-06-21 09:14:31 +08:00
cdaaaaed91 version: cude 5.1
fix:
update:适配台电
2022-06-11 17:58:04 +08:00
b917401e86 version:
fix:
update:优化app霸屏
2022-06-09 20:38:48 +08:00
83159cc584 version:cube
fix:
update:优化检测升级
2022-06-08 20:57:58 +08:00
8ac2a6503f version:cube 4.8
fix:修复截图
update:
2022-06-02 18:14:59 +08:00
b01f101613 version:2.6
fix:修复爱华会禁用Google输入法,修复设置默认桌面
update:
2022-05-25 09:36:09 +08:00
14fd58b82f version:4.7
fix:
update:增加远程获取隐藏app列表,禁用app列表
2022-05-23 16:22:23 +08:00
1b83a79957 version:4.5
fix:
update:增加远程获取sn接口
2022-05-18 15:47:37 +08:00
5b335c3029 version:
fix:
update:添加注释
2022-04-29 16:48:52 +08:00
7ac975f4cc version:2.2 MTK
fix:修复联网升级滑动
update:
2022-04-27 09:21:50 +08:00
2bf051b8c1 version:2.1 MTK
fix:修复强制安装应用时报错
update:优化桌面图标隐藏
2022-04-26 16:08:55 +08:00
5c821df549 version:2.1 beta
fix:优化获取桌面图标接口
update:
2022-04-26 10:30:01 +08:00
7a1a4fe5a5 version:2.1 MTK
fix:优化获取设备类型逻辑,优化获取设备版本号
update:打包更新
2022-04-25 18:21:25 +08:00
11bad35331 version:4.5beta
fix:
update:增加获取手机号码,获取运营商类型,获取wifi网络运营商,获取手机号码
2022-04-21 11:36:17 +08:00
5b567c55b1 version:4.4
fix:
update:增加截图上传失败重试
2022-04-20 15:49:43 +08:00
53dd43030e Merge branches 'beta' and 'master' of ssh://192.168.5.234:1022/Unisoc_Alldocube/CubeAoleyunSN into beta 2022-04-20 09:22:48 +08:00
8a609a0556 version:4.4
fix:
update:增加截图时亮屏
2022-04-19 22:22:58 +08:00
caa8608f52 version:4.3
fix:优化
update:
2022-04-19 20:59:38 +08:00
69a8934bd4 version:4.3
fix:安装应用时不清除桌面缓存,锁定状态改变时不恢复出厂设置
update:在获取sn没有刷写的状态时,获取IMEI作为别名
2022-04-19 09:24:45 +08:00
2339e1484d version:4.2
fix:修复不能自动下载强制应用,锁定状态显示问题,增加打开主页判断是否在请求
update:
2022-04-15 11:40:02 +08:00
0a75344b61 version:4.0
fix:修复日志上传错误
update:正在运行的app显示奥乐云系列应用
2022-04-13 10:37:36 +08:00
297f33bf2d version:3.9
fix:修复系统设置管控失败
update:
2022-04-12 10:00:31 +08:00
0cb21ceadc version:3.7beta
fix:移除HTTPInterface,所有请求在NetInterfaceManager进行
update:
2022-04-08 09:33:55 +08:00
f2cc0aea30 version:
fix:netfixes
update:
2022-04-06 18:11:55 +08:00
683f31087f version:
fix:优化请求次数
update:
2022-04-02 18:37:49 +08:00
62de0cac3f version:3.5
fix:第一次开机不弹窗,修复重复请求时不抛出onerror异常,修复email意外弹出
update:
2022-03-09 16:14:19 +08:00
8d9fd57152 version:3.3
fix:修复几个闪退问题,升级后清除桌面数据
update:时钟,摄像头允许打开,日历app允许显示
2022-03-07 18:07:18 +08:00
3ef0e56a08 version:
fix:联网重启时更新时间
update:
2022-03-05 18:05:16 +08:00
18682260825
5aac5e802b 增加酷比mdm,修改推送标签,卸载预装apk,隐藏电子邮件 2022-03-05 14:32:48 +08:00
f2b312c477 version:
fix:酷比禁用v2签名,否则无法安装
update:
2022-03-04 10:18:52 +08:00
6efcba2829 version:
fix:
update:更新到酷比打包
2022-03-02 14:59:11 +08:00
ee731661fc version:2.9
fix:优化接口,增加检测其他应用
update:
2022-03-01 10:34:46 +08:00
97bc5d6a75 version:2.8
fix:优化接口,重启不再限制请求
update:
2022-02-25 16:59:44 +08:00
ecd683440a version:2.7
fix:更新桌面唤醒
update:
2022-02-25 14:13:08 +08:00
3c45ccc7b1 version:2.6
fix:更新retrofit,优化请求次数
update:
2022-02-24 18:44:56 +08:00
7d50cb709b version:2.6
fix:隐藏不需要的应用
update:
2022-02-23 09:57:42 +08:00
7e37ab1104 version:2.5
fix:增加根据类别显示标签,修改WiFi获取
update:
2022-02-22 15:48:19 +08:00
2230ea5161 version:2.4
fix:修复无法删除,无法显示应用信息,系统报错问题
update:
2022-02-22 10:07:42 +08:00
1d9abfc90e version:2.3
fix:增加上传日志功能,优化一键加速功能
update:
2022-02-11 10:36:00 +08:00
61ef0d7bfa version:2.3
fix:增加上传日志功能,优化一键加速功能
update:
2022-02-11 09:53:30 +08:00
edf23945b5 version:2.1
fix:完善推送
update:
2022-01-25 16:12:36 +08:00
a432526311 version:1.9
fix:
add:
2022-01-04 18:26:14 +08:00
c9e72d00fb version:1.8
fix:应用数据统计
add:
2021-12-25 16:39:43 +08:00
7c3a035ca6 version:1.6
fix:minSdkVersion更换为22生成签名文件
add:
2021-12-10 17:27:30 +08:00
5f3b3f51a0 version:1.6
fix:修复浏览器更新
add:
2021-12-10 14:29:55 +08:00
34fa9fcdb7 version:1.4
update:2021-10-21 10:14:40
fix:
add:增加浏览器桌面检测升级,修复重复请求
2021-12-03 14:33:03 +08:00
768519e14e version:1.0
update:2021-10-21 10:14:40
fix:
add:增加开机检测弹窗,增加常驻通知
2021-10-21 10:15:39 +08:00
a4c68f0b37 version:1.0
update:2021-10-16 18:50:25
fix:增减检查弹窗,修复第一次启动不能自动下载
add:切换到奥乐云平台
2021-10-16 18:51:47 +08:00
3018660216 version:1.0
update:2021-10-13 18:52:13
fix:去除okgo,rxAndroid1,优化依赖
add:切换到奥乐云平台
2021-10-13 18:54:20 +08:00
13707fc96a version:2.2.8
update:2021-10-11 18:24:45
fix:修复未设置主页和书签时,单独IP白名单管控失效
add:
2021-10-11 18:25:24 +08:00
0c1e0a094a date:2021-10-10 16:33:37
update:更新沉浸状态栏
2021-10-10 16:35:28 +08:00
588d815d7f version:2.2.8
update:2021-10-09 18:36:39
fix:
add:增加白名单ip功能
2021-10-09 18:37:48 +08:00
827a3e0ee7 version:2.2.8
update:2021-09-30 18:32:40
fix:
add:
2021-09-30 18:33:03 +08:00
9963b276f6 version:2.2.8
update:0928
fix:修复浏览器删除主页和白名单,数据为空时,浏览器管控失效
add:更换批次不恢复出厂设置时清除浏览器缓存
2021-09-28 10:32:32 +08:00
35e2df454f version:2.2.6
update:0918
fix:
add:
2021-09-18 18:36:45 +08:00
0c27e60b29 version:2.2.6
update:
fix:在线状态更新
add:增加清除极光别名过多
2021-09-17 18:26:42 +08:00
a318e07db9 version:2.2.3
update:
fix:
add:设置系统默认桌面接口和推送
2021-09-02 18:25:49 +08:00
addda19fd5 version:2.2.0
update:平板重启时间管控弹出太慢,重启后管导航栏按键太慢
fix:log集中管理
add:获取设备ip地址,自定义白名单对接推送
2021-07-22 16:51:25 +08:00
92294fe180 version:beta
update:
fix:
add:增加电子书包二维码,增加获取激活码接口
2021-07-12 10:14:28 +08:00
e38530fd81 version:2.1.8
update:删除不用的数据,开机发送白名单管控
fix:修复qch_app_power_on为空时设备断网,修复开机动画不能写入bug,
add:
2021-07-02 18:04:10 +08:00
89d4edd7c9 version:
update:更新应用联网管控的方式,关闭所有功能时不管控壁纸
fix:
add:
2021-06-23 18:00:25 +08:00
3a21c341d6 version:beta2.1.5
update:
fix:
add:增加发送锁屏息屏时状态
2021-06-22 11:01:44 +08:00
8990d9045f version:beta2.1.4
update:
fix:
add:
2021-06-19 14:01:33 +08:00
7511d944f2 version:2.1.4
update:第一次联网逻辑更新,可能会造成后面不能继续其他请求
fix:修复第一次使用联网不能自动下载apk
add:增加应用内部白名单管控,增加通过系统自定义版本号添加桌面快捷方式
2021-06-18 17:48:15 +08:00
26ab77e885 version:2.1.2
update:debug模式下不管控开发人员选项
fix:修改和删除主页时浏览器黑白名单更新不及时
add:
2021-06-11 10:09:41 +08:00
459 changed files with 39001 additions and 20165 deletions

44
app/CMakeLists.txt Normal file
View File

@@ -0,0 +1,44 @@
# For more information about using CMake with Android Studio, read the
# documentation: https://d.android.com/studio/projects/add-native-code.html
# Sets the minimum version of CMake required to build the native library.
cmake_minimum_required(VERSION 3.4.1)
# Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source code.
# You can define multiple libraries, and CMake builds them for you.
# Gradle automatically packages shared libraries with your APK.
add_library( # Sets the name of the library.
jgy
# Sets the library as a shared library.
SHARED
# Provides a relative path to your source file(s).
src/main/jni/jgy.cpp )
# Searches for a specified prebuilt library and stores the path as a
# variable. Because CMake includes system libraries in the search path by
# default, you only need to specify the name of the public NDK library
# you want to add. CMake verifies that the library exists before
# completing its build.
find_library( # Sets the name of the path variable.
log-lib
# Specifies the name of the NDK library that
# you want CMake to locate.
log )
# Specifies libraries CMake should link to your target library. You
# can link multiple libraries, such as libraries you define in this
# build script, prebuilt third-party libraries, or system libraries.
target_link_libraries( # Specifies the target library.
jgy
# Links the target library to the log library
# included in the NDK.
${log-lib} )

View File

@@ -1,34 +1,65 @@
apply plugin: 'com.android.application'
def appName() {
return "DeviceInfo"
static def appName() {
return "AoleyunDeviceInfo"
}
def releaseTime() {
return new Date().format("yyyyMMdd", TimeZone.getDefault())
static def releaseTime() {
return new Date().format("yyyyMMdd_HHmmss", TimeZone.getDefault())
}
android {
//Android Studio 4.0 之后使用这个但是会把jar打包进apk
// gradle.projectsEvaluated {
// tasks.withType(JavaCompile) {
// Set<File> fileSet = options.bootstrapClasspath.getFiles()
// List<File> newFileList = new ArrayList<>();
// //JAVA语法可连续调用输入参数建议为相对路径
// newFileList.add(new File("libs/framework.jar"))
// //最后将原始参数添加
// newFileList.addAll(fileSet)
// options.bootstrapClasspath = files(
// newFileList.toArray()
// )
// }
// }
compileSdkVersion 29
buildToolsVersion "30.0.3"
defaultConfig {
applicationId "com.jiaoguanyi.appstore"
applicationId "com.aoleyun.sn"
versionCode 206
versionName "1.6.0226"
//There are no CERT files because If the mini sdk version is 23+, the AGP will ignore the V1 scheme signature.
minSdkVersion 24
targetSdkVersion 29
multiDexEnabled true
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
packagingOptions {
exclude 'META-INF/rxjava.properties'
ndk {
//选择要添加的对应 cpu 类型的 .so 库。
abiFilters 'arm64-v8a'
// 还可以添加 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64', 'mips', 'mips64'
}
buildConfigField "String", "ROOT_URL", '"https://led.aoleyun.cn/api/"'
buildConfigField "String", "SCREEN_BASE_URL", '"https://led.aoleyun.cn:2018/"'
buildConfigField "String", "SCREEN_URL", '"https://led.aoleyun.cn:2018/wm/is_online"'
buildConfigField "String", "WEBSOCKET_URL", '"wss://led.aoleyun.cn/wss/"'
}
lintOptions {
checkReleaseBuilds false
// Or, if you prefer, you can continue to check for errors in release builds,
// but continue the build even when errors are found:
abortOnError false
}
dexOptions {
jumboMode true
dataBinding {
enabled true
}
compileOptions {
@@ -36,88 +67,29 @@ android {
targetCompatibility JavaVersion.VERSION_1_8
}
//多版本
productFlavors {
//新平台正式
newly {
flavorDimensions "default"
versionCode 512
//versionCode 1037
versionName "2.1.2"
/*********************************极光推送************************************/
manifestPlaceholders = [
JPUSH_PKGNAME: "com.jiaoguanyi.appstore",
JPUSH_APPKEY : "20f70bbeb78bad23eddd08d0", //JPush上注册的包名对应的appkey.
JPUSH_CHANNEL: "developer-default", //暂时填写默认值即可.
channel_value: "newly" ,
// AMAP_KEY: "546eb5646a65ac6a5b7d1c7456466e05"
]
/*********************************极光推送end************************************/
buildConfigField "String", "ROOT_URL", '"http://name.jiaoguanyi.cn/api/"'
buildConfigField "String", "WebsocketURL", '"ws://47.119.147.245:2345"'
externalNativeBuild {
cmake {
path file('CMakeLists.txt')
}
//新平台测试
beta {
flavorDimensions "default"
versionCode 174
versionName "1.7.4"
/*********************************极光推送************************************/
manifestPlaceholders = [
JPUSH_PKGNAME: "com.jiaoguanyi.appstore",
JPUSH_APPKEY : "52d81643665bb2cadacf0e9e", //JPush上注册的包名对应的appkey.
JPUSH_CHANNEL: "developer-default", //暂时填写默认值即可.
channel_value: "beta" ,
// AMAP_KEY: "5b68c8ee39800ff700a3762b6e028b78"
]
/*********************************极光推送end************************************/
buildConfigField "String", "ROOT_URL", '"http://name.uiuios.com/api/"'
buildConfigField "String", "WebsocketURL", '"ws://39.108.116.195:2345"'
}
// //老平台正式
// official {
// flavorDimensions "default"
// versionCode 1039
// versionName "2.0.3.9"
// /*********************************极光推送************************************/
// manifestPlaceholders = [
// JPUSH_PKGNAME: "com.jiaoguanyi.appstore",
// JPUSH_APPKEY : "20f70bbeb78bad23eddd08d0", //JPush上注册的包名对应的appkey.
// JPUSH_CHANNEL: "developer-default", //暂时填写默认值即可.
// channel_value: "official",
// AMAP_KEY: "5b68c8ee39800ff700a3762b6e028b78"
// ]
// /*********************************极光推送end************************************/
// buildConfigField "String", "ROOT_URL", '"http://partner.jiaoguanyi.com/api/"'
// buildConfigField "String", "WebsocketURL", '"ws://47.107.133.19:1234"'
// }
//
// //中优
// zhongyou {
// flavorDimensions "default"
// versionCode 1
// versionName "1.0"//测试jiaoguanyi.cn
// /*********************************极光推送************************************/
// manifestPlaceholders = [
// JPUSH_PKGNAME: "com.jiaoguanyi.appstore",
// JPUSH_APPKEY : "a98c8a210687b4bb43c39c39", //JPush上注册的包名对应的appkey.
// JPUSH_CHANNEL: "developer-default", //暂时填写默认值即可.
// channel_value: "zhongyou" ,
// AMAP_KEY: "5b68c8ee39800ff700a3762b6e028b78"
// ]
// /*********************************极光推送end************************************/
// buildConfigField "String", "ROOT_URL", '"https://jgy.jundunxueyuan.com/api/"'
// buildConfigField "String", "WebsocketURL", '"ws://39.98.59.202:2345"'
// }
}
sourceSets {
//测试版的图标
beta.res.srcDirs = ['src/beta/res']
// beta.res.srcDirs = ['src/beta/res']
// newly.res.srcDirs = ['src/beta/res']
main {
jniLibs.srcDir 'src/main/jniLibs'
}
}
// Disable release builds for now
android.variantFilter { variant ->
// // Icon recents is Go only
// if (name.contains("WithQuickstepIconRecents") && !name.contains("l3go")) {
// variant.setIgnore(true)
// }
}
//签名
signingConfigs {
@@ -127,162 +99,689 @@ android {
keyAlias "zhanxun"
keyPassword "123456"
v1SigningEnabled true
v2SigningEnabled true
v2SigningEnabled false
}
debug {
storeFile file("keystore/xueshibaoos.jks")
zhanRuiUserdebug {
storeFile file("keystore/zhanxunUserdebug.keystore")
storePassword "123456"
keyAlias "xueshibaoos"
keyPassword "123456"
v1SigningEnabled true
v2SigningEnabled true
}
release {
storeFile file("keystore/xueshibaoos.jks")
storePassword "123456"
keyAlias "xueshibaoos"
keyAlias "zhanxunUserdebug"
keyPassword "123456"
v1SigningEnabled true
v2SigningEnabled false
}
}
// Disable release builds for now
android.variantFilter { variant ->
if (variant.buildType.name.endsWith('zhanRuiRelease')) {
variant.setIgnore(variant.getFlavors().get(0).name.equals('official')||variant.getFlavors().get(0).name.equals('zhongyou'))
zhanRui12 {
storeFile file("keystore/zhanrui12.jks")
storePassword "123456"
keyAlias "zhanrui12"
keyPassword "123456"
v1SigningEnabled true
v2SigningEnabled false
}
if (variant.buildType.name.endsWith('zhanRuiDebug')) {
variant.setIgnore(variant.getFlavors().get(0).name.equals('official')||variant.getFlavors().get(0).name.equals('zhongyou'))
mtk {
storeFile file("keystore/xueshibaoos.jks")
storePassword "123456"
keyAlias "xueshibaoos"
keyPassword "123456"
v1SigningEnabled true
v2SigningEnabled true
}
G10P {
storeFile file("keystore/G10PMTK11.jks")
storePassword "123456"
keyAlias "G10PMTK11"
keyPassword "123456"
v1SigningEnabled true
v2SigningEnabled true
}
G11Userdebug {
storeFile file("keystore/G11Userdebug.keystore")
storePassword "123456"
keyAlias "G11Userdebug"
keyPassword "123456"
v1SigningEnabled true
v2SigningEnabled true
}
G10PUserDebug {
storeFile file("keystore/G10PUserDebug.jks")
storePassword "123456"
keyAlias "G10PUserDebug"
keyPassword "123456"
v1SigningEnabled true
v2SigningEnabled true
}
zhanruiG10Z {
storeFile file("keystore/zhanruiG10Z.keystore")
storePassword "123456"
keyAlias "zhanruiG10Z"
keyPassword "123456"
v1SigningEnabled true
v2SigningEnabled true
}
G10ZUserDebug {
storeFile file("keystore/G10zUserDebug.keystore")
storePassword "123456"
keyAlias "G10zUserDebug"
keyPassword "123456"
v1SigningEnabled true
v2SigningEnabled true
}
mtk12 {
storeFile file("keystore/mtkAndroid12.keystore")
storePassword "123456"
keyAlias "mtk12"
keyPassword "123456"
v1SigningEnabled true
v2SigningEnabled true
}
P20S {
storeFile file("keystore/MTKP20S.keystore")
storePassword "123456"
keyAlias "MTKP20S"
keyPassword "123456"
v2SigningEnabled false
}
//iPlay50 mini,iPlay50 android13 共用签名
iPlay50mini {
storeFile file("keystore/iPlay50Mini.keystore")
storePassword "android"
keyAlias "platform"
keyPassword "android"
v2SigningEnabled false
}
teclast8183 {
storeFile file("keystore/TeclastMTK12.jks")
storePassword "123456"
keyAlias "TeclastMTK12"
keyPassword "123456"
v2SigningEnabled false
}
Huaruian8768 {
storeFile file("keystore/Huaruian8768.jks")
storePassword "123456"
keyAlias "Huaruian8768"
keyPassword "123456"
v1SigningEnabled true
v2SigningEnabled true
}
T40Air {
storeFile file("keystore/T40Air.jks")
storePassword "123456"
keyAlias "T40Air"
keyPassword "123456"
v1SigningEnabled true
v2SigningEnabled true
}
P50 {
storeFile file("keystore/P50TD.jks")
storePassword "123456"
keyAlias "P50TD"
keyPassword "123456"
v1SigningEnabled true
v2SigningEnabled true
}
seewo {
storeFile file("keystore/aiud.keystore")
storePassword "s4HdJuphaiHhU7WY"
keyAlias "androidreleasekey"
keyPassword "JwUw2oV16rUjWLBC"
v1SigningEnabled true
v2SigningEnabled true
}
iPlay50miniPro {
storeFile file("keystore/iPlay50miniPro.jks")
storePassword "123456"
keyAlias "iplay50minipro"
keyPassword "123456"
v1SigningEnabled true
v2SigningEnabled true
}
U1302 {
storeFile file("keystore/U1302.keystore")
storePassword "123456"
keyAlias "u1302"
keyPassword "123456"
v1SigningEnabled true
v2SigningEnabled true
}
MT6765 {
storeFile file("keystore/MT6765.keystore")
storePassword "123456"
keyAlias "mt6765"
keyPassword "123456"
v1SigningEnabled true
v2SigningEnabled true
}
G128T {
storeFile file("keystore/HuaruianG128T.jks")
storePassword "123456"
keyAlias "g128t"
keyPassword "123456"
v1SigningEnabled true
v2SigningEnabled true
}
// // Icon recents is Go only
// if (name.contains("WithQuickstepIconRecents") && !name.contains("l3go")) {
// variant.setIgnore(true)
// }
}
buildTypes {
zhanRuiRelease.initWith(release)
zhanRuiRelease {
manifestPlaceholders = [
AMAP_KEY: "546eb5646a65ac6a5b7d1c7456466e05"
]
buildConfigField "String", "platform", '"ZhanRui"'
signingConfig signingConfigs.zhanRui
G128TDebug.initWith(debug)
G128TDebug {
buildConfigField "String", "platform", '"G128T"'
versionNameSuffix "-debug"
debuggable true
signingConfig signingConfigs.G128T
}
G128TRelease.initWith(release)
G128TRelease {
buildConfigField "String", "platform", '"G128T"'
signingConfig signingConfigs.G128T
}
MT6765Debug.initWith(debug)
MT6765Debug {
buildConfigField "String", "platform", '"MT6765"'
versionNameSuffix "-debug"
debuggable true
signingConfig signingConfigs.MT6765
}
MT6765Release.initWith(release)
MT6765Release {
buildConfigField "String", "platform", '"MT6765"'
signingConfig signingConfigs.MT6765
}
QZ15Debug.initWith(debug)
QZ15Debug {
buildConfigField "String", "platform", '"QZA15"'
versionNameSuffix "-debug"
debuggable true
signingConfig signingConfigs.U1302
}
QZ15Release.initWith(release)
QZ15Release {
buildConfigField "String", "platform", '"QZA15"'
signingConfig signingConfigs.U1302
}
iPlay50miniProDebug.initWith(debug)
iPlay50miniProDebug {
buildConfigField "String", "platform", '"miniG99"'
versionNameSuffix "-debug"
debuggable true
signingConfig signingConfigs.iPlay50miniPro
}
iPlay50miniProRelease.initWith(release)
iPlay50miniProRelease {
buildConfigField "String", "platform", '"miniG99"'
signingConfig signingConfigs.iPlay50miniPro
}
seewoDebug.initWith(debug)
seewoDebug {
versionNameSuffix "-debug"
debuggable true
signingConfig signingConfigs.seewo
buildConfigField "String", "platform", '"seewo"'
}
seewoRelease.initWith(release)
seewoRelease {
signingConfig signingConfigs.seewo
buildConfigField "String", "platform", '"seewo"'
}
P50Debug.initWith(debug)
P50Debug {
versionNameSuffix "-debug"
debuggable true
signingConfig signingConfigs.P50
buildConfigField "String", "platform", '"P50TD"'
}
P50Release.initWith(release)
P50Release {
signingConfig signingConfigs.P50
buildConfigField "String", "platform", '"P50TD"'
}
G11JDebug.initWith(debug)
G11JDebug {
versionNameSuffix "-debug"
debuggable true
signingConfig signingConfigs.Huaruian8768
buildConfigField "String", "platform", '"aud8786"'
}
G11JRelease.initWith(release)
G11JRelease {
signingConfig signingConfigs.Huaruian8768
buildConfigField "String", "platform", '"aud8786"'
}
T40AirDebug.initWith(debug)
T40AirDebug {
versionNameSuffix "-debug"
debuggable true
signingConfig signingConfigs.T40Air
buildConfigField "String", "platform", '"HL500"'
}
T40AirRelease.initWith(release)
T40AirRelease {
signingConfig signingConfigs.T40Air
buildConfigField "String", "platform", '"HL500"'
}
AiUduDebug.initWith(debug)
AiUduDebug {
versionNameSuffix "-debug"
debuggable true
signingConfig signingConfigs.G10P
buildConfigField "String", "platform", '"AUDG104"'
}
AiUduRelease.initWith(release)
AiUduRelease {
signingConfig signingConfigs.G10P
buildConfigField "String", "platform", '"AUDG104"'
}
Huaruian8768Debug.initWith(debug)
Huaruian8768Debug {
versionNameSuffix "-debug"
debuggable true
signingConfig signingConfigs.Huaruian8768
buildConfigField "String", "platform", '"MT8768"'
}
Huaruian8768Release.initWith(release)
Huaruian8768Release {
signingConfig signingConfigs.Huaruian8768
buildConfigField "String", "platform", '"MT8768"'
}
YXPD1Debug.initWith(debug)
YXPD1Debug {
versionNameSuffix "-debug"
debuggable true
signingConfig signingConfigs.G10P
buildConfigField "String", "platform", '"YXPD1"'
}
YXPD1Release.initWith(release)
YXPD1Release {
signingConfig signingConfigs.G10P
buildConfigField "String", "platform", '"YXPD1"'
}
c2Debug.initWith(debug)
c2Debug {
versionNameSuffix "-debug"
debuggable true
signingConfig signingConfigs.teclast8183
// signingConfig signingConfigs.mtk
buildConfigField "String", "platform", '"MTK8183"'
}
c2Release.initWith(release)
c2Release {
signingConfig signingConfigs.teclast8183
// signingConfig signingConfigs.mtk
buildConfigField "String", "platform", '"MTK8183"'
}
teclast8183Debug.initWith(debug)
teclast8183Debug {
versionNameSuffix "-debug"
debuggable true
signingConfig signingConfigs.teclast8183
buildConfigField "String", "platform", '"teclast8183"'
}
teclast8183Release.initWith(release)
teclast8183Release {
signingConfig signingConfigs.teclast8183
buildConfigField "String", "platform", '"teclast8183"'
}
iPlay5013Debug.initWith(debug)
iPlay5013Debug {
buildConfigField "String", "platform", '"iplay5013"'
versionNameSuffix "-debug"
debuggable true
signingConfig signingConfigs.iPlay50mini
}
iPlay5013Release.initWith(release)
iPlay5013Release {
buildConfigField "String", "platform", '"iplay5013"'
signingConfig signingConfigs.iPlay50mini
}
MTKAndroid12Debug.initWith(debug)
MTKAndroid12Debug {
versionNameSuffix "-debug"
debuggable true
signingConfig signingConfigs.mtk12
}
MTKAndroid12Release.initWith(release)
MTKAndroid12Release {
signingConfig signingConfigs.mtk12
}
G11Debug.initWith(debug)
G11Debug {
versionNameSuffix "-debug"
debuggable true
signingConfig signingConfigs.G11Userdebug
buildConfigField "String", "platform", '"MTKG11"'
}
G11Release.initWith(release)
G11Release {
signingConfig signingConfigs.G11Userdebug
buildConfigField "String", "platform", '"MTKG11"'
}
G10PDebug.initWith(debug)
G10PDebug {
versionNameSuffix "-debug"
debuggable true
signingConfig signingConfigs.G10P
buildConfigField "String", "platform", '"G10P"'
}
G10PRelease.initWith(release)
G10PRelease {
signingConfig signingConfigs.G10P
buildConfigField "String", "platform", '"G10P"'
}
G13Debug.initWith(debug)
G13Debug {
versionNameSuffix "-debug"
debuggable true
signingConfig signingConfigs.G10P
buildConfigField "String", "platform", '"HRAD13"'
}
G13Release.initWith(release)
G13Release {
signingConfig signingConfigs.G10P
buildConfigField "String", "platform", '"HRAD13"'
}
G104Debug.initWith(debug)
G104Debug {
versionNameSuffix "-debug"
debuggable true
signingConfig signingConfigs.G10P
buildConfigField "String", "platform", '"MTK11"'
}
G104Release.initWith(release)
G104Release {
signingConfig signingConfigs.G10P
buildConfigField "String", "platform", '"MTK11"'
}
G104UserDebug.initWith(debug)
G104UserDebug {
versionNameSuffix "-debug"
debuggable true
signingConfig signingConfigs.G10PUserDebug
buildConfigField "String", "platform", '"MTK11"'
}
zhanruiG10ZUserDebug.initWith(debug)
zhanruiG10ZUserDebug {
versionNameSuffix "-debug"
debuggable true
signingConfig signingConfigs.G10ZUserDebug
buildConfigField "String", "platform", '"ZR6016"'
}
zhanruiG10ZDebug.initWith(debug)
zhanruiG10ZDebug {
versionNameSuffix "-debug"
debuggable true
signingConfig signingConfigs.zhanruiG10Z
buildConfigField "String", "platform", '"ZR6016"'
}
zhanruiG10ZRelease.initWith(release)
zhanruiG10ZRelease {
signingConfig signingConfigs.zhanruiG10Z
buildConfigField "String", "platform", '"ZR6016"'
}
TeclastP20SDebug.initWith(debug)
TeclastP20SDebug {
debuggable true
versionNameSuffix "-debug"
signingConfig signingConfigs.P20S
buildConfigField "String", "platform", '"P20S"'
}
TeclastP20SRelease.initWith(release)
TeclastP20SRelease {
signingConfig signingConfigs.P20S
buildConfigField "String", "platform", '"P20S"'
}
zhanRuiDebug.initWith(debug)
zhanRuiDebug {
manifestPlaceholders = [
AMAP_KEY: "546eb5646a65ac6a5b7d1c7456466e05"
]
versionNameSuffix "-debug"
buildConfigField "String", "platform", '"ZhanRui"'
debuggable true
versionNameSuffix "-debug"
signingConfig signingConfigs.zhanRui
buildConfigField "String", "platform", '"展锐"'
}
zhanRuiRelease.initWith(release)
zhanRuiRelease {
signingConfig signingConfigs.zhanRui
buildConfigField "String", "platform", '"展锐"'
}
//userdebug rom使用这个版本
zhanRuiUserdebug.initWith(zhanRuiDebug)
zhanRuiUserdebug {
debuggable true
versionNameSuffix "-debug"
signingConfig signingConfigs.zhanRuiUserdebug
buildConfigField "String", "platform", '"展锐"'
}
zhanRuiUserdebugReleas.initWith(release)
zhanRuiUserdebugReleas {
debuggable true
signingConfig signingConfigs.zhanRuiUserdebug
buildConfigField "String", "platform", '"展锐"'
}
zhanRui12Debug.initWith(debug)
zhanRui12Debug {
debuggable true
versionNameSuffix "-debug"
signingConfig signingConfigs.zhanRui12
buildConfigField "String", "platform", '"AH6016"'
}
zhanRui12Release.initWith(release)
zhanRui12Release {
signingConfig signingConfigs.zhanRui12
buildConfigField "String", "platform", '"AH6016"'
}
debug {
buildConfigField "String", "platform", '"MTK"'
manifestPlaceholders = [
AMAP_KEY: "5b68c8ee39800ff700a3762b6e028b78"
]
// 不显示Log
//buildConfigField "boolean", "LOG_DEBUG", "false"
//
debuggable true
versionNameSuffix "-debug"
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//Zipalign优化
zipAlignEnabled true
signingConfig signingConfigs.debug
applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null) {
def fileName = "${appName()}-${variant.versionCode}-V${variant.versionName}-${releaseTime()}-${buildType.name}.apk"
def fileName = "${appName()}_${variant.versionCode}_V${variant.versionName}_${releaseTime()}_${buildType.name}.apk"
output.outputFileName = fileName
}
}
}
signingConfig signingConfigs.mtk
buildConfigField "String", "platform", '"MTK"'
}
release {
buildConfigField "String", "platform", '"MTK"'
manifestPlaceholders = [
AMAP_KEY: "5b68c8ee39800ff700a3762b6e028b78"
]
//混淆
minifyEnabled false
//前一部分代表系统默认的android程序的混淆文件该文件已经包含了基本的混淆声明后一个文件是自己的定义混淆文件
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//Zipalign优化
zipAlignEnabled true
//签名
signingConfig signingConfigs.release
//将release版本的包名重命名加上版本及日期
applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = ""
def outputFile = output.outputFile
if (outputFile != null) {
def fileName = "${appName()}-${variant.versionCode}-V${variant.versionName}-${releaseTime()}-${productFlavors[0].name}-${buildType.name}.apk"
def fileName = "${appName()}_${variant.versionCode}_V${variant.versionName}_${releaseTime()}_${buildType.name}.apk"
output.outputFileName = fileName
}
}
}
signingConfig signingConfigs.mtk
buildConfigField "String", "platform", '"MTK"'
}
}
}
dependencies {
//implementation fileTree(include: ['*.jar'], dir: 'libs')
compileOnly files('src/main/libs/classes.jar')
// implementation fileTree(dir: "libs", include: ["*.jar"])
compileOnly files('libs/framework.jar')
compileOnly files('libs/cube_mdm.jar')
compileOnly files('libs/cube_sdk_v1.0.0.jar')
//版本高了idea plugin 下载VisualClassBytes修改version jclasslib最好用
// compileOnly files('libs/qz_cubemdm_sdk_v1.0.0_1.8.jar')
compileOnly files('libs/qz_cubemdm_sdk_v1.0.1_1.8.jar')
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation files('libs/ebf_tools_v1.0.jar')
implementation files('libs/vendor.mediatek.hardware.nvram-V1.0-java.jar')
implementation files('libs/BaiduTraceSDK_v3_1_10.jar')
implementation 'androidx.recyclerview:recyclerview:1.2.1'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.multidex:multidex:2.0.1'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0'
testImplementation 'junit:junit:4.13.1'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
implementation 'com.jakewharton:butterknife:10.1.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.1.0'
implementation 'uk.co.chrisjenx:calligraphy:2.3.0'
implementation "org.java-websocket:Java-WebSocket:1.4.1"
implementation 'com.squareup.okhttp3:okhttp:4.6.0'
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
implementation 'com.squareup.moshi:moshi:1.9.3'
//OkHttp
implementation 'com.squareup.okhttp3:okhttp:4.8.0'
implementation 'com.squareup.okhttp3:logging-interceptor:4.9.3'
//Retrofit
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-moshi:2.9.0'
implementation 'com.squareup.retrofit2:adapter-rxjava3:2.9.0'
// gson converter
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.4.0'
implementation 'io.reactivex.rxjava2:rxjava:2.2.5'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'
// 标准转换器,去掉 Retrofit以Mutipart上传参数时String参数会多一对双引号
implementation 'com.squareup.retrofit2:converter-scalars:2.3.0'
//RxJava
implementation 'io.reactivex.rxjava3:rxjava:3.0.0'
implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
//生命周期管理
implementation 'com.trello.rxlifecycle4:rxlifecycle:4.0.2'
implementation 'com.trello.rxlifecycle4:rxlifecycle-android:4.0.2'
implementation 'com.trello.rxlifecycle4:rxlifecycle-components:4.0.2'
implementation 'com.trello.rxlifecycle4:rxlifecycle-components-preference:4.0.2'
implementation 'com.trello.rxlifecycle4:rxlifecycle-android-lifecycle:4.0.2'
implementation 'com.jakewharton.rxbinding4:rxbinding:4.0.0'
implementation 'com.jeremyliao:live-event-bus-x:1.7.3'
//implementation "com.uber.autodispose:autodispose:1.3.0"
//implementation "com.uber.autodispose:autodispose-android-archcomponents:1.3.0"
implementation 'com.google.code.gson:gson:2.8.6'
implementation 'com.google.zxing:core:3.3.0'
implementation 'cn.jiguang.sdk:jpush:3.8.6' // 此处以JPush 3.5.6 版本为例。
implementation 'cn.jiguang.sdk:jcore:2.6.0' // 此处以JCore 2.2.8 版本为例。
implementation 'com.alibaba:fastjson:1.2.70'
implementation 'com.lzy.net:okgo:2.1.4'
implementation 'com.lzy.net:okrx:0.1.2'
//implementation 'com.lzy.net:okserver:1.1.3'
implementation 'com.blankj:utilcode:1.23.7'
//Google
implementation 'com.google.code.gson:gson:2.9.0'
implementation 'com.google.zxing:core:3.5.0'
//图片加载框架
implementation 'com.github.bumptech.glide:glide:4.13.2'
annotationProcessor 'com.github.bumptech.glide:compiler:4.13.2'
// debugImplementation because LeakCanary should only run in debug builds.
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.14'
//磁盘缓存
implementation 'com.jakewharton:disklrucache:2.0.2'
//阿里云推送
implementation 'com.aliyun.ams:alicloud-android-push:3.8.0'
//百度地图
implementation 'com.baidu.lbsyun:BaiduMapSDK_Location:9.1.8'
//MMKV
implementation 'com.tencent:mmkv-static:1.2.13'
//bugly
implementation 'com.tencent.bugly:crashreport:4.1.9.2'
//xCrash
implementation 'com.iqiyi.xcrash:xcrash-android-lib:3.0.0'
//工具类
implementation 'com.blankj:utilcodex:1.31.0'
//Aria
implementation 'com.arialyy.aria:core:3.8.15'
annotationProcessor 'com.arialyy.aria:compiler:3.8.15'
//高德地图定位
implementation 'com.amap.api:location:5.1.0'
//压缩文件解压
implementation 'org.zeroturnaround:zt-zip:1.13'
implementation 'org.zeroturnaround:zt-zip:1.15'
//更换字体框架
implementation 'uk.co.chrisjenx:calligraphy:2.3.0'
//Java WebSocket
implementation "org.java-websocket:Java-WebSocket:1.5.3"
//状态栏透明
implementation 'com.gitee.zackratos:UltimateBarX:0.8.0'
// // 基础依赖包,必须要依赖
// implementation 'com.gyf.immersionbar:immersionbar:3.0.0'
// // fragment快速实现可选
// implementation 'com.gyf.immersionbar:immersionbar-components:3.0.0'
// // kotlin扩展可选
// implementation 'com.gyf.immersionbar:immersionbar-ktx:3.0.0'
implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.24'
implementation 'com.facebook.rebound:rebound:0.3.8'
implementation 'com.king.view:circleprogressview:1.1.2'
// 吐司框架https://github.com/getActivity/Toaster
implementation 'com.github.getActivity:Toaster:12.6'
}
preBuild {
doLast {
def imlFile = file(project.name + ".iml")
// def imlFile = file("..\\.idea\\modules\\" + project.name + "\\" + rootProject.name + "." + project.name + ".iml")
println 'Change ' + project.name + '.iml order'
try {
def parsedXml = (new XmlParser()).parse(imlFile)
@@ -298,5 +797,8 @@ preBuild {
}
}
//https://www.pianshen.com/article/93481144911/
//https://blog.csdn.net/dhl_1986/article/details/102856026
//https://blog.csdn.net/zhonghe1114/article/details/80923730
//https://blog.csdn.net/u014175785/article/details/116235760
//使用系统编译后的framework.jar
}

BIN
app/keystore/G10PMTK11.jks Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
app/keystore/P22.keystore Normal file

Binary file not shown.

BIN
app/keystore/P50TD.jks Normal file

Binary file not shown.

BIN
app/keystore/T40Air.jks Normal file

Binary file not shown.

Binary file not shown.

BIN
app/keystore/U1302.keystore Normal file

Binary file not shown.

BIN
app/keystore/aiud.keystore Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
app/keystore/zhanrui12.jks Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
app/libs/cube_mdm.jar Normal file

Binary file not shown.

Binary file not shown.

BIN
app/libs/ebf_tools_v1.0.jar Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

118
app/libs/接口说明.txt Normal file
View File

@@ -0,0 +1,118 @@
一:对接方式: aidl
1.导入jar包依赖
2.绑定aidl服务:
Intent intent = new Intent("com.kte.interfacesettings.aidl");
intent.setPackage("com.kte.interfacesettings");
context.bindService(intent, aidlConnection, Context.BIND_AUTO_CREATE);
3.解绑服务:
unbindService(mConnection);
二:接口说明
// 启用/禁用MTP数据传输功能 :
void setMtpEnable(boolean enable);
// 启用/禁用Camera功能 :
void setCameraEnable(boolean enable);
// 启用/禁用蓝牙功能 :
void setBluetoothEnable(boolean enable);
// 启用/禁用wifi :
void setWifiAdvanceEnable(boolean enable);
// 设置默认浏览器:
void setDefaultBrowser(String packageName);
// 关机功能:
void shutdownDevice();
// 睡眠/唤醒功能(熄屏亮屏):
void lockNow(boolean on);
// 设置背光亮度(屏幕亮度-1,0-255 ):
void setBackLightBrightness(int brightness);
// 禁用/启用 飞行模式:
void setAirplaneDisable(boolean disable);
// 重启功能:
void rebootDevice();
// 清除最近任务:
void clearRecentTask();
// 清除应用数据:
void clearAppData(String packageName);
// 恢复出厂设置:
void wipeData();
// 静默安装apk功能
void silentInstall(String path,boolean autoLa);
// 静默卸载apk功能
void silentUninstall(String pkgName);
// 获取硬件MAC地址:
String getMACaddress();
// 静默截图功能(截屏)
Bitmap captureScreen(String savePath);
// 设置默认输入法
boolean setDefaultInputMethod(String ime);
// 设置默认播放器
boolean setDefaultVideoPlayer(String packageName,String className);
// 获取root状态
boolean isRooted();
// 设置锁屏壁纸
void setLockWallPaper(String filePath);
// 显示/隐藏下拉状态栏图标
void showNotificationItems(int item, boolean visible);
// 显隐系统设置项:
void setSettingOptionGoneorVisible(int item ,boolean visible);
// 获取当前所有正在运行的第三方应用进程接口
List<String> getThirdAppPkgList();
/**
* 打开/关闭护眼模式(夜间模式)
* @param state
* true 关闭;false 打开;默认是关闭状态;
**/
void setProtectEyeModeClosed(boolean state);
/**
* 获取护眼模式状态(夜间模式)
* @return state
* true 打开;false 关闭;
**/
boolean getProtectEyeMode();
/**
* 打开/关闭阅读模式(黑白屏)
* @param state
* true 关闭;false 打开;默认是关闭状态;
**/
void setReaderModeClosed(boolean state);
/**
* 获取阅读模式(黑白屏)
* @return state
* true 打开;false 关闭;
**/
boolean getReaderMode();

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

View File

@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">我的设备测试</string>
</resources>

View File

@@ -1,65 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.mjsheng.myappstore"
coreApp="true"
package="com.aoleyun.sn"
android:sharedUserId="android.uid.system">
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
<queries>
<intent>
<action android:name="android.intent.action.MAIN" />
</intent>
</queries>
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.DELETE_PACKAGES" />
<uses-permission android:name="android.permission.MASTER_CLEAR" />
<uses-permission android:name="android.permission.REBOOT" />
<uses-permission android:name="android.permission.DUMP" />
<uses-permission android:name="android.permission.READ_LOGS" />
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.REAL_GET_TASKS" />
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.SHUTDOWN" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.GET_PACKAGE_SIZE" />
<uses-permission android:name="android.permission.DELETE_CACHE_FILES" />
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" /> <!-- 静默安装权限 -->
<uses-permission
android:name="android.permission.INSTALL_PACKAGES"
tools:ignore="ProtectedPermissions" /> <!-- 应用卸载权限 -->
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission
android:name="android.permission.DELETE_PACKAGES"
tools:ignore="ProtectedPermissions" /> <!-- ##############################极光推送############################## -->
<!-- Required -->
<permission
android:name="${JPUSH_PKGNAME}.permission.JPUSH_MESSAGE"
android:protectionLevel="signature" /> <!-- Required -->
<uses-permission android:name="${JPUSH_PKGNAME}.permission.JPUSH_MESSAGE" />
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
<uses-permission android:name="android.permission.BATTERY_STATS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.DELETE_CACHE_FILES" />
<uses-permission android:name="android.permission.DUMP" />
<uses-permission android:name="android.permission.MASTER_CLEAR" />
<uses-permission android:name="android.permission.REBOOT" />
<uses-permission android:name="android.permission.REAL_GET_TASKS" />
<uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE" />
<uses-permission android:name="android.permission.SHUTDOWN" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.SET_WALLPAPER" />
<uses-permission
android:name="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS"
android:maxSdkVersion="22" />
<uses-permission
android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS"
android:maxSdkVersion="23" /> <!-- 高德地图 -->
android:maxSdkVersion="23" />
<!-- 静默安装权限 -->
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
<uses-permission
android:name="android.permission.INSTALL_PACKAGES"
tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<!-- 应用卸载权限 -->
<uses-permission android:name="android.permission.DELETE_PACKAGES" />
<uses-permission
android:name="android.permission.DELETE_PACKAGES"
tools:ignore="ProtectedPermissions" />
<!-- 自定义安装应用权限 -->
<uses-permission android:name="com.aoleyun.sn.permissions.INSTALL_APK" />
<permission android:name="com.aoleyun.sn.permissions.INSTALL_APK" />
<!-- 百度 -->
<!-- 这个权限用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 这个权限用于访问GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 用于访问wifi网络信息wifi信息会用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 这个权限用于获取wifi的获取权限wifi信息会用来进行网络定位 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 访问网络,网络定位需要上网 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 允许挂载和反挂载文件系统可移动存储 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<!-- 允许程序读取底层系统日志文件 -->
<uses-permission android:name="android.permission.READ_LOGS" />
<!-- 允许访问振动设备 -->
<uses-permission android:name="android.permission.VIBRATE" />
<!-- 允许使用PowerManager的 WakeLocks保持进程在休眠时从屏幕消失 -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<!-- 允许程序读取或写入系统设置 -->
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<!-- android 9.0上使用前台服务,需要添加权限 -->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<!-- 用于读取手机当前的状态 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 读取缓存数据 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!-- 获取模拟定位信息 -->
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
<!-- 【必须】 移动推送 TPNS SDK 所需权限 -->
<!-- <uses-permission android:name="android.permission.INTERNET" /> -->
<!-- <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> -->
<!-- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> -->
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
<!-- 【常用】 移动推送 TPNS SDK所需权限 -->
<!-- <uses-permission android:name="android.permission.WAKE_LOCK" /> -->
<!-- <uses-permission android:name="android.permission.VIBRATE" /> -->
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
<!-- <uses-permission android:name="android.permission.READ_PHONE_STATE" /> -->
<!-- <uses-permission android:name="android.permission.GET_TASKS" /> -->
<!-- 高德地图 -->
<!-- 用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!-- 用于访问GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- 用于获取运营商信息,用于支持提供运营商信息相关的接口 -->
<!-- <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> -->
<!-- 用于访问GPS定位 -->
<!-- <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> -->
<!-- 用于获取运营商信息,用于支持提供运营商信息相关的接口 -->
<!-- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> -->
<!-- 用于访问wifi网络信息wifi信息会用于进行网络定位 -->
<!-- <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> -->
@@ -72,12 +124,39 @@
<!-- 用于写入缓存数据到扩展存储卡 -->
<!-- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> -->
<!-- 用于申请调用A-GPS模块 -->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> <!-- 如果设置了target >= 28 如果需要启动后台定位则必须声明这个权限 -->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <!-- 如果您的应用需要后台定位权限且有可能运行在Android Q设备上,并且设置了target>28必须增加这个权限声明 -->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<!-- 如果设置了target >= 28 如果需要启动后台定位则必须声明这个权限 -->
<!-- <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> -->
<!-- 如果您的应用需要后台定位权限且有可能运行在Android Q设备上,并且设置了target>28必须增加这个权限声明 -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<uses-permission android:name="com.jiaoguanyi.appstore.permissions.INSTALL_APK" />
<permission android:name="com.jiaoguanyi.appstore.permissions.INSTALL_APK" />
<!-- 以下是鹰眼SDK基础权限 -->
<!-- 这个权限用于进行网络定位-->
<!-- <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />-->
<!-- 这个权限用于访问卫星系统接口提供的卫星定位信息-->
<!-- <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />-->
<!-- 用于访问wifi网络信息wifi信息会用于进行网络定位-->
<!-- <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />-->
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
<!-- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />-->
<!-- 这个权限用于获取wifi的获取权限wifi信息会用来进行网络定位-->
<!-- <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />-->
<!-- 写入扩展存储向扩展卡写入数据用于写入对象存储BOS数据-->
<!-- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />-->
<!-- 访问网络,网络定位需要上网-->
<!-- <uses-permission android:name="android.permission.INTERNET" />-->
<!-- Android O之后开启前台服务需要申请该权限 -->
<!-- <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />-->
<!-- Android Q之后后台定位需要申请该权限 -->
<!-- <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />-->
<!-- 以下不是鹰眼SDK需要的基础权限可选 -->
<!-- 用于加快首次卫星定位,可选权限,非必须-->
<!-- <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />-->
<!-- 用于Android M及以上系统申请加入忽略电池优化白名单可选权限非必须-->
<!-- <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />-->
<application
@@ -89,13 +168,9 @@
android:requestLegacyExternalStorage="true"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<service
android:name=".server.LogcatService"
android:enabled="true"
android:exported="true"></service>
<activity android:name=".activity.TopActivity" />
<activity android:name=".activity.HomeActivity">
<activity
android:name=".activity.SplashActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
@@ -103,27 +178,65 @@
</intent-filter>
</activity>
<activity
android:name=".activity.MainActivity"
android:excludeFromRecents="true"
android:launchMode="singleTop">
android:name=".activity.EyeProtectionActivity"
android:exported="true"
android:icon="@drawable/com_system_huyan"
android:label="护眼助手"
android:launchMode="singleInstance"
android:screenOrientation="userLandscape"
android:theme="@style/AppTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<!-- <intent-filter> -->
<!-- <action android:name="android.intent.action.MAIN" /> -->
<!-- <category android:name="android.intent.category.LAUNCHER" /> -->
<!-- </intent-filter> -->
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".activity.DiscardActivity"
android:name=".activity.CleanupActivity"
android:exported="true"
android:icon="@drawable/com_system_clean"
android:label="一键加速"
android:launchMode="singleInstance"
android:theme="@style/activity_styles">
<!-- <intent-filter>-->
<!-- <action android:name="android.intent.action.MAIN" />-->
<!-- <category android:name="android.intent.category.LAUNCHER" />-->
<!-- </intent-filter>-->
</activity>
<activity
android:name=".activity.main.MainActivity"
android:excludeFromRecents="true"
android:launchMode="singleTop" /> <!-- <service android:name=".server.MyDownloadService" /> -->
<service android:name=".server.GuardService" />
android:launchMode="singleTop" />
<activity android:name=".activity.TopActivity" />
<activity
android:name=".activity.update.UpdateActivity"
android:exported="true"
android:icon="@drawable/com_aoleyun_update"
android:label="检查更新"
android:launchMode="singleInstance">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".activity.update.AppUpdateActivity"
android:theme="@style/DialogCloseOnTouchOutside" />
<activity
android:name=".activity.requestlog.RequestLogActivity"
android:launchMode="singleTask" />
<activity
android:name=".activity.AudioActivity"
android:launchMode="singleTask"
android:screenOrientation="behind"
android:theme="@style/DialogCloseOnTouchOutside" />
<service
android:name=".server.StepService"
android:exported="true" />
<service
android:name=".server.MainService"
android:name=".service.main.MainService"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="1000">
@@ -131,22 +244,68 @@
<action android:name="android.intent.action.SCREEN_ON" />
<action android:name="android.intent.action.SCREEN_OFF" />
<action android:name="NIGHT_DISPLAY_ENABLED" />
<action android:name="NIGHT_DISPLAY_DISABLED" />
<action android:name="READ_MODEL_ENABLED" />
<action android:name="READ_MODEL_DISABLED" />
<data android:scheme="package" />
</intent-filter>
</service> <!-- <service -->
<!-- android:name=".server.InitJpushServer" -->
<!-- android:enabled="true" -->
<!-- android:exported="true"> -->
<!-- </service> -->
</service>
<service
android:name=".service.RemoteService"
android:enabled="true"
android:exported="true"
android:process=":remote" />
<service
android:name=".service.LogcatService"
android:enabled="true"
android:exported="true" />
<service
android:name=".service.GuardService"
android:exported="true">
<intent-filter android:priority="1000">
<action android:name="android.intent.action.USER_PRESENT" />
<action android:name="android.intent.action.SCREEN_OFF" />
<action android:name="android.intent.action.SCREEN_ON" />
<action android:name="android.intent.action.USER_UNLOCKED" />
<action android:name="android.intent.action.ACTION_SHUTDOWN" />
<action android:name="android.intent.action.REBOOT" />
<action android:name="android.intent.action.FACTORY_RESET" />
<action android:name="android.intent.action.MASTER_CLEAR" />
<action android:name="android.intent.action.MASTER_CLEAR_NOTIFICATION" />
<action android:name="android.intent.action.FORCE_FACTORY_RESET" />
<data android:scheme="package" />
</intent-filter>
</service>
<service
android:name=".service.StepService"
android:exported="true">
<intent-filter android:priority="1000">
<action android:name="android.intent.action.SCREEN_OFF" />
<action android:name="android.intent.action.SCREEN_ON" />
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.USER_PRESENT" />
<action android:name="android.intent.action.ACTION_SHUTDOWN" />
<action android:name="android.intent.action.REBOOT" />
<action android:name="android.intent.action.FACTORY_RESET" />
<action android:name="android.intent.action.MASTER_CLEAR" />
<data android:scheme="package" />
</intent-filter>
</service>
<receiver
android:name=".receiver.NewAppReceiver"
android:enabled="true"
android:exported="true"
android:permission="com.example.broadcast.permission">
android:permission="android.permission.INSTALL_PACKAGES">
<intent-filter android:priority="1000">
<action android:name="android.intent.action.PACKAGE_ADDED" />
<action android:name="android.intent.action.PACKAGE_REPLACED" />
<action android:name="android.intent.action.PACKAGE_REMOVED" />
<action android:name="android.intent.action.PACKAGE_CHANGED" />
<data android:scheme="package" />
</intent-filter>
@@ -183,52 +342,13 @@
<!-- <action android:name="android.intent.action.MEDIA_REMOVED" /> -->
<!-- <action android:name="android.intent.action.MEDIA_BAD_REMOVAL" /> -->
<!-- 自定义广播 -->
<action android:name="com.jiaoguanyi.appstore.intent.action.BOOT_COMPLETED" />
<action android:name="aoleyun.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver> <!-- <receiver android:name=".log.LogReceiver" -->
<!-- android:permission="android.permission.DUMP" > -->
<!-- <intent-filter> -->
<!-- <action android:name="android.intent.action.BOOT_COMPLETED" /> -->
<!-- <action android:name="com.debug.loggerui.ADB_CMD" /> -->
<!-- <action android:name="com.mediatek.mdlogger.AUTOSTART_COMPLETE" /> -->
<!-- <action android:name="com.mediatek.log2server.EXCEPTION_HAPPEND" /> -->
<!-- <action android:name="com.debug.loggerui.bypass" /> -->
<!-- <category android:name="android.intent.category.DEFAULT" /> -->
<!-- </intent-filter> -->
<!-- </receiver> -->
<receiver
android:name=".receiver.MyJPushReceiver"
android:enabled="true">
<intent-filter>
</receiver>
<!-- Required 用户注册SDK的intent -->
<action android:name="cn.jpush.android.intent.REGISTRATION" />
<!-- Required 用户接收SDK消息的intent -->
<action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" />
<!-- Required 用户接收SDK通知栏信息的intent -->
<action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" />
<!-- Required 用户打开自定义通知栏的intent -->
<action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" />
<!-- 接收网络变化 连接/断开 since 1.6.3 -->
<action android:name="cn.jpush.android.intent.CONNECTION" />
<category android:name="${JPUSH_PKGNAME}" />
</intent-filter>
</receiver> <!-- Required. For publish channel feature -->
<!-- JPUSH_CHANNEL 是为了方便开发者统计APK分发渠道。 -->
<!-- 例如: -->
<!-- 发到 Google Play 的APK可以设置为 google-play; -->
<!-- 发到其他市场的 APK 可以设置为 xxx-market。 -->
<!-- 目前这个渠道统计功能的报表还未开放。 -->
<!-- Required. For publish channel feature -->
<!-- JPUSH_CHANNEL 是为了方便开发者统计APK分发渠道。 -->
<!-- 例如: -->
<!-- 发到 Google Play 的APK可以设置为 google-play; -->
<!-- 发到其他市场的 APK 可以设置为 xxx-market。 -->
<!-- 目前这个渠道统计功能的报表还未开放。 -->
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.jiaoguanyi.appstore.fileprovider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
@@ -236,146 +356,72 @@
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider> <!-- ##############################极光推送############################## -->
<!-- Rich push 核心功能 since 2.0.6 -->
<activity
android:name="cn.jpush.android.ui.PopWinActivity"
android:exported="false"
android:theme="@style/MyDialogStyle"
tools:replace="android:exported" /> <!-- Required SDK核心功能 -->
<activity
android:name="cn.jpush.android.ui.PushActivity"
android:configChanges="orientation|keyboardHidden"
android:exported="false"
android:theme="@android:style/Theme.NoTitleBar"
tools:replace="android:exported">
<intent-filter>
<action android:name="cn.jpush.android.ui.PushActivity" />
</provider>
<category android:name="android.intent.category.DEFAULT" />
<category android:name="com.jiaoguanyi.appstore" />
</intent-filter>
</activity> <!-- Required SDK 核心功能 -->
<!-- 可配置android:process参数将PushService放在其他进程中 -->
<!-- 百度地图 -->
<!-- 声明service组件 -->
<service
android:name="cn.jpush.android.service.PushService"
android:exported="false"
android:process=":pushcore">
<intent-filter>
<action android:name="cn.jpush.android.intent.REGISTER" />
<action android:name="cn.jpush.android.intent.REPORT" />
<action android:name="cn.jpush.android.intent.PushService" />
<action android:name="cn.jpush.android.intent.PUSH_TIME" />
</intent-filter>
</service> <!-- since 3.0.9 Required SDK 核心功能 -->
<provider
android:name="cn.jpush.android.service.DataProvider"
android:authorities="com.jiaoguanyi.appstore.DataProvider"
android:exported="false"
android:process=":pushcore"
tools:replace="android:authorities" /> <!-- since 1.8.0 option 可选项。用于同一设备中不同应用的JPush服务相互拉起的功能。 -->
<!-- 若不启用该功能可删除该组件,将不拉起其他应用也不能被其他应用拉起 -->
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":location" />
<!--鹰眼追踪service-->
<service
android:name="cn.jpush.android.service.DaemonService"
android:name="com.baidu.trace.LBSTraceService"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="cn.jpush.android.intent.DaemonService" />
android:process=":trace" />
<category android:name="com.jiaoguanyi.appstore" />
</intent-filter>
</service> <!-- since 3.1.0 Required SDK 核心功能 -->
<provider
android:name="cn.jpush.android.service.DownloadProvider"
android:authorities="com.jiaoguanyi.appstore.DownloadProvider"
android:exported="true"
tools:replace="android:authorities" /> <!-- Required SDK核心功能 -->
<receiver
android:name="cn.jpush.android.service.PushReceiver"
android:enabled="true"
android:exported="false">
<intent-filter android:priority="1000">
<action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" />
<!-- Required 显示通知栏 -->
<category android:name="com.jiaoguanyi.appstore" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.USER_PRESENT" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
<!-- Optional -->
<intent-filter>
<action android:name="android.intent.action.PACKAGE_ADDED" />
<action android:name="android.intent.action.PACKAGE_REMOVED" />
<!-- 应用的其它配置 -->
<uses-library
android:name="org.apache.http.legacy"
android:required="false" />
<data android:scheme="package" />
</intent-filter>
</receiver> <!-- Required SDK核心功能 -->
<!-- 消息接收监听器 (用户可自主扩展) -->
<receiver
android:name="cn.jpush.android.service.AlarmReceiver"
android:exported="false" /> <!-- since 3.3.0 Required SDK核心功能 -->
<activity
android:name="cn.jpush.android.service.JNotifyActivity"
android:exported="true"
android:taskAffinity="jpush.custom"
android:theme="@android:style/Theme.Translucent.NoTitleBar">
<intent-filter>
<action android:name="cn.jpush.android.intent.JNotifyActivity" />
<category android:name="com.jiaoguanyi.appstore" />
</intent-filter>
</activity> <!-- Since JCore2.0.0 Required SDK核心功能 -->
<!-- 这个Service要继承JCommonService -->
<service
android:name=".jpush.PushService"
android:process=":pushcore">
<intent-filter>
<action android:name="cn.jiguang.user.service.action" />
</intent-filter>
</service> <!-- User defined. For test only 用户自定义的广播接收器 -->
<receiver
android:name=".jpush.MyReceiver"
android:enabled="true"
android:name=".push.alipush.AliyunMessageReceiver"
android:exported="false">
<intent-filter>
<action android:name="cn.jpush.android.intent.REGISTRATION" />
<!-- Required 用户注册SDK的intent -->
<action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" />
<!-- Required 用户接收SDK消息的intent -->
<action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" />
<!-- Required 用户接收SDK通知栏信息的intent -->
<action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" />
<!-- Required 用户打开自定义通知栏的intent -->
<action android:name="cn.jpush.android.intent.CONNECTION" />
<!-- 接收网络变化 连接/断开 since 1.6.3 -->
<category android:name="com.jiaoguanyi.appstore" />
<action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" />
</intent-filter>
</receiver> <!-- User defined. For test only 用户自定义接收消息器,3.0.7开始支持,目前新tag/alias接口设置结果会在该广播接收器对应的方法中回调 -->
<receiver android:name=".jpush.MyJPushMessageReceiver">
<intent-filter>
<action android:name="cn.jpush.android.intent.RECEIVE_MESSAGE" />
<category android:name="com.jiaoguanyi.appstore" />
<action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" />
</intent-filter>
<intent-filter>
<action android:name="com.alibaba.sdk.android.push.RECEIVE" />
</intent-filter>
</receiver>
<meta-data
android:name="JPUSH_CHANNEL"
android:value="developer-default" /> <!-- Required. AppKey copied from Portal -->
<meta-data
android:name="JPUSH_APPKEY"
android:value="${JPUSH_APPKEY}" /> <!-- 高德地图 -->
<!-- 设置key -->
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="${AMAP_KEY}" /> <!-- 定位需要的服务 适配Android Q需要加上android:foregroundServiceType="location" -->
<service
android:name="com.amap.api.location.APSService"
android:foregroundServiceType="location" />
android:name=".push.alipush.AliMessageIntentService"
android:exported="false">
<intent-filter>
<action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" />
</intent-filter>
<intent-filter>
<action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" />
</intent-filter>
<intent-filter>
<action android:name="com.alibaba.sdk.android.push.RECEIVE" />
</intent-filter>
</service>
<meta-data
android:name="CHANNEL_VALUE"
android:value="${channel_value}" />
android:name="com.aoleyun.sn.base.CustomGlideModule"
android:value="AppGlideModule" />
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="CjFhFE1UP5G14tMBz1kWs7ca92bgHuLr" />
<!-- 请填写你自己的- appKey -->
<meta-data
android:name="com.alibaba.app.appkey"
android:value="333598267" />
<!-- 请填写你自己的appSecret -->
<meta-data
android:name="com.alibaba.app.appsecret"
android:value="300dfca550f248598bc8b86c6cb9e76e" />
</application>
</manifest>

View File

@@ -1,5 +1,5 @@
// KeepAliveConnection.aidl
package com.mjsheng.myappstore;
package com.aoleyun.sn;
// Declare any non-default types here with import statements

View File

@@ -0,0 +1,17 @@
// SystemInfoInterface.aidl
package com.aoleyun.sn;
// Declare any non-default types here with import statements
interface SystemInfoInterface {
/**
* Demonstrates some basic types that you can use as parameters
* and return values in AIDL.
*/
void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
double aDouble, String aString);
String getSerial();
boolean isDeviceLocked();
boolean isBrowserInput();
}

View File

@@ -12,7 +12,7 @@
<netCheck value="true"/>
<!--除非无法使用注解否则不建议使用广播来接受任务状态true使用广播接收任务状态false不适用广播接收状态 -->
<!-- http://aria.laoyuyu.me/aria_doc/api/use_broadcast.html -->
<useBroadcast value="true"/>
<useBroadcast value="false"/>
<!--断网的时候是否重试true断网也重试false断网不重试直接走失败的回调-->
<notNetRetry value="true"/>
</app>
@@ -32,7 +32,7 @@
3、只对新的多线程下载任务有效
4、只对多线程的任务有效
-->
<useBlock value="true"/>
<useBlock value="false"/>
<!--设置下载线程数下载线程数不能小于1
注意:

View File

@@ -0,0 +1,160 @@
package com.aoleyun.sn.activity;
import android.content.Context;
import android.content.Intent;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.PowerManager;
import android.os.Vibrator;
import android.util.Log;
import android.view.View;
import androidx.databinding.DataBindingUtil;
import com.aoleyun.sn.BuildConfig;
import com.aoleyun.sn.R;
import com.aoleyun.sn.base.BaseDataBindingActivity;
import com.aoleyun.sn.databinding.ActivityAudioBinding;
import com.aoleyun.sn.utils.WakeUpUtils;
public class AudioActivity extends BaseDataBindingActivity {
private static final String TAG = "AudioActivity";
private ActivityAudioBinding mBinding;
private PowerManager pm;
private PowerManager.WakeLock wakeLock;
private AudioManager audioManager;
private Vibrator vibrator;
@Override
protected void initDataBinding() {
mBinding = DataBindingUtil.setContentView(this, R.layout.activity_audio);
}
@Override
public void initView() {
mBinding.tvStop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
releasePlayer();
finish();
}
});
}
@Override
public void initData() {
pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_DIM_WAKE_LOCK, "WakeAndLock");
wakeLock.acquire(60 * 1000L);
vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
if (vibrator.hasVibrator()) {
long[] pattern = {1000, 5000, 1000, 5000};
vibrator.vibrate(pattern, 0);
} else {
Log.e(TAG, "initView: no vibrator");
}
WakeUpUtils.wakeUpAndUnlockScreen(this);
setMaxVolume();
defaultCallMediaPlayer();
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Log.e(TAG, "onNewIntent: " + intent.getAction());
}
@Override
protected void onDestroy() {
vibrator.cancel();
releasePlayer();
mediaPlayer = null;
super.onDestroy();
}
private void releasePlayer() {
try {
if (mediaPlayer != null) {
if (mediaPlayer.isPlaying()) {
mediaPlayer.stop();
}
mediaPlayer.release();
}
} catch (Exception e) {
Log.e(TAG, "releasePlayer: " + e.getMessage());
}
}
/**
* 播放系统默认来电铃声
*
* @return MediaPlayer对象
* @throws Exception
*/
MediaPlayer mediaPlayer;
public void defaultCallMediaPlayer() {
if (mediaPlayer != null) {
if (mediaPlayer.isPlaying()) {
mediaPlayer.stop();
}
mediaPlayer.release();
}
mediaPlayer = MediaPlayer.create(this, R.raw.test);
try {
// mediaPlayer.prepare();
mediaPlayer.setLooping(false);
int duration = mediaPlayer.getDuration() / 1000;
Log.e(TAG, "defaultCallMediaPlayer: " + "duration: " + duration);
int loop = 0;
if (duration <= 1) {
loop = 30;
} else {
loop = (30 / duration);
}
final int[] soundCount = {0};
int finalLoop = loop;
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
if (soundCount[0] <= finalLoop) {
setMaxVolume();
mediaPlayer.start();
soundCount[0] += 1;
Log.e(TAG, "onCompletion: " + "loop: " + finalLoop);
Log.e(TAG, "onCompletion: " + "soundCount: " + soundCount[0]);
} else {
if (mediaPlayer.isPlaying()) {
mediaPlayer.stop();
}
mediaPlayer.release();
Log.e(TAG, "onCompletion: " + "loop: " + finalLoop);
Log.e(TAG, "onCompletion: " + "soundCount: " + soundCount[0]);
}
}
});
mediaPlayer.setLooping(false);
mediaPlayer.start();
} catch (Exception e) {
e.printStackTrace();
Log.e(TAG, "defaultCallMediaPlayer: " + e.getMessage());
}
}
private void setMaxVolume() {
if (BuildConfig.DEBUG) {
return;
}
AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
int ringMax = audioManager.getStreamMaxVolume(AudioManager.STREAM_RING);
int musicMax = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
int voiceMax = audioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL);
audioManager.setStreamVolume(AudioManager.STREAM_RING, ringMax, 0);
audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL, voiceMax, 0);
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, musicMax, 0); //音乐音量
audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
audioManager.setSpeakerphoneOn(true);
}
}

View File

@@ -0,0 +1,117 @@
package com.aoleyun.sn.activity;
import android.app.ActivityManager;
import android.content.Context;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import androidx.databinding.DataBindingUtil;
import com.aoleyun.sn.BuildConfig;
import com.aoleyun.sn.R;
import com.aoleyun.sn.base.BaseDataBindingActivity;
import com.aoleyun.sn.base.mvp.BaseMvpActivity;
import com.aoleyun.sn.databinding.ActivityCleanupBinding;
import com.aoleyun.sn.utils.ApkUtils;
import com.aoleyun.sn.utils.AppUtil;
import com.hjq.toast.Toaster;
import com.king.view.circleprogressview.CircleProgressView;
import java.lang.reflect.Method;
import java.util.List;
public class CleanupActivity extends BaseDataBindingActivity {
private static final String TAG = "CleanupActivity";
private ActivityCleanupBinding mBinding;
/**
* 设置布局
*/
@Override
public boolean setNightMode() {
return true;
}
@Override
protected void initDataBinding() {
mBinding = DataBindingUtil.setContentView(this,R.layout.activity_cleanup);
}
/**
* 初始化视图
*/
@Override
public void initView() {
mBinding.tvClean.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
killBackgroundApp();
}
});
refreshMemory();
}
private void killBackgroundApp() {
List<String> pkgList = ApkUtils.queryFilterAppList(this);
for (String pkg : pkgList) {
if (pkg.equalsIgnoreCase(BuildConfig.APPLICATION_ID)
|| "com.tencent.mm".equals(pkg)
|| "com.uiui.sn".equals(pkg)
) {
continue;
}
killBackgroundProcesses(pkg);
}
Toaster.show(String.format(getString(R.string.clear_app_size), pkgList.size()));
refreshMemory();
Handler.getMain().postDelayed(new Runnable() {
@Override
public void run() {
finish();
}
}, 1500);
}
private void killBackgroundProcesses(String packageName) {
ActivityManager activityManager;
try {
activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
activityManager.killBackgroundProcesses(packageName);
Method forceStopPackage = activityManager.getClass()
.getDeclaredMethod("forceStopPackage", String.class);
// Log.e(TAG, "killBackgroundProcesses: " + packageName);
forceStopPackage.setAccessible(true);
forceStopPackage.invoke(activityManager, packageName);
} catch (Exception e) {
Log.e(TAG, "killBackgroundProcesses: " + e.getMessage());
e.printStackTrace();
}
}
private void refreshMemory() {
long avail = AppUtil.getAvailMemory(this);
long total = AppUtil.getTotalMemory(this);
int x = (int) (((total - avail) / (double) total) * 100);
// if (x > 80) {
// cpv.setProgressColor(mShaderColorsRed);
// } else {
// cpv.setProgressColor(mShaderColors);
// }
mBinding.cpv.showAnimation(0, x, 1000);
float x2 = (((total - avail) / (float) total));
}
/**
* 初始化数据
*/
@Override
public void initData() {
}
}

View File

@@ -0,0 +1,98 @@
package com.aoleyun.sn.activity;
import android.provider.Settings;
import android.view.View;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.databinding.DataBindingUtil;
import com.aoleyun.sn.R;
import com.aoleyun.sn.base.BaseDataBindingActivity;
import com.aoleyun.sn.base.mvp.BaseMvpActivity;
import com.aoleyun.sn.databinding.ActivityEyeProtectionBinding;
import com.aoleyun.sn.view.ToggleButton;
import com.hjq.toast.Toaster;
public class EyeProtectionActivity extends BaseDataBindingActivity {
private ActivityEyeProtectionBinding mBinding;
@Override
public boolean setNightMode() {
return true;
}
@Override
protected void initDataBinding() {
mBinding = DataBindingUtil.setContentView(this, R.layout.activity_eye_protection);
}
@Override
public void initView() {
mBinding.toggleButton1.setOnToggleChanged(new ToggleButton.OnToggleChanged() {
@Override
public void onToggle(boolean on) {
Settings.Secure.putInt(getContentResolver(), Settings.Secure.NIGHT_DISPLAY_ACTIVATED, on ? 1 : 0);
}
});
mBinding.toggleButton2.setOnToggleChanged(new ToggleButton.OnToggleChanged() {
@Override
public void onToggle(boolean on) {
Settings.Secure.putInt(getContentResolver(), Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED, on ? 1 : 0);
Settings.Secure.putInt(getContentResolver(), Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER, on ? 0 : 1);
}
});
mBinding.toggleButton3.setDisable(true);
mBinding.toggleButton3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toaster.show("此功能暂未开放");
}
});
mBinding.toggleButton4.setDisable(true);
mBinding.toggleButton4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toaster.show("此功能暂未开放");
}
});
mBinding.toggleButton5.setDisable(true);
mBinding.toggleButton5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toaster.show("此功能暂未开放");
}
});
mBinding.clExit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
}
@Override
public void initData() {
}
@Override
protected void onResume() {
super.onResume();
int nightDisplay = Settings.Secure.getInt(getContentResolver(), Settings.Secure.NIGHT_DISPLAY_ACTIVATED, 0);
if (nightDisplay == 1) {
mBinding.toggleButton1.setToggleOn();
} else {
mBinding.toggleButton1.setToggleOff();
}
int accessibilityDisplay = Settings.Secure.getInt(getContentResolver(), Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED, 0);
if (accessibilityDisplay == 1) {
mBinding.toggleButton2.setToggleOn();
} else {
mBinding.toggleButton2.setToggleOff();
}
}
}

View File

@@ -0,0 +1,271 @@
package com.aoleyun.sn.activity;
import android.annotation.SuppressLint;
import android.app.StatusBarManager;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.media.AudioManager;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.provider.Settings;
import android.util.Log;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import com.aoleyun.sn.BuildConfig;
import com.aoleyun.sn.R;
import com.aoleyun.sn.activity.main.MainActivity;
import com.aoleyun.sn.comm.CommonConfig;
import com.aoleyun.sn.comm.JGYActions;
import com.aoleyun.sn.comm.PackageNames;
import com.aoleyun.sn.network.NetInterfaceManager;
import com.aoleyun.sn.service.LogcatService;
import com.aoleyun.sn.utils.ApkUtils;
import com.aoleyun.sn.utils.FlowInfo;
import com.aoleyun.sn.utils.GetFlowUtil;
import com.aoleyun.sn.utils.JgyUtils;
import com.aoleyun.sn.utils.NetworkUtils;
import com.aoleyun.sn.utils.SPUtils;
import com.aoleyun.sn.utils.ServiceAliveUtils;
import com.aoleyun.sn.utils.Utils;
import com.blankj.utilcode.util.PathUtils;
import com.google.gson.Gson;
import com.tencent.mmkv.MMKV;
import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Set;
public class SplashActivity extends AppCompatActivity {
private static final String TAG = "SplashActivity";
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
private Button bt_log;
private Button bt_stop;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setBar();
setContentView(R.layout.activity_home);
initView();
debugTest();
new Handler().postDelayed(() -> {
startActivity(new Intent(SplashActivity.this, MainActivity.class));
finish();
// sendBroadcastStatus("0");
// startActivity(new Intent(SplashActivity.this, CheckNetActivity.class));
}, 2000);
}
public void sendBroadcastStatus(String status) {
Intent intent = new Intent("receiver");
intent.setPackage("com.aoleyunos.dop7");
intent.putExtra("login_status", status);
sendBroadcast(intent);
}
private void setBar() {
UltimateBarX.statusBar(this)
.transparent()
.colorRes(R.color.colorPrimaryDark)
.light(true)
.apply();
UltimateBarX.navigationBar(this)
.transparent()
.colorRes(R.color.colorPrimaryDark)
.light(true)
.apply();
}
private void initView() {
if (BuildConfig.DEBUG) {
// JgyUtils.getInstance().showApp("com.gaomuxuexi34");
JgyUtils.getModel();
Utils.getAndroiodScreenProperty(SplashActivity.this);
Log.e(TAG, "getOperators: " + NetworkUtils.getOperators(this));
Log.e(TAG, "PublicIP: " + mMMKV.decodeString(NetInterfaceManager.PublicIP, ""));
NetInterfaceManager.GetWhois();
Log.e(TAG, "initView: " + NetworkUtils.getPhoneNumber(this));
FlowInfo flowInfo1 = GetFlowUtil.getAppFlowInfo(BuildConfig.APPLICATION_ID, this);
Log.e(TAG, "initView: " + GetFlowUtil.byteToMB(flowInfo1.getUpKb()));
Log.e(TAG, "initView: " + GetFlowUtil.byteToMB(flowInfo1.getDownKb()));
FlowInfo flowInfo2 = GetFlowUtil.getAppFlowInfo("com.aoleyun.appstore", this);
Log.e(TAG, "initView: " + GetFlowUtil.byteToMB(flowInfo2.getUpKb()));
Log.e(TAG, "initView: " + GetFlowUtil.byteToMB(flowInfo2.getDownKb()));
Log.e(TAG, "initView: " + Utils.getCurrentChargingCurrent());
Log.e(TAG, "initView: " + Utils.getCurrentChargingVoltage());
ApkUtils.showAllApp(this);
// JgyUtils.getInstance().cleanBackgroundMemory();
// NetInterfaceManager.getInstance().uploadLogFile();
bt_log = findViewById(R.id.bt_log);
bt_log.setVisibility(View.VISIBLE);
bt_log.setOnClickListener(view -> {
if (!ServiceAliveUtils.isServiceAlive(SplashActivity.this, LogcatService.class.getName())) {
startService(new Intent(SplashActivity.this, LogcatService.class));
}
Intent intent = new Intent(LogcatService.LOGCAT_START_ACTION);
sendBroadcast(intent);
});
bt_stop = findViewById(R.id.bt_stop);
bt_stop.setVisibility(View.VISIBLE);
bt_stop.setOnClickListener(view -> {
if (!ServiceAliveUtils.isServiceAlive(SplashActivity.this, LogcatService.class.getName())) {
startService(new Intent(SplashActivity.this, LogcatService.class));
}
Intent intent = new Intent(LogcatService.LOGCAT_STOP_ACTION);
sendBroadcast(intent);
});
}
}
private void debugTest() {
// if (!BuildConfig.DEBUG) return;
// File file = new File("/system/media/bootanimation2.zip");
// if (file.exists()){
// Log.e(TAG, "debugTest: "+"file.exists" );
// }else {
// Log.e(TAG, "debugTest: "+"file not exists" );
// }
// if (file.delete()){
// Log.e(TAG, "debugTest: "+"file.delete" );
// }else {
// Log.e(TAG, "debugTest: "+"file delete failed" );
// }
// Utils.getHardware(this);
// setWebView();
// hideStatusBar();
// boolean qch_force_app = Settings.System.putString(getContentResolver(), "qch_launcher_icon_app", "");
Log.i(TAG, "DebugTest: qch_launcher_icon_app:" + Settings.System.getString(getContentResolver(), "qch_launcher_icon_app"));
Log.i(TAG, "DebugTest: aole_hide_NavigationBar: " + Settings.System.getString(getContentResolver(), CommonConfig.AOLE_ACTION_HIDE_NAVIGATION_BAR));
Set<String> aole_all_app_white_list = mMMKV.decodeStringSet(CommonConfig.AOLE_ALL_APP_WHITE_LIST_KEY);
Log.i(TAG, "debugTest: aole_all_app_white_list:" + aole_all_app_white_list);
// String aole_app_forbid = Settings.System.getString(getContentResolver(), CommonConfig.AOLE_ACTION_APP_FORBID);
// if (!TextUtils.isEmpty(aole_app_forbid)) {
// Settings.System.putString(getContentResolver(), CommonConfig.AOLE_ACTION_APP_FORBID, aole_app_forbid + ",com.aoleyun.browser");
// }
// Log.e(TAG, "debugTest: aole_app_forbid:" + aole_app_forbid);
Log.i(TAG, "debugTest: ip = " + JgyUtils.getInstance().getIPAddress());
Log.i(TAG, "debugTest: getPackage = " + Utils.getPackage());
Log.i(TAG, "debugTest: getMacAddress = " + Utils.getAndroid10MAC(this));
// Log.i(TAG, "debugTest: iptables = " + CmdUtil.execute("iptables -L -n" ).toString());
Log.i(TAG, "debugTest: " + Utils.getAndroid10MAC(this));
Log.e(TAG, "getCustomVersion: " + Utils.getCustomVersion());
Log.e(TAG, "getRomVersion: " + Utils.getRomVersion());
Log.i(TAG, "debugTest: " + BuildConfig.VERSION_NAME);
Log.i(TAG, "debugTest: " + Utils.getAPPVersionName(PackageNames.APPSTORE, this));
Log.i(TAG, "debugTest: " + Utils.getAndroid7MAC());
Log.i(TAG, "debugTest: launcher3 " + JgyUtils.getInstance().getStartClassName("com.android.launcher3"));
// try {
// new CacheUtils().cleanApplicationUserData(HomeActivity.this, "com.android.launcher3");
// } catch (Exception e) {
// e.printStackTrace();
// Log.e(TAG, "DebugTest: " + e.getMessage());
// }
// ActivityManager mAm = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
// mAm.killBackgroundProcesses("com.android.documentsui");
Log.e(TAG, "debugTest: SPUtils all " + new Gson().toJson(SPUtils.getAll(this)));
// Utils.getPublicIP(this);
Utils.obtainWifiInfo(this);
Log.e("getLocalIP", "set: " + Utils.getIPAddress(this));
// WiFiUtils.getInstance().connectWifiPws("七彩宏云","colorfulyun.com");
// WiFiUtils.getInstance().connectWifiPws("fht","colorfulyun.com");
// WiFiUtils.getInstance().connectWifiPws("tt","colorfulyun.com");
// JgyUtils.getInstance().shutdown();
Log.e(TAG, "debugTest: " + PathUtils.getExternalDownloadsPath());
Log.e(TAG, "debugTest: " + ContextCompat.getExternalFilesDirs(this, Environment.DIRECTORY_DOWNLOADS)[0]);
//静音
AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.P) {
// int ringMax = audioManager.getStreamMinVolume(AudioManager.STREAM_RING);
// int musicMax = audioManager.getStreamMinVolumeInt(AudioManager.STREAM_MUSIC);
// int voiceMax = audioManager.getStreamMinVolumeInt(AudioManager.STREAM_VOICE_CALL);
// audioManager.setStreamVolume(AudioManager.STREAM_RING, ringMax, 0);
// audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL, voiceMax, 0);
// audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, musicMax, 0); //音乐音量
}
}
@SuppressLint("NewApi")
private void hideStatusBar() {
StatusBarManager mStatusBarManager = (StatusBarManager) getApplicationContext().getSystemService(Context.STATUS_BAR_SERVICE);
mStatusBarManager.disable(StatusBarManager.DISABLE_HOME);//隐藏home键
mStatusBarManager.disable(StatusBarManager.DISABLE_BACK);//隐藏返回键
mStatusBarManager.disable(StatusBarManager.DISABLE_RECENT | StatusBarManager.DISABLE_HOME);
mStatusBarManager.disable(StatusBarManager.DISABLE_BACK | StatusBarManager.DISABLE_RECENT | StatusBarManager.DISABLE_HOME);
mStatusBarManager.disable(StatusBarManager.DISABLE_RECENT);//隐藏recent键
mStatusBarManager.disable(StatusBarManager.DISABLE_NONE);//显示隐藏的虚拟按键
}
@RequiresApi(api = Build.VERSION_CODES.O)
private void bootanimotion() {
File file = new File(Environment.getExternalStorageDirectory() + File.separator + "bootanimation.zip");
String path0 = "/data/local/qchmedia/bootanimation.zip";
if (file.exists()) {
File file1 = new File(path0);
if (!file1.exists()) {
file.mkdirs();
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
Log.e("bootanimation", e.getMessage());
}
}
Log.e("bootanimation", "SD卡路径存在");
try {
Path path = Paths.get(file.getAbsolutePath());
Files.copy(path, new FileOutputStream(path0));
} catch (Exception e) {
Log.e("bootanimation", e.getMessage());
}
}
}
static final String url = "www.baidu.com";
private void setWebView() {
WebView webView = new WebView(this);
webView.loadUrl(url);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient() {
//页面加载开始
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}
//页面加载完成
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
String realUrl = url;
//这个realUrl即为重定向之后的地址
Log.e(TAG, "onPageFinished: " + realUrl);
}
});
}
}

View File

@@ -1,11 +1,11 @@
package com.mjsheng.myappstore.activity;
package com.aoleyun.sn.activity;
import android.content.Intent;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.KeyEvent;
import com.mjsheng.myappstore.R;
import com.aoleyun.sn.R;
public class TopActivity extends AppCompatActivity {

View File

@@ -0,0 +1,560 @@
package com.aoleyun.sn.activity.main;
import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.graphics.Bitmap;
import android.os.Build;
import android.os.IBinder;
import android.os.SystemClock;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.View;
import android.view.WindowManager;
import androidx.lifecycle.Observer;
import com.aoleyun.sn.BuildConfig;
import com.aoleyun.sn.R;
import com.aoleyun.sn.activity.requestlog.RequestLogActivity;
import com.aoleyun.sn.activity.update.UpdateActivity;
import com.aoleyun.sn.base.mvvm.BaseMvvmActivity;
import com.aoleyun.sn.bean.AppSettings;
import com.aoleyun.sn.bean.StudentsInfo;
import com.aoleyun.sn.comm.CommonConfig;
import com.aoleyun.sn.comm.JGYActions;
import com.aoleyun.sn.comm.PackageNames;
import com.aoleyun.sn.databinding.ActivityMainBinding;
import com.aoleyun.sn.dialog.UpdateDialog;
import com.aoleyun.sn.service.main.MainService;
import com.aoleyun.sn.utils.ApkUtils;
import com.aoleyun.sn.utils.GlideLoadUtils;
import com.aoleyun.sn.utils.JgyUtils;
import com.aoleyun.sn.utils.SPUtils;
import com.aoleyun.sn.utils.SysSettingUtils;
import com.aoleyun.sn.utils.Utils;
import com.blankj.utilcode.util.NetworkUtils;
import com.bumptech.glide.Glide;
import com.google.gson.JsonObject;
import com.hjq.toast.Toaster;
import com.tencent.mmkv.MMKV;
public class MainActivity extends BaseMvvmActivity<MainViewModel, ActivityMainBinding> implements NetworkUtils.OnNetworkStatusChangedListener {
private static final String TAG = "MainActivity";
private MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
public static final String UPDATE_LOCKED_STATUS = "UPDATE_LOCKED_STATUS";
public static final String REFRESHACTION = BuildConfig.APPLICATION_ID + ".REFRESH";
public class BtnClick {
public void exit(View view) {
lazyExit();
}
public void log(View view) {
continuousClick(COUNTS, DURATION);
}
public void logcat(View view) {
if (ApkUtils.isAvailable(MainActivity.this, PackageNames.AI_LOGGER_PACKAGE)) {
if (!ApkUtils.openPackage(MainActivity.this, PackageNames.AI_LOGGER_PACKAGE, PackageNames.AI_LOGGER_MAIN_CLASS)) {
Toaster.showShort("打开失败");
}
} else {
Toaster.showShort("应用未安装");
}
}
public void update(View view) {
startActivity(new Intent(MainActivity.this, UpdateActivity.class));
}
public void openOta(View view) {
JgyUtils.getInstance().openRomOta();
}
}
final static int COUNTS = 3;// 点击次数
final static long DURATION = 1000;// 规定有效时间
long[] mHits = new long[COUNTS];
private void continuousClick(int count, long time) {
//每次点击时,数组向前移动一位
System.arraycopy(mHits, 1, mHits, 0, mHits.length - 1);
//为数组最后一位赋值
mHits[mHits.length - 1] = SystemClock.uptimeMillis();
if (mHits[0] >= (SystemClock.uptimeMillis() - DURATION)) {
mHits = new long[COUNTS];//重新初始化数组
startActivity(new Intent(MainActivity.this, RequestLogActivity.class));
}
}
@Override
public void onDisconnected() {
Log.e("OnNetworkStatusChanged", "onDisconnected: ");
}
@Override
public void onConnected(NetworkUtils.NetworkType networkType) {
Log.e("OnNetworkStatusChanged", "onConnected: ");
setMac();
}
@Override
public int getLayoutId() {
return R.layout.activity_main;
}
@Override
public boolean setNightMode() {
return true;
}
@Override
protected void initDataBinding() {
mViewModel.setCtx(this);
mViewModel.setLifecycle(getLifecycleSubject());
mViewModel.setVDBinding(mViewDataBinding);
mViewDataBinding.setClick(new BtnClick());
}
@Override
public void initView() {
if (BuildConfig.DEBUG) {
// Uri uri = Uri.parse("https://www.baidu.com");
// Intent intent = new Intent(Intent.ACTION_VIEW, uri);
// startActivity(intent);
// Log.e(TAG, "initView: Build.getSerial = " + Build.getSerial());
// startActivity(new Intent(Settings.ACTION_SECURITY_SETTINGS));
JgyUtils.getInstance().getAllRunningAppProcessInfo();
JgyUtils.getInstance().getAllRunningServices();
}
String defaultDesktop = mMMKV.decodeString(CommonConfig.DEFAULT_DESKTOP_PACKAGE_NAME, "");
Log.e(TAG, "initView: defaultDesktop = " + defaultDesktop);
String defaultLauncher = mMMKV.decodeString(CommonConfig.DEFAULT_LAUNCHER_PACKAGE_NAME, "");
Log.e(TAG, "initView: defaultLauncher = " + defaultLauncher);
if (JgyUtils.getInstance().checkAppPlatform() == JgyUtils.YXPD1Platform) {
Settings.System.putString(getContentResolver(), CommonConfig.ACTIVATIONBEAN_CODE_KEY, Utils.getSerial(this));
}
Log.e(TAG, "initView: Build.MODEL = " + Build.MODEL);
if ("YX-T01".equalsIgnoreCase(Build.MODEL)) {
mViewDataBinding.clBind.setVisibility(View.GONE);
mViewDataBinding.clQrcode.setVisibility(View.VISIBLE);
} else {
mViewDataBinding.clBind.setVisibility(View.VISIBLE);
mViewDataBinding.clQrcode.setVisibility(View.GONE);
}
getDevicesInfo();
JgyUtils.startServices(MainActivity.this);
// if (BuildConfig.DEBUG) {
// Settings.Global.putInt(getContentResolver(), Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 1);
// Settings.Global.putInt(getContentResolver(), Settings.Global.ADB_ENABLED, 1);
// }
registerReceiver();
}
private void getDevicesInfo() {
mViewDataBinding.tvModel.setText(Build.MODEL);
String sn = Utils.getSerial(this);
Log.e(TAG, "getDevicesInfo: " + sn);
Log.e(TAG, "getDevicesInfo: " + Utils.getMac());
if (TextUtils.isEmpty(sn)) {
mViewDataBinding.tvSerial.setText(getString(R.string.no_data));
} else {
mViewDataBinding.tvSerial.setText(sn);
}
getIMEI();
setMac();
mViewDataBinding.tvVersion.setText(BuildConfig.VERSION_NAME);
//获取自定义版本号
Log.e(TAG, "getDevicesInfo: CustomVersion: " + Utils.getCustomVersion());
Log.e(TAG, "getDevicesInfo: RomVersion: " + Utils.getRomVersion());
mViewDataBinding.tvSystemVersion.setText(Utils.getCustomVersion());
}
private void getIMEI() {
// if (!Utils.NOSN.equalsIgnoreCase(Utils.getSerial(this))) {
// mViewDataBinding.tvImei.setText(Utils.getIMEI(this, 1));
// } else {
// if (!TextUtils.isEmpty(Utils.getIMEI(this, 1))) {
mViewDataBinding.tvImei.setText(Utils.getIMEI(this));
// }
// }
}
private void setMac() {
String macaddr = Utils.getAndroid10MAC(this);
if (TextUtils.isEmpty(macaddr)) {
mViewDataBinding.tvMac.setText("获取失败");
} else {
mViewDataBinding.tvMac.setText(macaddr);
}
}
private void checkSnError(String sn) {
//sn长度最长30位
if (sn.length() > 30) {
showSNErrorDialog("设备SN号码格式错误");
} else {
Log.e(TAG, "checkSNError: " + sn);
}
//检查平台和sn是否对应
if (JgyUtils.getInstance().checkSNPlatform(sn) != JgyUtils.getInstance().checkAppPlatform()) {
// showSNErrorDialog("SN数据与平台不符请联系管理员");
}
}
private void showSNErrorDialog(String content) {
AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.dialog);
builder.setMessage(content);
builder.setTitle("注意:");
builder.setIcon(R.mipmap.ic_launcher);
builder.setCancelable(true);
//设置正面按钮
builder.setPositiveButton("确定", (dialog, which) -> dialog.dismiss());
AlertDialog dialog = builder.create(); //创建AlertDialog对象
if (!this.isFinishing() && !dialog.isShowing()) {
dialog.show();
}
}
@Override
public void initData() {
Log.e("getMacAddress", Utils.getAndroid10MAC(this));
Intent intent = new Intent(MainActivity.this, MainService.class);
bindService(intent, serviceConnect, BIND_AUTO_CREATE);
startService(intent);
setObserve();
mViewModel.init();
mViewModel.getLockedState();
mViewModel.getQrCode();
mViewModel.setBindInfoPanel();
mViewModel.getAppSettings();
mViewModel.getPushTags();
}
private void setObserve() {
mViewModel.mLockedData.observe(this, new Observer<Boolean>() {
@Override
public void onChanged(Boolean aBoolean) {
Log.e(TAG, "setLockedState: " + aBoolean);
if (aBoolean) {
mViewModel.getStudesInfo();
mViewDataBinding.ivLockStatus.setVisibility(View.VISIBLE);
} else {
mViewDataBinding.ivLockStatus.setVisibility(View.GONE);
setNumberText("", View.GONE);
setNameText("", View.GONE);
setClassText("", View.GONE);
setBatchText("", View.GONE);
SysSettingUtils.setEnableSetting(MainActivity.this);
}
mViewModel.getEBagCode();
}
});
mViewModel.mStudentsInfoData.observe(this, new Observer<StudentsInfo>() {
@Override
public void onChanged(StudentsInfo studentsInfo) {
if (studentsInfo == null) {
mViewDataBinding.tvActivationTime.setText("未激活");
return;
}
long activation_time = studentsInfo.getActivation_time();
// mViewDataBinding.tvActivationTime.setText("激活时间:" + TimeUtils.getActivationTime(activation_time));
int trade_type = studentsInfo.getTrade_type();
String sno = studentsInfo.getSno();
String realname = studentsInfo.getRealname();
String classes = studentsInfo.getClasses();
String batch = studentsInfo.getBatch();
String head_img = studentsInfo.getHead_img();
int bind_statu = studentsInfo.getBind_status();
if (bind_statu == 1) {
String phone = studentsInfo.getBind_mobile();
mViewDataBinding.tvBindStatus.setText("绑定号码:" + phone);
} else {
mViewDataBinding.tvBindStatus.setText("未绑定");
}
if (TextUtils.isEmpty(sno)) {
setNumberText("未设置", View.GONE);
} else {
setNumberText(sno, View.VISIBLE);
}
if (TextUtils.isEmpty(realname)) {
setNameText("未设置", View.GONE);
} else {
setNameText(realname, View.VISIBLE);
}
if (TextUtils.isEmpty(classes)) {
setClassText("未设置", View.GONE);
} else {
setClassText(classes, View.VISIBLE);
}
if (TextUtils.isEmpty(batch)) {
setBatchText("未设置", View.GONE);
} else {
setBatchText(batch, View.VISIBLE);
}
if (TextUtils.isEmpty(head_img)) {
setIv_head("");
} else {
setIv_head(head_img);
}
SPUtils.put(MainActivity.this, CommonConfig.ADMIN_ID, studentsInfo.getAdmin_id());
}
});
mViewModel.mEBagCodeData.observe(this, new Observer<Boolean>() {
@Override
public void onChanged(Boolean aBoolean) {
if (aBoolean) {
// mViewModel.getExclusiveAdminApp();
Log.e(TAG, "getEBagCodeFinish: " + "已激活");
} else {
Log.e(TAG, "getEBagCodeFinish: " + "未激活");
}
}
});
mViewModel.mUpdateInfoData.observe(this, new Observer<JsonObject>() {
@Override
public void onChanged(JsonObject jsonObject) {
showUpdateDialog(jsonObject);
}
});
mViewModel.mQrCodeData.observe(this, new androidx.lifecycle.Observer<Bitmap>() {
@Override
public void onChanged(Bitmap bitmap) {
mViewDataBinding.ivQrcode.setImageBitmap(bitmap);
mViewDataBinding.ivQrcode2.setImageBitmap(bitmap);
}
});
mViewModel.mShowPanel.observe(this, new Observer<Boolean>() {
@Override
public void onChanged(Boolean aBoolean) {
if (aBoolean) {
mViewDataBinding.clBindinfo.setVisibility(View.VISIBLE);
} else {
mViewDataBinding.clBindinfo.setVisibility(View.GONE);
}
}
});
mViewModel.mAppSettingsData.observe(this, new Observer<AppSettings>() {
@Override
public void onChanged(AppSettings appSettings) {
mViewDataBinding.setAppSettings(appSettings);
}
});
}
MainService.MainBinder mMainBinder;
private ServiceConnect serviceConnect = new ServiceConnect();
private class ServiceConnect implements ServiceConnection {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Log.e(TAG, "onServiceConnected: ");
mMainBinder = (MainService.MainBinder) service;
mMainBinder.getService().mPresenter.getLockedState();
}
@Override
public void onServiceDisconnected(ComponentName name) {
Log.e(TAG, "onServiceDisconnected: ");
}
}
public void setBatchText(String text, int visibility) {
mViewDataBinding.tvBatch.setText(text);
// tv_batch.setVisibility(visibility);
}
public void setClassText(String text, int visibility) {
mViewDataBinding.tvClass.setText(text);
mViewDataBinding.clClass.setVisibility(visibility);
}
public void setNumberText(String text, int visibility) {
mViewDataBinding.tvNumber.setText(text);
mViewDataBinding.clNumber.setVisibility(visibility);
}
public void setNameText(String text, int visibility) {
mViewDataBinding.tvName.setText(text);
// layout_name.setVisibility(visibility);
}
public void setIv_head(String url) {
if (TextUtils.isEmpty(url)) {
GlideLoadUtils.getInstance().glideLoad(this, getDrawable(R.drawable.default_avatar), mViewDataBinding.ivHead);
} else {
GlideLoadUtils.getInstance().glideLoad(this, url, mViewDataBinding.ivHead, R.drawable.default_avatar);
}
}
private void showUpdateDialog(JsonObject jsonObject) {
UpdateDialog dialog = new UpdateDialog(this);
dialog.setMessage(String.format(getString(R.string.upgrade_app), jsonObject.get("version_name").getAsString()))
.setTitle("版本更新")
.setPositive("确定")
.setSingle(true)
.setOnClickBottomListener(new UpdateDialog.OnClickBottomListener() {
@Override
public void onPositiveClick() {
JgyUtils.getInstance().installAPK(jsonObject);
dialog.dismiss();
}
@Override
public void onNegtiveClick() {
dialog.dismiss();
}
});
dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
dialog.show();
dialog.getWindow().setGravity(Gravity.CENTER);
dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
dialog.setCancelable(false);
}
@Override
protected void onStop() {
super.onStop();
}
@Override
protected void onPause() {
super.onPause();
NetworkUtils.unregisterNetworkStatusChangedListener(this);
if (mUpdateReceiver != null) {
unregisterReceiver(mUpdateReceiver);
}
}
@Override
protected void onResume() {
super.onResume();
NetworkUtils.registerNetworkStatusChangedListener(this);
registerUpdateReceiver();
}
@Override
protected void onDestroy() {
super.onDestroy();
unregister();
JgyUtils.startServices(MainActivity.this);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
lazyExit();
return true;
}
return super.onKeyDown(keyCode, event);
}
private long mPreClickTime;
private void lazyExit() {
if (System.currentTimeMillis() - mPreClickTime > 3000) {
Toaster.show("再按一次,退出");
mPreClickTime = System.currentTimeMillis();
} else {
finish();
}
}
private void registerReceiver() {
registerPanelReceiver();
}
private void unregister() {
if (mPanelReceiver != null) {
unregisterReceiver(mPanelReceiver);
}
}
private void registerPanelReceiver() {
if (mPanelReceiver == null) {
mPanelReceiver = new PanelReceiver();
}
IntentFilter filter = new IntentFilter();
filter.addAction(PANEL_SHOW);
filter.addAction(PANEL_HIDE);
registerReceiver(mPanelReceiver, filter);
}
public static final String PANEL_SHOW = "panel_show_key";
public static final String PANEL_HIDE = "panel_hide_key";
private PanelReceiver mPanelReceiver;
private class PanelReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
switch (action) {
case PANEL_SHOW:
mViewDataBinding.clBindinfo.setVisibility(View.VISIBLE);
break;
case PANEL_HIDE:
default:
mViewDataBinding.clBindinfo.setVisibility(View.GONE);
break;
}
}
}
private UpdateReceiver mUpdateReceiver;
private void registerUpdateReceiver() {
if (mUpdateReceiver == null) {
mUpdateReceiver = new UpdateReceiver();
}
IntentFilter filter = new IntentFilter();
filter.addAction(UPDATE_LOCKED_STATUS);
registerReceiver(mUpdateReceiver, filter);
}
private class UpdateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (UPDATE_LOCKED_STATUS.equals(intent.getAction())) {
int locked = Settings.System.getInt(getContentResolver(), JGYActions.ACTION_QCH_UNLOCK_IPAD, JGYActions.FRAME_CODE_LOCKED);
if (locked != JGYActions.FRAME_CODE_LOCKED) {
setNumberText("", View.GONE);
setNameText("", View.GONE);
setClassText("", View.GONE);
setBatchText("", View.GONE);
Glide.with(mViewDataBinding.ivHead).load(getDrawable(R.drawable.default_avatar)).error(R.drawable.default_avatar).into(mViewDataBinding.ivHead);
SysSettingUtils.setEnableSetting(MainActivity.this);
}
}
}
}
}

View File

@@ -0,0 +1,356 @@
package com.aoleyun.sn.activity.main;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.os.Build;
import android.provider.Settings;
import android.util.Log;
import androidx.lifecycle.MutableLiveData;
import com.aoleyun.sn.BuildConfig;
import com.aoleyun.sn.base.mvvm.BaseViewModel;
import com.aoleyun.sn.bean.AdminAppInfo;
import com.aoleyun.sn.bean.AppSettings;
import com.aoleyun.sn.bean.AppUpdateInfo;
import com.aoleyun.sn.bean.BaseResponse;
import com.aoleyun.sn.bean.StudentsInfo;
import com.aoleyun.sn.comm.CommonConfig;
import com.aoleyun.sn.comm.JGYActions;
import com.aoleyun.sn.databinding.ActivityMainBinding;
import com.aoleyun.sn.gson.GsonUtils;
import com.aoleyun.sn.network.NetInterfaceManager;
import com.aoleyun.sn.utils.AES.CXAESUtil;
import com.aoleyun.sn.utils.JgyUtils;
import com.aoleyun.sn.utils.Utils;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.trello.rxlifecycle4.RxLifecycle;
import com.trello.rxlifecycle4.android.ActivityEvent;
import java.util.List;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
import io.reactivex.rxjava3.annotations.NonNull;
import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.disposables.Disposable;
import io.reactivex.rxjava3.schedulers.Schedulers;
public class MainViewModel extends BaseViewModel<ActivityMainBinding, ActivityEvent> {
private static final String TAG = "MainViewModel";
@Override
public ActivityMainBinding getVDBinding() {
return binding;
}
@Override
public void onDestroy() {
}
public void init() {
checkUpdateInfo();
checkAoleyunUpdate();
checkTestUpdate();
getDefaultDesktop();
getDefaultApp();
}
public MutableLiveData<Boolean> mLockedData = new MutableLiveData<>();
public void getLockedState() {
NetInterfaceManager.getInstance()
.getLockedState(getLifecycle(), new NetInterfaceManager.onCompleteCallback() {
@Override
public void onComplete() {
Log.e("getLockedState", "onComplete: ");
int locked = Settings.System.getInt(getCtx().getContentResolver(), JGYActions.ACTION_QCH_UNLOCK_IPAD, JGYActions.FRAME_CODE_LOCKED);
Log.e("getLockedState", "locked: " + locked);
mLockedData.setValue(locked == JGYActions.FRAME_CODE_LOCKED);
}
});
}
public MutableLiveData<StudentsInfo> mStudentsInfoData = new MutableLiveData<>();
/**
* 通过sn获取用户信息
*/
public void getStudesInfo() {
NetInterfaceManager.getInstance().getStudesInfo(true, getLifecycle(), new NetInterfaceManager.StudesInfoListener() {
@Override
public void setStudentsInfo(StudentsInfo studentsInfo) {
mStudentsInfoData.setValue(studentsInfo);
}
@Override
public void onComplete() {
}
});
}
public MutableLiveData<Boolean> mEBagCodeData = new MutableLiveData<>();
public void getEBagCode() {
NetInterfaceManager.getInstance().getEBagCode(true, getLifecycle(), new NetInterfaceManager.onCompleteCallback() {
@Override
public void onComplete() {
mEBagCodeData.setValue(Settings.Global.getInt(getCtx().getContentResolver(), CommonConfig.UIUI_ACTIVATION_KEY, 0) == 1);
}
});
}
public void getExclusiveAdminApp() {
NetInterfaceManager.getInstance().getExclusiveAdminAppObservable()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
.subscribe(new Observer<BaseResponse<List<AdminAppInfo>>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.e("getExclusiveAdminApp", "onSubscribe: ");
}
@Override
public void onNext(@NonNull BaseResponse<List<AdminAppInfo>> listBaseResponse) {
Log.e("getExclusiveAdminApp", "onNext: " + listBaseResponse);
if (listBaseResponse.code == 200) {
List<AdminAppInfo> adminAppInfos = listBaseResponse.data;
JgyUtils.getInstance().installAdminApp(adminAppInfos);
}
}
@Override
public void onError(@NonNull Throwable e) {
Log.e("getExclusiveAdminApp", "onError: " + e.getMessage());
}
@Override
public void onComplete() {
Log.e("getExclusiveAdminApp", "onComplete: ");
}
});
}
public MutableLiveData<JsonObject> mUpdateInfoData = new MutableLiveData<>();
public void checkUpdateInfo() {
NetInterfaceManager.getInstance()
.getUpdateApi()
.getUpdate(BuildConfig.APPLICATION_ID,
JgyUtils.getInstance().checkAppPlatform())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
.subscribe(new Observer<BaseResponse<AppUpdateInfo>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.e("checkUpdateInfo", "onSubscribe: ");
}
@Override
public void onNext(@NonNull BaseResponse<AppUpdateInfo> response) {
Log.e("checkUpdateInfo", "onNext: " + response);
if (response.code == 200) {
JsonObject jsonObject = JsonParser.parseString(new Gson().toJson(response.data)).getAsJsonObject();
long versionCode = jsonObject.get("version_code").getAsLong();
PackageManager pm = getCtx().getPackageManager();
PackageInfo info = null;
try {
info = pm.getPackageInfo(BuildConfig.APPLICATION_ID, 0);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
if (null == info || info.versionCode < versionCode) {
mUpdateInfoData.setValue(jsonObject);
}
}
}
@Override
public void onError(@NonNull Throwable e) {
Log.e("checkUpdateInfo", "onError: " + e.getMessage());
onComplete();
}
@Override
public void onComplete() {
Log.e("checkUpdateInfo", "onComplete: ");
}
});
}
public void checkAoleyunUpdate() {
NetInterfaceManager.getInstance()
.checkAoleyunUpdate(true, getLifecycle(), new NetInterfaceManager.onCompleteCallback() {
@Override
public void onComplete() {
}
});
}
public void checkTestUpdate() {
if (!JgyUtils.getInstance().tagEmpty()) {
NetInterfaceManager.getInstance()
.checkTestUpdate(true, getLifecycle(), new NetInterfaceManager.onCompleteCallback() {
@Override
public void onComplete() {
}
});
} else {
Log.e(TAG, "checkTestUpdate: tag is Empty");
}
}
public void getDefaultDesktop() {
Log.e(TAG, "getDefaultDesktop: ");
if (JgyUtils.isOfficialVersion() || !JgyUtils.getInstance().getDeviceIsLocked()) {
Log.e(TAG, "getDefaultDesktop: " + "Device unLocked");
} else {
int aihuaUnlock = Settings.System.getInt(getCtx().getContentResolver(), CommonConfig.AIHUA_UNLOCK, 0);
if (JgyUtils.getInstance().isAihuaFramework() && aihuaUnlock == 1) {
Log.e(TAG, "getDefaultDesktop: " + "Device aihua");
} else {
NetInterfaceManager.getInstance()
.getDefaultDesktop( getLifecycle(), new NetInterfaceManager.onCompleteCallback() {
@Override
public void onComplete() {
}
});
}
}
}
public void getDefaultApp() {
NetInterfaceManager.getInstance()
.getDefaultApp(true, getLifecycle(), new NetInterfaceManager.onCompleteCallback() {
@Override
public void onComplete() {
}
});
}
public MutableLiveData<Bitmap> mQrCodeData = new MutableLiveData<>();
public void getQrCode() {
String encryptString = CXAESUtil.encrypt(CommonConfig.AES_KEY, Utils.getSerial(getCtx()));
Log.e("getQRCode", "setImageAndText: " + encryptString);
Bitmap bitmap = Utils.createQRImage(encryptString, 400, 400);
mQrCodeData.setValue(bitmap);
}
public void getPublicIp() {
NetInterfaceManager.getInstance().getPublicIp(getLifecycle(), new NetInterfaceManager.PublicIpCallbak() {
@Override
public void getPublicIp(String ip) {
}
});
}
public MutableLiveData<Boolean> mShowPanel = new MutableLiveData<>();
public void setBindInfoPanel() {
NetInterfaceManager.getInstance().getSystemSettingObservable()
.compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
.subscribe(new Observer<BaseResponse>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.e("setBindInfoPanel", "onSubscribe: ");
}
@Override
public void onNext(@NonNull BaseResponse baseResponse) {
Log.e("setBindInfoPanel", "onNext: " + baseResponse);
if (baseResponse.code == 200) {
JsonObject jsonObject = GsonUtils.getJsonObject(GsonUtils.toJSONString(baseResponse.data));
JsonElement jsonElement = jsonObject.get("is_control_show");
if (jsonElement != null && !jsonElement.isJsonNull()) {
int is_control_show = jsonElement.getAsInt();
mShowPanel.setValue(is_control_show == 1);
}
String data = GsonUtils.toJSONString(baseResponse.data);
Log.e("setSystemSetting", "onNext: " + data);
//结果保存到本地
JgyUtils.getInstance().SettingSysData(data);
} else {
if (JgyUtils.G11TAG.equals(JgyUtils.getInstance().getAppPlatform())
|| "HT01".equals(Build.MODEL)) {
mShowPanel.setValue(true);
} else if ("G10-M".equals(Build.MODEL)
||"Ebox201W".equals(Build.MODEL)) {
mShowPanel.setValue(false);
}
JgyUtils.getInstance().SettingSysData("");
}
}
@Override
public void onError(@NonNull Throwable e) {
Log.e("setBindInfoPanel", "onError: " + e.getMessage());
onComplete();
}
@Override
public void onComplete() {
Log.e("setBindInfoPanel", "onComplete: ");
}
});
}
public MutableLiveData<AppSettings> mAppSettingsData = new MutableLiveData<>();
public void getAppSettings() {
NetInterfaceManager.getInstance().getAppSettingObservable()
.compose(RxLifecycle.bindUntilEvent(getLifecycle(), ActivityEvent.DESTROY))
.subscribe(new Observer<BaseResponse<AppSettings>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.e("getAppSettings", "onSubscribe: ");
}
@Override
public void onNext(@NonNull BaseResponse<AppSettings> appSettingsBaseResponse) {
Log.e("getAppSettings", "onNext: " + appSettingsBaseResponse);
if (appSettingsBaseResponse.code == 200) {
mAppSettingsData.setValue(appSettingsBaseResponse.data);
}
}
@Override
public void onError(@NonNull Throwable e) {
Log.e("getAppSettings", "onError: " + e.getMessage());
}
@Override
public void onComplete() {
Log.e("getAppSettings", "onComplete: ");
}
});
}
public void getPushTags(){
NetInterfaceManager.getInstance().setPushTags(getLifecycle(), new NetInterfaceManager.PushTagCallback() {
@Override
public void setPushTag(String tag) {
}
});
}
}

View File

@@ -0,0 +1,75 @@
package com.aoleyun.sn.activity.requestlog;
import android.view.View;
import androidx.lifecycle.Observer;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.aoleyun.sn.R;
import com.aoleyun.sn.base.mvvm.BaseMvvmActivity;
import com.aoleyun.sn.databinding.ActivityRequestLogBinding;
import com.aoleyun.sn.rlog.LogBean;
import com.aoleyun.sn.rlog.LogDBManager;
import java.util.List;
public class RequestLogActivity extends BaseMvvmActivity<RequestLogViewModel, ActivityRequestLogBinding> {
private static final String TAG = "RequestLogActivity";
private RequestLogAdapter mAdapter;
@Override
public int getLayoutId() {
return R.layout.activity_request_log;
}
@Override
public boolean setNightMode() {
return true;
}
@Override
protected void initDataBinding() {
mViewModel.setCtx(this);
mViewModel.setLifecycle(getLifecycleSubject());
mViewModel.setVDBinding(mViewDataBinding);
mViewDataBinding.setClick(new BtnClick());
}
@Override
public void initView() {
mViewDataBinding.recyclerview.setLayoutManager(new LinearLayoutManager(this));
mAdapter = new RequestLogAdapter();
mViewDataBinding.recyclerview.setAdapter(mAdapter);
}
@Override
public void initData() {
mViewModel.getLogBeanListData().observe(this, new Observer<List<LogBean>>() {
@Override
public void onChanged(List<LogBean> logBeans) {
mAdapter.setLogBeans(logBeans);
}
});
mViewModel.getDBList();
}
@Override
protected void onDestroy() {
super.onDestroy();
}
public class BtnClick {
public void exit(View view) {
finish();
}
public void refresh(View view) {
mViewModel.getDBList();
}
public void delete(View view) {
LogDBManager.getInstance().saveToFile();
}
}
}

View File

@@ -0,0 +1,67 @@
package com.aoleyun.sn.activity.requestlog;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.aoleyun.sn.R;
import com.aoleyun.sn.rlog.LogBean;
import com.aoleyun.sn.utils.TimeUtils;
import java.util.List;
public class RequestLogAdapter extends RecyclerView.Adapter<RequestLogAdapter.Holder> {
private List<LogBean> mLogBeans;
private Context context;
public void setLogBeans(List<LogBean> logBeanList) {
this.mLogBeans = logBeanList;
notifyDataSetChanged();
}
@NonNull
@Override
public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
context = parent.getContext();
View view = LayoutInflater.from(context).inflate(R.layout.item_requestlog, parent, false);
return new Holder(view);
}
@Override
public void onBindViewHolder(@NonNull Holder holder, int position) {
LogBean logBean = mLogBeans.get(position);
if (logBean == null) return;
holder.tv_code.setText(logBean.getCode().toString());
holder.tv_timestamp.setText(TimeUtils.transferLongToDate(logBean.getTimestamp()));
holder.tv_event.setText(logBean.getEvent());
holder.tv_operate.setText(logBean.getOperate());
holder.tv_content.setText(logBean.getContent());
}
@Override
public int getItemCount() {
return mLogBeans == null ? 0 : mLogBeans.size();
}
static class Holder extends RecyclerView.ViewHolder {
TextView tv_code;
TextView tv_timestamp;
TextView tv_event;
TextView tv_operate;
TextView tv_content;
public Holder(@NonNull View itemView) {
super(itemView);
tv_code = itemView.findViewById(R.id.tv_code);
tv_timestamp = itemView.findViewById(R.id.tv_timestamp);
tv_event = itemView.findViewById(R.id.tv_event);
tv_operate = itemView.findViewById(R.id.tv_operate);
tv_content = itemView.findViewById(R.id.tv_content);
}
}
}

View File

@@ -0,0 +1,34 @@
package com.aoleyun.sn.activity.requestlog;
import androidx.lifecycle.MutableLiveData;
import com.aoleyun.sn.base.mvvm.BaseViewModel;
import com.aoleyun.sn.databinding.ActivityRequestLogBinding;
import com.aoleyun.sn.rlog.LogBean;
import com.aoleyun.sn.rlog.LogDBManager;
import com.trello.rxlifecycle4.android.ActivityEvent;
import java.util.List;
public class RequestLogViewModel extends BaseViewModel<ActivityRequestLogBinding, ActivityEvent> {
@Override
public ActivityRequestLogBinding getVDBinding() {
return binding;
}
@Override
public void onDestroy() {
}
private MutableLiveData<List<LogBean>> mLogBeanListData =new MutableLiveData<>();
public MutableLiveData<List<LogBean>> getLogBeanListData() {
return mLogBeanListData;
}
public void getDBList(){
mLogBeanListData.setValue(LogDBManager.getInstance().getLogList());
}
}

View File

@@ -0,0 +1,115 @@
package com.aoleyun.sn.activity.update;
import android.content.Intent;
import android.view.View;
import com.aoleyun.sn.BuildConfig;
import com.aoleyun.sn.R;
import com.aoleyun.sn.base.mvvm.BaseMvvmActivity;
import com.aoleyun.sn.bean.AppUpdateInfo;
import com.aoleyun.sn.databinding.ActivityAppUpdateBinding;
import com.aoleyun.sn.gson.GsonUtils;
import com.aoleyun.sn.service.main.MainService;
import com.aoleyun.sn.utils.Utils;
import com.arialyy.aria.core.Aria;
import com.arialyy.aria.core.download.DownloadEntity;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.hjq.toast.Toaster;
import static com.arialyy.aria.core.inf.IEntity.STATE_RUNNING;
public class AppUpdateActivity extends BaseMvvmActivity<AppUpdateViewModel, ActivityAppUpdateBinding> {
private AppUpdateInfo mAppInfoData;
@Override
protected int getLayoutId() {
return R.layout.activity_app_update;
}
@Override
protected void initDataBinding() {
mViewModel.setCtx(this);
mViewModel.setLifecycle(getLifecycleSubject());
mViewModel.setVDBinding(mViewDataBinding);
mViewDataBinding.setClick(new BtnClick());
}
@Override
protected void initView() {
}
@Override
protected void initData() {
Intent intent = getIntent();
mAppInfoData = (AppUpdateInfo) intent.getSerializableExtra("appUpdateInfo");
if (mAppInfoData != null) {
mViewDataBinding.setAppInfo(mAppInfoData);
mViewDataBinding.setMsg("检测到新版本,是否更新");
String pkg = mAppInfoData.getPackages();
switch (pkg) {
case "com.aoleyun.os":
mViewDataBinding.ivAppIcon.setImageDrawable(getDrawable(R.drawable.com_aoleyun_os));
break;
case "com.aoleyun.appstore":
mViewDataBinding.ivAppIcon.setImageDrawable(getDrawable(R.drawable.com_aoleyun_appstore));
break;
case "com.aoleyun.browser":
mViewDataBinding.ivAppIcon.setImageDrawable(getDrawable(R.drawable.com_aoleyun_browser));
break;
case "com.aoleyun.ailog":
mViewDataBinding.ivAppIcon.setImageDrawable(getDrawable(R.drawable.com_aoleyun_ailog));
break;
default:
case BuildConfig.APPLICATION_ID:
mViewDataBinding.ivAppIcon.setImageDrawable(getDrawable(R.mipmap.ic_launcher));
break;
}
} else {
finish();
}
}
public class BtnClick {
public void empty(View view) {
}
public void exit(View view) {
finish();
}
public void upgrade(View view) {
startService(new Intent(AppUpdateActivity.this, MainService.class));
if (mAppInfoData != null) {
DownloadEntity entity = Aria.download(this).getFirstDownloadEntity(mAppInfoData.getUrl());
if (null != entity) {
if (entity.isComplete()) {
JsonObject jsonObject = GsonUtils.getJsonObject(new Gson().toJson(mAppInfoData));
Utils.ariaDownload(AppUpdateActivity.this, mAppInfoData.getUrl(), jsonObject);
} else {
if (entity.getState() == STATE_RUNNING) {
Toaster.show("文件正在下载中");
finish();
} else {
Aria.download(this).resumeAllTask();
Toaster.show("正在下载");
finish();
}
}
} else {
JsonObject jsonObject = GsonUtils.getJsonObject(new Gson().toJson(mAppInfoData));
Utils.ariaDownload(AppUpdateActivity.this, mAppInfoData.getUrl(), jsonObject);
Toaster.show("正在下载更新");
finish();
}
}
}
}
}

View File

@@ -0,0 +1,18 @@
package com.aoleyun.sn.activity.update;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.aoleyun.sn.base.mvvm.BaseViewModel;
import com.aoleyun.sn.databinding.ActivityAppUpdateBinding;
public class AppUpdateViewModel extends BaseViewModel<ActivityAppUpdateBinding, ActivityEvent> {
@Override
public ActivityAppUpdateBinding getVDBinding() {
return binding;
}
@Override
public void onDestroy() {
}
}

View File

@@ -0,0 +1,117 @@
package com.aoleyun.sn.activity.update;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.util.Log;
import android.view.View;
import androidx.lifecycle.Observer;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.aoleyun.sn.R;
import com.aoleyun.sn.adapter.AppUpdateAdapter;
import com.aoleyun.sn.base.mvvm.BaseMvvmActivity;
import com.aoleyun.sn.bean.AppUpdateInfo;
import com.aoleyun.sn.databinding.ActivityUpdateBinding;
import java.util.List;
public class UpdateActivity extends BaseMvvmActivity<UpdateViewModel, ActivityUpdateBinding> {
private static final String TAG = "UpdateActivity";
private AppUpdateAdapter mAppUpdateAdapter;
@Override
public int getLayoutId() {
return R.layout.activity_update;
}
@Override
public boolean setNightMode() {
return true;
}
@Override
protected void initDataBinding() {
mViewModel.setCtx(this);
mViewModel.setLifecycle(getLifecycleSubject());
mViewModel.setVDBinding(mViewDataBinding);
mViewDataBinding.setClick(new BtnClick());
}
@Override
public void initView() {
mAppUpdateAdapter = new AppUpdateAdapter();
mViewDataBinding.recyclerView.setLayoutManager(new LinearLayoutManager(UpdateActivity.this));
mViewDataBinding.recyclerView.setAdapter(mAppUpdateAdapter);
}
@Override
public void initData() {
mViewModel.getAppUpdateInfoListData().observe(this, new Observer<List<AppUpdateInfo>>() {
@Override
public void onChanged(List<AppUpdateInfo> appUpdateInfos) {
if (appUpdateInfos == null || appUpdateInfos.size() == 0) {
mViewDataBinding.clNodata.setVisibility(View.VISIBLE);
mViewDataBinding.recyclerView.setVisibility(View.GONE);
} else {
mViewDataBinding.clNodata.setVisibility(View.GONE);
mViewDataBinding.recyclerView.setVisibility(View.VISIBLE);
mAppUpdateAdapter.setAppInfoList(appUpdateInfos);
}
}
});
mViewModel.checkAllAppUpdate();
registmNewAppReceiver();
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mNewAppReceiver != null) {
unregisterReceiver(mNewAppReceiver);
}
}
private void registmNewAppReceiver() {
mNewAppReceiver = new NewAppReceiver();
IntentFilter filter = new IntentFilter();
filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
filter.addAction(Intent.ACTION_PACKAGE_ADDED);
filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
filter.addAction(Intent.ACTION_PACKAGE_REPLACED);
filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
filter.addDataScheme("package");
registerReceiver(mNewAppReceiver, filter);
}
private NewAppReceiver mNewAppReceiver;
class NewAppReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Log.e(TAG, "onReceive: " + action);
if (Intent.ACTION_PACKAGE_ADDED.equals(action)
|| Intent.ACTION_PACKAGE_REMOVED.equals(action)
|| Intent.ACTION_PACKAGE_REPLACED.equals(action)
|| Intent.ACTION_PACKAGE_CHANGED.equals(action)
) {
mAppUpdateAdapter.notifyDataSetChanged();
}
}
}
public class BtnClick {
public void exit(View view) {
finish();
}
public void empty(View view) {
}
}
}

View File

@@ -0,0 +1,39 @@
package com.aoleyun.sn.activity.update;
import androidx.lifecycle.MutableLiveData;
import com.aoleyun.sn.base.mvvm.BaseViewModel;
import com.aoleyun.sn.bean.AppUpdateInfo;
import com.aoleyun.sn.databinding.ActivityUpdateBinding;
import com.aoleyun.sn.network.NetInterfaceManager;
import com.trello.rxlifecycle4.android.ActivityEvent;
import java.util.List;
public class UpdateViewModel extends BaseViewModel<ActivityUpdateBinding, ActivityEvent> {
@Override
public ActivityUpdateBinding getVDBinding() {
return binding;
}
@Override
public void onDestroy() {
}
private MutableLiveData<List<AppUpdateInfo>> mAppUpdateInfoListData = new MutableLiveData<>();
public MutableLiveData<List<AppUpdateInfo>> getAppUpdateInfoListData() {
return mAppUpdateInfoListData;
}
public void checkAllAppUpdate() {
NetInterfaceManager.getInstance().checkAoleyunUpdate(getLifecycle(), new NetInterfaceManager.UpdateCallback() {
@Override
public void onUpdate(List<AppUpdateInfo> appUpdateInfos) {
mAppUpdateInfoListData.setValue(appUpdateInfos);
}
});
}
}

View File

@@ -0,0 +1,37 @@
/*****************************************************************************
* WeakHandler.java
*****************************************************************************
* Copyright © 2012 VLC authors and VideoLAN
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
package com.aoleyun.sn.activity.utils;
import android.os.Handler;
import java.lang.ref.WeakReference;
public abstract class WeakHandler<T> extends Handler {
private WeakReference<T> mOwner;
public WeakHandler(T owner) {
mOwner = new WeakReference<T>(owner);
}
public T getOwner() {
return mOwner.get();
}
}

View File

@@ -0,0 +1,183 @@
package com.aoleyun.sn.adapter;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.aoleyun.sn.BuildConfig;
import com.aoleyun.sn.R;
import com.aoleyun.sn.bean.AppUpdateInfo;
import com.aoleyun.sn.comm.PackageNames;
import com.aoleyun.sn.gson.GsonUtils;
import com.aoleyun.sn.utils.ApkUtils;
import com.aoleyun.sn.utils.Utils;
import com.bumptech.glide.Glide;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.hjq.toast.Toaster;
import java.util.List;
public class AppUpdateAdapter extends RecyclerView.Adapter<AppUpdateAdapter.Holder> {
private static final String TAG = "AppUpdateAdapter";
private Context mContext;
private List<AppUpdateInfo> mAppInfoList;
private PackageManager mPackageManager;
@NonNull
@Override
public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
mContext = parent.getContext();
mPackageManager = mContext.getPackageManager();
return new Holder(LayoutInflater.from(mContext).inflate(R.layout.item_app_update, parent, false));
}
@Override
public void onBindViewHolder(@NonNull Holder holder, int position) {
AppUpdateInfo appInfo = mAppInfoList.get(position);
String pkg = appInfo.getPackages();
Drawable drawable;
switch (pkg) {
case BuildConfig.APPLICATION_ID:
drawable = mContext.getDrawable(R.mipmap.ic_launcher);
break;
case PackageNames.APPSTORE:
drawable = mContext.getDrawable(R.drawable.com_aoleyun_appstore);
break;
case PackageNames.DESKTOP:
case PackageNames.AIUDUDESKTOP:
drawable = mContext.getDrawable(R.drawable.com_aoleyun_os);
break;
case PackageNames.NOTIFICATIONS:
drawable = mContext.getDrawable(R.drawable.com_aoleyun_info);
break;
case PackageNames.BROWSER:
drawable = mContext.getDrawable(R.drawable.com_aoleyun_browser);
break;
case PackageNames.AILOG:
drawable = mContext.getDrawable(R.drawable.com_aoleyun_ailog);
break;
default:
drawable = mContext.getDrawable(R.drawable.exit_icon);
}
Glide.with(mContext).load(drawable).into(holder.imageView);
if (!TextUtils.isEmpty(appInfo.getApp_name())) {
holder.tv_app_name.setText(appInfo.getApp_name());
}
if (!TextUtils.isEmpty(appInfo.getVersion_name())) {
holder.tv_app_version.setText("更新版本:" + appInfo.getVersion_name());
}
holder.tv_local_version.setText("安装版本:" + installedVersion(pkg));
if (ApkUtils.isAvailable(mContext, appInfo.getPackages())) {
if (isUpdate(appInfo)) {
holder.bt_update.setEnabled(true);
holder.bt_update.setText("更新");
holder.bt_update.setBackground(mContext.getDrawable(R.drawable.bt_activation_selector));
} else {
holder.bt_update.setEnabled(false);
holder.bt_update.setText("暂无");
holder.bt_update.setBackground(mContext.getDrawable(R.drawable.bt_disable));
}
} else {
holder.bt_update.setEnabled(true);
holder.bt_update.setText("下载");
holder.bt_update.setBackground(mContext.getDrawable(R.drawable.bt_activation_selector));
}
holder.bt_update.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
notifyDataSetChanged();
if (isUpdate(appInfo)) {
Toaster.show("开始下载:" + appInfo.getApp_name());
JsonObject jsonObject = GsonUtils.getJsonObject(new Gson().toJson(appInfo));
Utils.ariaDownload(mContext, appInfo.getUrl(), jsonObject);
} else {
Toaster.show(appInfo.getApp_name() + " 已是最新版本");
Log.e(TAG, "onClick: 没有找到更新");
}
}
});
}
private boolean isUpdate(AppUpdateInfo appInfo) {
String pkg = appInfo.getPackages();
PackageInfo packageInfo = null;
try {
packageInfo = mPackageManager.getPackageInfo(pkg, 0);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
if (packageInfo == null) {
//未安装
Log.e(TAG, "getAllAppUpdateInfos: " + pkg);
return true;
} else {
long appVersionCode;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
appVersionCode = packageInfo.getLongVersionCode();
} else {
appVersionCode = packageInfo.versionCode;
}
long versionCode = appInfo.getVersion_code();
//版本升级
return appVersionCode < versionCode;
}
}
private String installedVersion(String pkg) {
PackageInfo packageInfo = null;
try {
packageInfo = mPackageManager.getPackageInfo(pkg, 0);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
if (packageInfo == null) {
return "未安装";
} else {
return packageInfo.versionName;
}
}
public void setAppInfoList(List<AppUpdateInfo> appInfoList) {
this.mAppInfoList = appInfoList;
notifyDataSetChanged();
}
@Override
public int getItemCount() {
return mAppInfoList == null ? 0 : mAppInfoList.size();
}
class Holder extends RecyclerView.ViewHolder {
ImageView imageView;
TextView tv_app_name;
TextView tv_app_version;
TextView tv_local_version;
Button bt_update;
public Holder(@NonNull View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.imageView);
tv_app_name = itemView.findViewById(R.id.tv_app_name);
tv_app_version = itemView.findViewById(R.id.tv_app_version);
tv_local_version = itemView.findViewById(R.id.tv_local_version);
bt_update = itemView.findViewById(R.id.bt_update);
}
}
}

View File

@@ -0,0 +1,338 @@
package com.aoleyun.sn.base;
import android.os.Build;
import android.os.Handler;
import android.os.Looper;
import android.os.Process;
import android.text.TextUtils;
import android.util.Log;
import androidx.multidex.MultiDexApplication;
import com.alibaba.sdk.android.push.CloudPushService;
import com.alibaba.sdk.android.push.CommonCallback;
import com.alibaba.sdk.android.push.noonesdk.PushInitConfig;
import com.alibaba.sdk.android.push.noonesdk.PushServiceFactory;
import com.aoleyun.sn.BuildConfig;
import com.aoleyun.sn.manager.AllwinnerCubeMdmManager;
import com.aoleyun.sn.manager.ConnectManager;
import com.aoleyun.sn.manager.FileManager;
import com.aoleyun.sn.manager.MapManager;
import com.aoleyun.sn.network.NetInterfaceManager;
import com.aoleyun.sn.push.PushManager;
import com.aoleyun.sn.rlog.LogDBManager;
import com.aoleyun.sn.utils.JgyUtils;
import com.aoleyun.sn.utils.SystemUtils;
import com.aoleyun.sn.utils.Utils;
import com.aoleyun.sn.utils.WiFiUtils;
import com.aoleyun.sn.utils.XAPKUtils;
import com.arialyy.aria.core.Aria;
import com.hjq.toast.Toaster;
import com.tencent.bugly.crashreport.CrashReport;
import com.tencent.mmkv.MMKV;
import java.util.concurrent.TimeUnit;
import io.reactivex.rxjava3.core.Observable;
import io.reactivex.rxjava3.core.ObservableEmitter;
import io.reactivex.rxjava3.core.ObservableOnSubscribe;
import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.disposables.Disposable;
public class BaseApplication extends MultiDexApplication {
private static final String TAG = "BaseApplication";
@Override
public void onCreate() {
super.onCreate();
init();
//非主进程不初始化
if (SystemUtils.isMainProcessName(this, Process.myPid())) {
MapManager.init(this);
MapManager.getInstance().initMap();
}
}
private void init() {
if (!BuildConfig.DEBUG) {
catchException();
}
String rootDir = MMKV.initialize(this);
Log.e(TAG, "mmkv root: " + rootDir);
// 初始化 Toast 框架
Toaster.init(this);
JgyUtils.init(this);
CrashReport.initCrashReport(getApplicationContext(), "b16b3c7f1a", false);
CrashReport.setDeviceId(this, Utils.getSerial(this));
CrashReport.setDeviceModel(this, Utils.getSerial(this));
CrashReport.setAppChannel(this, Build.MODEL);
xcrash.XCrash.init(this);
PushManager.init(this);
initRegisterObservable();
initAliasObservable();
initTagObservable();
aliyunPushInit();
NetInterfaceManager.init(this);
if (JgyUtils.isAllWinnerDevice()) {
AllwinnerCubeMdmManager.init(this);
}
WiFiUtils.init(this);
XAPKUtils.init(this);
LogDBManager.init(this);
FileManager.init(this);
ConnectManager.init(this);
JgyUtils.getInstance().hookWebView();
Aria.init(this);
Aria.get(this).getDownloadConfig().setMaxTaskNum(1);
Aria.get(this).getDownloadConfig().setConvertSpeed(true);
}
private void catchException() {
Thread.setDefaultUncaughtExceptionHandler(
new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {
Log.e("捕获异常子线程:", Thread.currentThread().getName() +
"在:" + e.getStackTrace()[0].getClassName());
e.printStackTrace();
}
}
);
//下面是新增方法!
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
while (true) {
try {
Looper.loop(); //会先执行这个方法,然后在执行下面的异常捕获方法!
} catch (Exception e) {
Log.e("捕获异常主线程:", Thread.currentThread().getName() + "在:" + e.getStackTrace()[0].getClassName());
e.printStackTrace();
}
}
}
});
}
interface OnRegisterResult {
void onResult(String code);
}
private static OnRegisterResult mOnRegisterResult;
private void initRegisterObservable() {
Log.e(TAG, "initTagObservable: ");
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> emitter) {
mOnRegisterResult = new OnRegisterResult() {
@Override
public void onResult(String code) {
Log.e("initRegisterObservable", "onResult: " + code);
emitter.onNext(code);
}
};
}
}).throttleLast(60, TimeUnit.SECONDS)
.subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String code) {
Log.e("initRegisterObservable", "onNext: " + code);
switch (code) {
case "PUSH_20110":
break;
default:
Log.e("initRegisterObservable", "onNext: 重新注册aliyunPush");
aliyunPushInit();
}
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
private void aliyunPushInit() {
// 特殊场景 需要定时拉起channel
PushInitConfig config = new PushInitConfig.Builder()
.application(this)
.loopStartChannel(true)
.loopInterval(60 * 10 * 1000)
.build();
PushServiceFactory.init(config);
CloudPushService pushService = PushServiceFactory.getCloudPushService();
pushService.setLogLevel(CloudPushService.LOG_DEBUG);
pushService.register(this, new CommonCallback() {
@Override
public void onSuccess(String response) {
Log.e("AliyunPush", "init cloudchannel success");
Log.e("AliyunPush", "init cloudchannel success " + pushService.getDeviceId());
setAlias();
}
@Override
public void onFailed(String errorCode, String errorMessage) {
Log.e("AliyunPush", "init cloudchannel failed -- errorcode:" + errorCode + " -- errorMessage:" + errorMessage);
mOnRegisterResult.onResult(errorCode);
}
});
}
interface OnAliasResult {
void onResult(String code);
}
private static OnAliasResult mOnAliasResult;
private void initAliasObservable() {
Log.e(TAG, "initAliasObservable: ");
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> emitter) throws Exception {
mOnAliasResult = new OnAliasResult() {
@Override
public void onResult(String code) {
Log.e("initAliasObservable", "onResult: " + code);
emitter.onNext(code);
}
};
}
}).throttleLast(60, TimeUnit.SECONDS)
.subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String code) {
Log.e("initAliasObservable", "onNext: " + code);
switch (code) {
case "PUSH_20101":
aliyunPushInit();
break;
default:
setAlias();
break;
}
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
private void setAlias() {
final CloudPushService pushService = PushServiceFactory.getCloudPushService();
String sn = Utils.getSerial(BaseApplication.this);
if (TextUtils.isEmpty(sn)) {
return;
}
pushService.bindAccount(sn, new CommonCallback() {
@Override
public void onSuccess(String s) {
Log.e("AliyunPush", "bind account " + sn + " success\n");
}
@Override
public void onFailed(String errorCode, String errorMsg) {
Log.e("AliyunPush", "bind account " + sn + " failed." +
"errorCode: " + errorCode + ", errorMsg:" + errorMsg);
mOnAliasResult.onResult(errorCode);
}
});
pushService.addAlias(sn, new CommonCallback() {
@Override
public void onSuccess(String s) {
Log.e("AliyunPush", "add alias " + sn + " success\n");
}
@Override
public void onFailed(String errorCode, String errorMsg) {
Log.e("AliyunPush", "add alias " + sn + " failed." +
"errorCode: " + errorCode + ", errorMsg:" + errorMsg + "\n");
mOnAliasResult.onResult(errorCode);
}
});
}
public static void onTagOperatorResult(String code) {
onTagResult.onResult(code);
}
private static OnTagResult onTagResult;
interface OnTagResult {
void onResult(String code);
}
private void initTagObservable() {
Log.e(TAG, "initTagObservable: ");
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> emitter) {
onTagResult = new OnTagResult() {
@Override
public void onResult(String code) {
Log.e("initTagObservable", "onResult: " + code);
emitter.onNext(code);
}
};
}
}).throttleLast(60, TimeUnit.SECONDS)
.subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String code) {
Log.e("initTagObservable", "onNext: " + code);
switch (code) {
case "PUSH_20101":
aliyunPushInit();
break;
default:
NetInterfaceManager.getInstance().setPushTags();
}
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
}

View File

@@ -0,0 +1,68 @@
package com.aoleyun.sn.base;
import android.os.Bundle;
import androidx.annotation.CallSuper;
import androidx.annotation.Nullable;
import com.aoleyun.sn.R;
import com.aoleyun.sn.base.rx.BaseRxActivity;
import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX;
public abstract class BaseDataBindingActivity extends BaseRxActivity {
public BaseDataBindingActivity() {
super();
}
@Override
@CallSuper
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// StatusBarUtil.init(this);
UltimateBarX.statusBar(this)
.transparent()
.colorRes(R.color.colorPrimaryDark)
.light(setNightMode())
.fitWindow(setfitWindow())
.apply();
UltimateBarX.navigationBar(this)
.transparent()
.colorRes(R.color.colorPrimaryDark)
.light(setNightMode())
.fitWindow(setfitWindow())
.apply();
initDataBinding();
initView();
initData();
}
/**
* @return 是否是黑色状态栏
*/
// protected abstract boolean setNightMode();
public boolean setNightMode() {
return false;
}
/**
* @return 是否是入侵
*/
// protected abstract boolean setNightMode();
public boolean setfitWindow() {
return false;
}
protected abstract void initDataBinding();
/**
* 初始化视图
*/
protected abstract void initView();
/**
* 初始化数据
*/
protected abstract void initData();
}

View File

@@ -0,0 +1,57 @@
package com.aoleyun.sn.base;
import android.os.Bundle;
import androidx.annotation.CallSuper;
import androidx.annotation.Nullable;
import com.aoleyun.sn.R;
import com.aoleyun.sn.base.rx.BaseRxActivity;
import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX;
public abstract class BaseTransparentActivity extends BaseRxActivity {
public BaseTransparentActivity() {
super();
}
@Override
@CallSuper
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// StatusBarUtil.init(this);
UltimateBarX.statusBar(this)
.transparent()
.colorRes(R.color.colorPrimaryDark)
.light(setNightMode())
.fitWindow(setfitWindow())
.apply();
UltimateBarX.navigationBar(this)
.transparent()
.colorRes(R.color.colorPrimaryDark)
.light(setNightMode())
.fitWindow(setfitWindow())
.apply();
}
/**
* 设置布局
*/
protected abstract int getLayoutId();
/**
* @return 是否是黑色状态栏
*/
// protected abstract boolean setNightMode();
public boolean setNightMode() {
return false;
}
/**
* @return 是否是入侵
*/
// protected abstract boolean setNightMode();
public boolean setfitWindow() {
return false;
}
}

View File

@@ -0,0 +1,30 @@
package com.aoleyun.sn.base;
import android.content.Context;
import androidx.annotation.NonNull;
import com.bumptech.glide.GlideBuilder;
import com.bumptech.glide.annotation.GlideModule;
import com.bumptech.glide.load.engine.bitmap_recycle.LruBitmapPool;
import com.bumptech.glide.load.engine.cache.InternalCacheDiskCacheFactory;
import com.bumptech.glide.load.engine.cache.LruResourceCache;
import com.bumptech.glide.module.AppGlideModule;
@GlideModule
public class CustomGlideModule extends AppGlideModule {
@Override
public void applyOptions(@NonNull Context context, @NonNull GlideBuilder builder) {
super.applyOptions(context, builder);
//内存缓存
int memoryCacheSizeBytes = 1024 * 1024 * 100; // 20mb
builder.setMemoryCache(new LruResourceCache(memoryCacheSizeBytes));
//Bitmap 池
int bitmapPoolSizeBytes = 1024 * 1024 * 100; // 30mb
builder.setBitmapPool(new LruBitmapPool(bitmapPoolSizeBytes));
//磁盘缓存
int diskCacheSizeBytes = 1024 * 1024 * 100; // 100MB
builder.setDiskCache(new InternalCacheDiskCacheFactory(context, diskCacheSizeBytes));
}
}

View File

@@ -0,0 +1,34 @@
package com.aoleyun.sn.base.mvp;
import android.os.Bundle;
import androidx.annotation.CallSuper;
import androidx.annotation.Nullable;
import com.aoleyun.sn.base.BaseTransparentActivity;
public abstract class BaseMvpActivity extends BaseTransparentActivity {
public BaseMvpActivity() {
super();
}
@Override
@CallSuper
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getLayoutId());
initView();
initData();
}
/**
* 初始化视图
*/
protected abstract void initView();
/**
* 初始化数据
*/
protected abstract void initData();
}

View File

@@ -1,4 +1,4 @@
package com.mjsheng.myappstore.base;
package com.aoleyun.sn.base.mvp;
import androidx.annotation.NonNull;
@@ -7,4 +7,4 @@ public interface BasePresenter<V extends BaseView> {
void attachView(@NonNull V view);
void detachView();
}
}

View File

@@ -0,0 +1,4 @@
package com.aoleyun.sn.base.mvp;
public interface BaseView {
}

View File

@@ -0,0 +1,53 @@
package com.aoleyun.sn.base.mvvm;
import android.os.Bundle;
import android.util.Log;
import androidx.annotation.Nullable;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ViewDataBinding;
import androidx.lifecycle.ViewModel;
import androidx.lifecycle.ViewModelProvider;
import com.aoleyun.sn.base.BaseTransparentActivity;
import java.lang.reflect.Modifier;
import java.lang.reflect.ParameterizedType;
public abstract class BaseMvvmActivity<VM extends ViewModel, VDB extends ViewDataBinding> extends BaseTransparentActivity {
private static final String TAG = "BaseMvvmActivity";
protected VM mViewModel;
protected VDB mViewDataBinding;
protected Class<VM> vmClass;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//ViewDataBinding
mViewDataBinding = DataBindingUtil.setContentView(this, getLayoutId());
mViewDataBinding.setLifecycleOwner(this);
//ViewModel
vmClass = (Class<VM>) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
boolean isAbstract = Modifier.isAbstract(vmClass.getModifiers());
Log.e(TAG, "isLocalClass:" + vmClass.getSimpleName().equals(ViewModel.class.getSimpleName()) + " isAbstract:" + isAbstract);
if (!isAbstract) {//不是一个抽象类
mViewModel = new ViewModelProvider(this).get(vmClass);
}
initDataBinding();
initView();
initData();
}
protected abstract void initDataBinding();
/**
* 初始化视图
*/
protected abstract void initView();
/**
* 初始化数据
*/
protected abstract void initData();
}

View File

@@ -0,0 +1,71 @@
package com.aoleyun.sn.base.mvvm;
import android.content.Context;
import androidx.databinding.ViewDataBinding;
import androidx.lifecycle.ViewModel;
import java.lang.ref.WeakReference;
import io.reactivex.rxjava3.subjects.BehaviorSubject;
/**
* 所有viewmodel的基类
*/
public abstract class BaseViewModel<VDB extends ViewDataBinding, T> extends ViewModel implements ViewDataBindingCallback {
/**
* 当前viewmodel对应的页面binding
*/
protected VDB binding;
@Override
public void setVDBinding(ViewDataBinding vdBinding) {
binding = (VDB) vdBinding;
}
@Override
public VDB getVDBinding() {
if (binding == null) {
throw new NullPointerException("BaseViewModel >> getVDBinding >> null!!!");
}
return binding;
}
/**
* 上下文
*/
private WeakReference<Context> ctx;
@Override
public void setCtx(Context context) {
if (ctx == null) {
ctx = new WeakReference<>(context);
}
}
@Override
public Context getCtx() {
if (ctx == null) {
throw new NullPointerException("BaseViewModel >> getCtx >> null!!!");
}
return ctx.get();
}
public abstract void onDestroy();
private BehaviorSubject<T> mBehaviorSubject;
@Override
public void setLifecycle(BehaviorSubject subject) {
this.mBehaviorSubject = (BehaviorSubject<T>) subject;
}
@Override
public BehaviorSubject<T> getLifecycle() {
return mBehaviorSubject;
}
}

View File

@@ -0,0 +1,22 @@
package com.aoleyun.sn.base.mvvm;
import android.content.Context;
import androidx.databinding.ViewDataBinding;
import io.reactivex.rxjava3.subjects.BehaviorSubject;
public interface ViewDataBindingCallback<VDB extends ViewDataBinding, T> {
void setVDBinding(VDB binding);
VDB getVDBinding() throws NullPointerException;
void setCtx(Context context);
Context getCtx() throws NullPointerException;
void setLifecycle(BehaviorSubject<T> subject);
BehaviorSubject<T> getLifecycle();
}

View File

@@ -0,0 +1,94 @@
package com.aoleyun.sn.base.rx;
import android.os.Bundle;
import androidx.annotation.CallSuper;
import androidx.annotation.CheckResult;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.trello.rxlifecycle4.LifecycleProvider;
import com.trello.rxlifecycle4.LifecycleTransformer;
import com.trello.rxlifecycle4.RxLifecycle;
import com.trello.rxlifecycle4.android.ActivityEvent;
import com.trello.rxlifecycle4.android.RxLifecycleAndroid;
import io.reactivex.rxjava3.core.Observable;
import io.reactivex.rxjava3.subjects.BehaviorSubject;
/**
* {@link com.trello.rxlifecycle4.components.RxActivity}
* copied form RxActivity}
*/
public abstract class BaseRxActivity extends AppCompatActivity implements LifecycleProvider<ActivityEvent> {
private final BehaviorSubject<ActivityEvent> lifecycleSubject = BehaviorSubject.create();
public BehaviorSubject<ActivityEvent> getLifecycleSubject() {
return lifecycleSubject;
}
@Override
@NonNull
@CheckResult
public final Observable<ActivityEvent> lifecycle() {
return lifecycleSubject.hide();
}
@Override
@NonNull
@CheckResult
public final <T> LifecycleTransformer<T> bindUntilEvent(@NonNull ActivityEvent event) {
return RxLifecycle.bindUntilEvent(lifecycleSubject, event);
}
@Override
@NonNull
@CheckResult
public final <T> LifecycleTransformer<T> bindToLifecycle() {
return RxLifecycleAndroid.bindActivity(lifecycleSubject);
}
@Override
@CallSuper
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
lifecycleSubject.onNext(ActivityEvent.CREATE);
}
@Override
@CallSuper
protected void onStart() {
super.onStart();
lifecycleSubject.onNext(ActivityEvent.START);
}
@Override
@CallSuper
protected void onResume() {
super.onResume();
lifecycleSubject.onNext(ActivityEvent.RESUME);
}
@Override
@CallSuper
protected void onPause() {
lifecycleSubject.onNext(ActivityEvent.PAUSE);
super.onPause();
}
@Override
@CallSuper
protected void onStop() {
lifecycleSubject.onNext(ActivityEvent.STOP);
super.onStop();
}
@Override
@CallSuper
protected void onDestroy() {
lifecycleSubject.onNext(ActivityEvent.DESTROY);
super.onDestroy();
}
}

View File

@@ -0,0 +1,197 @@
package com.aoleyun.sn.bean;
import java.io.Serializable;
public class AdminAppInfo implements Serializable {
private static final long serialVersionUID = -4152412763486673833L;
int id;
String app_name;
String app_img;
String app_developer;
long app_size;
String app_package;
String app_version_name;
long app_version_code;
String app_md5;
float app_score;
String app_preview1;
String app_preview2;
String app_preview3;
String app_url;
String app_remarks;
String app_desc;
int is_promote;
int weight;
String discount;
String use_type;
int is_autodown;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getApp_name() {
return app_name;
}
public void setApp_name(String app_name) {
this.app_name = app_name;
}
public String getApp_img() {
return app_img;
}
public void setApp_img(String app_img) {
this.app_img = app_img;
}
public String getApp_developer() {
return app_developer;
}
public void setApp_developer(String app_developer) {
this.app_developer = app_developer;
}
public long getApp_size() {
return app_size;
}
public void setApp_size(long app_size) {
this.app_size = app_size;
}
public String getApp_package() {
return app_package;
}
public void setApp_package(String app_package) {
this.app_package = app_package;
}
public String getApp_version_name() {
return app_version_name;
}
public void setApp_version_name(String app_version_name) {
this.app_version_name = app_version_name;
}
public long getApp_version_code() {
return app_version_code;
}
public void setApp_version_code(long app_version_code) {
this.app_version_code = app_version_code;
}
public String getApp_md5() {
return app_md5;
}
public void setApp_md5(String app_md5) {
this.app_md5 = app_md5;
}
public float getApp_score() {
return app_score;
}
public void setApp_score(float app_score) {
this.app_score = app_score;
}
public String getApp_preview1() {
return app_preview1;
}
public void setApp_preview1(String app_preview1) {
this.app_preview1 = app_preview1;
}
public String getApp_preview2() {
return app_preview2;
}
public void setApp_preview2(String app_preview2) {
this.app_preview2 = app_preview2;
}
public String getApp_preview3() {
return app_preview3;
}
public void setApp_preview3(String app_preview3) {
this.app_preview3 = app_preview3;
}
public String getApp_url() {
return app_url;
}
public void setApp_url(String app_url) {
this.app_url = app_url;
}
public String getApp_remarks() {
return app_remarks;
}
public void setApp_remarks(String app_remarks) {
this.app_remarks = app_remarks;
}
public String getApp_desc() {
return app_desc;
}
public void setApp_desc(String app_desc) {
this.app_desc = app_desc;
}
public int getIs_promote() {
return is_promote;
}
public void setIs_promote(int is_promote) {
this.is_promote = is_promote;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
public String getDiscount() {
return discount;
}
public void setDiscount(String discount) {
this.discount = discount;
}
public String getUse_type() {
return use_type;
}
public void setUse_type(String use_type) {
this.use_type = use_type;
}
public int getIs_autodown() {
return is_autodown;
}
public void setIs_autodown(int is_autodown) {
this.is_autodown = is_autodown;
}
}

View File

@@ -0,0 +1,174 @@
package com.aoleyun.sn.bean;
import com.google.gson.annotations.SerializedName;
import java.io.Serializable;
public class ApkInfoPush implements Serializable {
private static final long serialVersionUID = 1566912665439013710L;
int app_id;
String app_name;
@SerializedName(value = "package_name", alternate = {"app_package", "package"})
String package_name;
String app_version_name;
long app_version_code;
long app_size;
String app_url;
String app_img;
String app_md5;
int app_attribution;
int app_forceinstall;
int is_auto;
int is_network;
int is_slide;
int is_upgrade;
int is_appstore;
int is_notification;
int is_dynamic_perm;
public int getApp_id() {
return app_id;
}
public void setApp_id(int app_id) {
this.app_id = app_id;
}
public String getApp_name() {
return app_name;
}
public void setApp_name(String app_name) {
this.app_name = app_name;
}
public String getPackage_name() {
return package_name;
}
public void setPackage_name(String package_name) {
this.package_name = package_name;
}
public String getApp_version_name() {
return app_version_name;
}
public void setApp_version_name(String app_version_name) {
this.app_version_name = app_version_name;
}
public long getApp_version_code() {
return app_version_code;
}
public void setApp_version_code(long app_version_code) {
this.app_version_code = app_version_code;
}
public long getApp_size() {
return app_size;
}
public void setApp_size(long app_size) {
this.app_size = app_size;
}
public String getApp_url() {
return app_url;
}
public void setApp_url(String app_url) {
this.app_url = app_url;
}
public String getApp_img() {
return app_img;
}
public void setApp_img(String app_img) {
this.app_img = app_img;
}
public String getApp_md5() {
return app_md5;
}
public void setApp_md5(String app_md5) {
this.app_md5 = app_md5;
}
public int getApp_attribution() {
return app_attribution;
}
public void setApp_attribution(int app_attribution) {
this.app_attribution = app_attribution;
}
public int getApp_forceinstall() {
return app_forceinstall;
}
public void setApp_forceinstall(int app_forceinstall) {
this.app_forceinstall = app_forceinstall;
}
public int getIs_auto() {
return is_auto;
}
public void setIs_auto(int is_auto) {
this.is_auto = is_auto;
}
public int getIs_network() {
return is_network;
}
public void setIs_network(int is_network) {
this.is_network = is_network;
}
public int getIs_slide() {
return is_slide;
}
public void setIs_slide(int is_slide) {
this.is_slide = is_slide;
}
public int getIs_upgrade() {
return is_upgrade;
}
public void setIs_upgrade(int is_upgrade) {
this.is_upgrade = is_upgrade;
}
public int getIs_appstore() {
return is_appstore;
}
public void setIs_appstore(int is_appstore) {
this.is_appstore = is_appstore;
}
public int getIs_notification() {
return is_notification;
}
public void setIs_notification(int is_notification) {
this.is_notification = is_notification;
}
public int getIs_dynamic_perm() {
return is_dynamic_perm;
}
public void setIs_dynamic_perm(int is_dynamic_perm) {
this.is_dynamic_perm = is_dynamic_perm;
}
}

View File

@@ -0,0 +1,27 @@
package com.aoleyun.sn.bean;
import java.io.Serializable;
public class AppAttr implements Serializable {
private static final long serialVersionUID = -4530860765778383316L;
String app_package;
/*应用是否允许打开 0不允许 1允许*/
int is_open;
public String getApp_package() {
return app_package;
}
public void setApp_package(String app_package) {
this.app_package = app_package;
}
public int getIs_open() {
return is_open;
}
public void setIs_open(int is_open) {
this.is_open = is_open;
}
}

View File

@@ -1,26 +1,40 @@
package com.mjsheng.myappstore.bean;
package com.aoleyun.sn.bean;
import androidx.annotation.NonNull;
import com.google.gson.Gson;
import com.google.gson.JsonParser;
import java.io.Serializable;
/**
* Created by Administrator on 2016/10/9.
*/
public class AppDateInfo implements Serializable {
private static final long serialVersionUID = 8711338410072780246L;
public String id;
public String app_name;
public String app_package;
public String app_version_name;
public String app_desc;
public String app_downloads;
public String app_size;
public String app_img;
public String app_url;
public String app_createtime;
public String app_score;
public String xitong_id;
public String zixitong_id;
public String app_tag;
String id;
String app_id;
String app_name;
String app_package;
String app_version_name;
long app_version_code;
String app_desc;
String app_downloads;
String app_size;
String app_img;
String app_url;
String app_createtime;
String app_score;
String xitong_id;
String zixitong_id;
String app_tag;
String app_md5;
public String getApp_id() {
return app_id;
}
public void setApp_id(String app_id) {
this.app_id = app_id;
}
public String getType() {
return app_tag;
@@ -142,23 +156,25 @@ public class AppDateInfo implements Serializable {
this.app_createtime = app_time;
}
public String getApp_md5() {
return app_md5;
}
public void setApp_md5(String app_md5) {
this.app_md5 = app_md5;
}
public long getApp_version_code() {
return app_version_code;
}
public void setApp_version_code(long app_version_code) {
this.app_version_code = app_version_code;
}
@NonNull
@Override
public String toString() {
return "AppDateInfo{" +
"id='" + id + '\'' +
", app_name='" + app_name + '\'' +
", app_package='" + app_package + '\'' +
", app_version_name='" + app_version_name + '\'' +
", app_desc='" + app_desc + '\'' +
", app_downloads='" + app_downloads + '\'' +
", app_size='" + app_size + '\'' +
", app_img='" + app_img + '\'' +
", app_url='" + app_url + '\'' +
", app_createtime='" + app_createtime + '\'' +
", app_score='" + app_score + '\'' +
", xitong_id='" + xitong_id + '\'' +
", zixitong_id='" + zixitong_id + '\'' +
", app_tag='" + app_tag + '\'' +
'}';
return JsonParser.parseString(new Gson().toJson(this)).getAsJsonObject().toString();
}
}

View File

@@ -1,4 +1,4 @@
package com.mjsheng.myappstore.bean;
package com.aoleyun.sn.bean;
import java.io.Serializable;
@@ -7,6 +7,8 @@ import java.io.Serializable;
*/
public class AppDownloadInfo implements Serializable {
private static final long serialVersionUID = -7868862477686450613L;
private String url; //文件URL
private String targetPath; //保存文件地址
private String fileName; //保存的文件名

View File

@@ -0,0 +1,37 @@
package com.aoleyun.sn.bean;
import androidx.annotation.NonNull;
import com.google.gson.annotations.SerializedName;
import java.io.Serializable;
public class AppID implements Serializable {
private static final long serialVersionUID = -2177988059115315546L;
String ids;
@SerializedName("package")
String packages;
public String getIds() {
return ids;
}
public void setIds(String ids) {
this.ids = ids;
}
public String getPackages() {
return packages;
}
public void setPackages(String packages) {
this.packages = packages;
}
@NonNull
@Override
public String toString() {
return packages + ":" + ids;
}
}

View File

@@ -1,15 +1,12 @@
package com.mjsheng.myappstore.bean;
package com.aoleyun.sn.bean;
import java.io.Serializable;
import java.util.List;
/**
* 作者 mjsheng
* 日期 2018/8/29 13:59
* 邮箱 501802639@qq.com
* 来自
*/
public class AppInfoBean implements Serializable {
private static final long serialVersionUID = 4849594429309728182L;
public class AppInfoBean {
private int code;
private String msg;
private List<AppDateInfo> data;

View File

@@ -0,0 +1,17 @@
package com.aoleyun.sn.bean;
import java.io.Serializable;
public class AppLimit implements Serializable {
private static final long serialVersionUID = -4550724319678357614L;
String result;
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
}

View File

@@ -0,0 +1,86 @@
package com.aoleyun.sn.bean;
import java.io.Serializable;
public class AppListInfo implements Serializable {
private static final long serialVersionUID = 9075899098432175779L;
private long app_version_code;
private String app_name;
private String app_package;
private String app_version_name;
private String app_url;
private String app_id;
private String app_md5;
String id;
String app_desc;
String app_downloads;
String app_size;
String app_img;
String app_createtime;
String app_score;
String xitong_id;
String zixitong_id;
String app_tag;
public static long getSerialVersionUID() {
return serialVersionUID;
}
public String getApp_package() {
return app_package;
}
public void setApp_package(String app_package) {
this.app_package = app_package;
}
public String getApp_version_name() {
return app_version_name;
}
public void setApp_version_name(String app_version_name) {
this.app_version_name = app_version_name;
}
public long getApp_version_code() {
return app_version_code;
}
public void setApp_version_code(long app_version_code) {
this.app_version_code = app_version_code;
}
public String getApp_url() {
return app_url;
}
public void setApp_url(String app_url) {
this.app_url = app_url;
}
public String getApp_name() {
return app_name;
}
public void setApp_name(String app_name) {
this.app_name = app_name;
}
public String getApp_id() {
return app_id;
}
public void setApp_id(String app_id) {
this.app_id = app_id;
}
public String getApp_md5() {
return app_md5;
}
public void setApp_md5(String app_md5) {
this.app_md5 = app_md5;
}
}

View File

@@ -0,0 +1,99 @@
package com.aoleyun.sn.bean;
import java.io.Serializable;
public class AppSettings implements Serializable {
private static final long serialVersionUID = -3501100183295519224L;
// APP图标
String app_icon;
// 小程序二维码
String mini_qrcode;
// 日志功能开关 1 开 0 关
int logs_control;
// 定义批次名称 1 开启 0 关闭
int custom_batch_control;
//批次名称
String custom_batch_name;
// 定义班级开关 1 开 0 关
int custom_class_control;
//班级名称
String custom_class_name;
// 定义学号开关 1 开 0 关
int custom_number_control;
//学号名称
String custom_number_name;
public String getApp_icon() {
return app_icon;
}
public void setApp_icon(String app_icon) {
this.app_icon = app_icon;
}
public String getMini_qrcode() {
return mini_qrcode;
}
public void setMini_qrcode(String mini_qrcode) {
this.mini_qrcode = mini_qrcode;
}
public int getLogs_control() {
return logs_control;
}
public void setLogs_control(int logs_control) {
this.logs_control = logs_control;
}
public int getCustom_batch_control() {
return custom_batch_control;
}
public void setCustom_batch_control(int custom_batch_control) {
this.custom_batch_control = custom_batch_control;
}
public String getCustom_batch_name() {
return custom_batch_name;
}
public void setCustom_batch_name(String custom_batch_name) {
this.custom_batch_name = custom_batch_name;
}
public int getCustom_class_control() {
return custom_class_control;
}
public void setCustom_class_control(int custom_class_control) {
this.custom_class_control = custom_class_control;
}
public String getCustom_class_name() {
return custom_class_name;
}
public void setCustom_class_name(String custom_class_name) {
this.custom_class_name = custom_class_name;
}
public int getCustom_number_control() {
return custom_number_control;
}
public void setCustom_number_control(int custom_number_control) {
this.custom_number_control = custom_number_control;
}
public String getCustom_number_name() {
return custom_number_name;
}
public void setCustom_number_name(String custom_number_name) {
this.custom_number_name = custom_number_name;
}
}

View File

@@ -0,0 +1,90 @@
package com.aoleyun.sn.bean;
import com.google.gson.Gson;
import com.google.gson.JsonParser;
import com.google.gson.annotations.SerializedName;
import java.io.Serializable;
public class AppUpdateInfo implements Serializable {
private static final long serialVersionUID = 8448660007210869129L;
int id;
String url;
long version_code;
String version_name;
String app_name;
@SerializedName("package")
String packages;
String app_md5;
int is_forcedown;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public long getVersion_code() {
return version_code;
}
public void setVersion_code(long version_code) {
this.version_code = version_code;
}
public String getVersion_name() {
return version_name;
}
public void setVersion_name(String version_name) {
this.version_name = version_name;
}
public String getApp_name() {
return app_name;
}
public void setApp_name(String app_name) {
this.app_name = app_name;
}
public String getPackages() {
return packages;
}
public void setPackages(String packages) {
this.packages = packages;
}
public String getApp_md5() {
return app_md5;
}
public void setApp_md5(String app_md5) {
this.app_md5 = app_md5;
}
public int getIs_forcedown() {
return is_forcedown;
}
public void setIs_forcedown(int is_forcedown) {
this.is_forcedown = is_forcedown;
}
@Override
public String toString() {
return JsonParser.parseString(new Gson().toJson(this)).getAsJsonObject().toString();
}
}

View File

@@ -1,9 +1,11 @@
package com.mjsheng.myappstore.bean;
package com.aoleyun.sn.bean;
import java.io.Serializable;
public class Appground implements Serializable {
private static final long serialVersionUID = 4623189862812297724L;
private String packages;
private String address;

View File

@@ -1,8 +1,11 @@
package com.mjsheng.myappstore.bean;
package com.aoleyun.sn.bean;
import androidx.annotation.NonNull;
import com.google.gson.Gson;
import com.google.gson.JsonParser;
import java.io.Serializable;
@@ -14,10 +17,9 @@ public class BaseResponse<T> implements Serializable {
public String msg;
public T data;
@NonNull
@Override
public String toString() {
return "{" + "code:" + code + "," + "msg:" + msg + "," + "data:" + data + "," + '}';
return JsonParser.parseString(new Gson().toJson(this)).getAsJsonObject().toString();
}
}

View File

@@ -0,0 +1,29 @@
package com.aoleyun.sn.bean;
import java.io.Serializable;
import java.util.List;
import java.util.Set;
public class Batch implements Serializable {
private static final long serialVersionUID = -1762804079800707443L;
String batch;
Set<String> group_en_name;
public String getBatch() {
return batch;
}
public void setBatch(String batch) {
this.batch = batch;
}
public Set<String> getGroup_en_name() {
return group_en_name;
}
public void setGroup_en_name(Set<String> group_en_name) {
this.group_en_name = group_en_name;
}
}

View File

@@ -0,0 +1,125 @@
package com.aoleyun.sn.bean;
import java.io.Serializable;
public class BatteryInfo implements Serializable {
private static final long serialVersionUID = 7615775335930367771L;
String battery_quantity;
String battery_temperature;
String battery_voltage;
String charge_current;
String charge_voltage;
String battery_status;
String charge_type;
String charge_current_max;
String charge_voltage_max;
String battery_health;
String quantity_max;
String battery_desc;
String charge_speed;
public String getBattery_quantity() {
return battery_quantity;
}
public void setBattery_quantity(String battery_quantity) {
this.battery_quantity = battery_quantity;
}
public String getBattery_temperature() {
return battery_temperature;
}
public void setBattery_temperature(String battery_temperature) {
this.battery_temperature = battery_temperature;
}
public String getBattery_voltage() {
return battery_voltage;
}
public void setBattery_voltage(String battery_voltage) {
this.battery_voltage = battery_voltage;
}
public String getCharge_current() {
return charge_current;
}
public void setCharge_current(String charge_current) {
this.charge_current = charge_current;
}
public String getCharge_voltage() {
return charge_voltage;
}
public void setCharge_voltage(String charge_voltage) {
this.charge_voltage = charge_voltage;
}
public String getBattery_status() {
return battery_status;
}
public void setBattery_status(String battery_status) {
this.battery_status = battery_status;
}
public String getCharge_type() {
return charge_type;
}
public void setCharge_type(String charge_type) {
this.charge_type = charge_type;
}
public String getCharge_current_max() {
return charge_current_max;
}
public void setCharge_current_max(String charge_current_max) {
this.charge_current_max = charge_current_max;
}
public String getCharge_voltage_max() {
return charge_voltage_max;
}
public void setCharge_voltage_max(String charge_voltage_max) {
this.charge_voltage_max = charge_voltage_max;
}
public String getBattery_health() {
return battery_health;
}
public void setBattery_health(String battery_health) {
this.battery_health = battery_health;
}
public String getQuantity_max() {
return quantity_max;
}
public void setQuantity_max(String quantity_max) {
this.quantity_max = quantity_max;
}
public String getBattery_desc() {
return battery_desc;
}
public void setBattery_desc(String battery_desc) {
this.battery_desc = battery_desc;
}
public String getCharge_speed() {
return charge_speed;
}
public void setCharge_speed(String charge_speed) {
this.charge_speed = charge_speed;
}
}

View File

@@ -0,0 +1,18 @@
package com.aoleyun.sn.bean;
import java.io.Serializable;
import java.util.List;
public class BlacklistBean implements Serializable {
private static final long serialVersionUID = 1686627090518410825L;
List<String> blacklist;
public List<String> getBlacklist() {
return blacklist;
}
public void setBlacklist(List<String> blacklist) {
this.blacklist = blacklist;
}
}

View File

@@ -0,0 +1,53 @@
package com.aoleyun.sn.bean;
import java.io.Serializable;
public class BluetoothType implements Serializable {
private static final long serialVersionUID = -1105070316766010023L;
int headset;
int sound;
int mobile;
int computer;
int keyboard;
public int getHeadset() {
return headset;
}
public void setHeadset(int headset) {
this.headset = headset;
}
public int getSound() {
return sound;
}
public void setSound(int sound) {
this.sound = sound;
}
public int getMobile() {
return mobile;
}
public void setMobile(int mobile) {
this.mobile = mobile;
}
public int getComputer() {
return computer;
}
public void setComputer(int computer) {
this.computer = computer;
}
public int getKeyboard() {
return keyboard;
}
public void setKeyboard(int keyboard) {
this.keyboard = keyboard;
}
}

View File

@@ -1,9 +1,11 @@
package com.mjsheng.myappstore.bean;
package com.aoleyun.sn.bean;
import java.io.Serializable;
public class BrowserBookmarks implements Serializable {
private static final long serialVersionUID = 596864357553413994L;
private String homepage;
private String labelpage;

View File

@@ -1,11 +1,15 @@
package com.mjsheng.myappstore.bean;
package com.aoleyun.sn.bean;
import java.io.Serializable;
public class BrowserData implements Serializable {
private static final long serialVersionUID = 5199831572891077086L;
private String white;
private String black;
private String white_ip;
private String black_ip;
public String getWhite() {
return white;
@@ -22,4 +26,20 @@ public class BrowserData implements Serializable {
public void setBlack(String black) {
this.black = black;
}
public String getWhite_ip() {
return white_ip;
}
public void setWhite_ip(String white_ip) {
this.white_ip = white_ip;
}
public String getBlack_ip() {
return black_ip;
}
public void setBlack_ip(String black_ip) {
this.black_ip = black_ip;
}
}

View File

@@ -1,4 +1,7 @@
package com.mjsheng.myappstore.bean;
package com.aoleyun.sn.bean;
import com.google.gson.Gson;
import com.google.gson.JsonParser;
import java.io.Serializable;
@@ -6,11 +9,13 @@ import java.io.Serializable;
* Created by Administrator on 2016/10/10.
*/
public class CategoryInfo implements Serializable {
private static final long serialVersionUID = 1373346057675939423L;
private String id;
private String name;
private String img;
public String getId() {
return id;
}
@@ -37,11 +42,7 @@ public class CategoryInfo implements Serializable {
@Override
public String toString() {
return "CategoryInfo{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", img='" + img + '\'' +
'}';
return JsonParser.parseString(new Gson().toJson(this)).getAsJsonObject().toString();
}
}

View File

@@ -1,15 +1,15 @@
package com.mjsheng.myappstore.bean;
package com.aoleyun.sn.bean;
import com.google.gson.Gson;
import com.google.gson.JsonParser;
import java.io.Serializable;
import java.util.List;
/**
* 作者 mjsheng
* 日期 2018/9/14 10:50
* 邮箱 501802639@qq.com
* 来自
*/
public class CategoryPicBean implements Serializable {
private static final long serialVersionUID = -4286518544348292816L;
public class CategoryPicBean {
private int code;
private String msg;
private List<CategoryInfo> data;
@@ -40,10 +40,6 @@ public class CategoryPicBean {
@Override
public String toString() {
return "CategoryPicBean{" +
"code=" + code +
", msg='" + msg + '\'' +
", data=" + data +
'}';
return JsonParser.parseString(new Gson().toJson(this)).getAsJsonObject().toString();
}
}

View File

@@ -0,0 +1,45 @@
package com.aoleyun.sn.bean;
import com.google.gson.Gson;
import com.google.gson.JsonParser;
import java.io.Serializable;
import java.util.List;
public class CommonPicBean implements Serializable {
private static final long serialVersionUID = -6056771155399643320L;
private int code;
private String msg;
private List<CommonPicData> data;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public List<CommonPicData> getData() {
return data;
}
public void setData(List<CommonPicData> data) {
this.data = data;
}
@Override
public String toString() {
return JsonParser.parseString(new Gson().toJson(this)).getAsJsonObject().toString();
}
}

View File

@@ -1,9 +1,14 @@
package com.mjsheng.myappstore.bean;
package com.aoleyun.sn.bean;
import com.google.gson.Gson;
import com.google.gson.JsonParser;
import java.io.Serializable;
public class CommonPicData implements Serializable {
private static final long serialVersionUID = -4066453793097764922L;
/**
* Created by Administrator on 2016/10/9.
*/
public class ProjectDateInfo {
private String id;
private String name;
private String img;
@@ -70,14 +75,6 @@ public class ProjectDateInfo {
@Override
public String toString() {
return "ProjectDateInfo{" +
"id=" + id +
", name='" + name + '\'' +
", img='" + img + '\'' +
", createtime=" + createtime +
", status='" + status + '\'' +
", admin_id=" + admin_id +
", batch='" + batch + '\'' +
'}';
return JsonParser.parseString(new Gson().toJson(this)).getAsJsonObject().toString();
}
}

View File

@@ -0,0 +1,17 @@
package com.aoleyun.sn.bean;
import java.io.Serializable;
public class CustomROMApp implements Serializable {
private static final long serialVersionUID = 4050973622829547418L;
String package_name;
public String getPackage_name() {
return package_name;
}
public void setPackage_name(String package_name) {
this.package_name = package_name;
}
}

View File

@@ -0,0 +1,75 @@
package com.aoleyun.sn.bean;
import java.io.Serializable;
/**
* @author jgy02
*/
public class DefaultApp implements Serializable {
private static final long serialVersionUID = -8180876443269736350L;
String default_launcher;
String default_browser;
String default_videoplayer;
String default_musiclayer;
String default_filemanager;
String default_gallery;
String default_IME;
public String getDefault_launcher() {
return default_launcher;
}
public void setDefault_launcher(String default_launcher) {
this.default_launcher = default_launcher;
}
public String getDefault_browser() {
return default_browser;
}
public void setDefault_browser(String default_browser) {
this.default_browser = default_browser;
}
public String getDefault_videoplayer() {
return default_videoplayer;
}
public void setDefault_videoplayer(String default_videoplayer) {
this.default_videoplayer = default_videoplayer;
}
public String getDefault_musiclayer() {
return default_musiclayer;
}
public void setDefault_musiclayer(String default_musiclayer) {
this.default_musiclayer = default_musiclayer;
}
public String getDefault_filemanager() {
return default_filemanager;
}
public void setDefault_filemanager(String default_filemanager) {
this.default_filemanager = default_filemanager;
}
public String getDefault_gallery() {
return default_gallery;
}
public void setDefault_gallery(String default_gallery) {
this.default_gallery = default_gallery;
}
public String getDefault_IME() {
return default_IME;
}
public void setDefault_IME(String default_IME) {
this.default_IME = default_IME;
}
}

View File

@@ -0,0 +1,17 @@
package com.aoleyun.sn.bean;
import java.io.Serializable;
public class DeveloperBean implements Serializable {
private static final long serialVersionUID = -7758392818747033266L;
int is_developer;
public int getIs_developer() {
return is_developer;
}
public void setIs_developer(int is_developer) {
this.is_developer = is_developer;
}
}

View File

@@ -0,0 +1,76 @@
package com.aoleyun.sn.bean;
import androidx.annotation.NonNull;
import com.google.gson.Gson;
import com.google.gson.JsonParser;
import com.google.gson.annotations.SerializedName;
import java.io.Serializable;
public class DownloadInfo implements Serializable {
private static final long serialVersionUID = 1098419795758711093L;
String app_name;
@SerializedName(value = "bg", alternate = {"app_package", "package", "package_name"})
String app_package;
String app_url;
long app_version_code;
String app_id;
@SerializedName("app_md5")
String MD5;
public String getApp_name() {
return app_name;
}
public void setApp_name(String app_name) {
this.app_name = app_name;
}
public String getApp_package() {
return app_package;
}
public void setApp_package(String app_package) {
this.app_package = app_package;
}
public String getApp_url() {
return app_url;
}
public void setApp_url(String app_url) {
this.app_url = app_url;
}
public long getApp_version_code() {
return app_version_code;
}
public void setApp_version_code(long app_version_code) {
this.app_version_code = app_version_code;
}
public String getApp_id() {
return app_id;
}
public void setApp_id(String app_id) {
this.app_id = app_id;
}
public String getMD5() {
return MD5;
}
public void setMD5(String MD5) {
this.MD5 = MD5;
}
@NonNull
@Override
public String toString() {
return JsonParser.parseString(new Gson().toJson(this)).getAsJsonObject().toString();
}
}

View File

@@ -0,0 +1,29 @@
package com.aoleyun.sn.bean;
import com.google.gson.annotations.SerializedName;
import java.io.Serializable;
public class DownloadTaskInfo implements Serializable {
private static final long serialVersionUID = -5406588064200275496L;
String app_name;
@SerializedName(value = "app_package", alternate = {"package", "packages"})
String app_package;
public String getApp_name() {
return app_name;
}
public void setApp_name(String app_name) {
this.app_name = app_name;
}
public String getApp_package() {
return app_package;
}
public void setApp_package(String app_package) {
this.app_package = app_package;
}
}

View File

@@ -0,0 +1,17 @@
package com.aoleyun.sn.bean;
import java.io.Serializable;
public class EBagCode implements Serializable {
private static final long serialVersionUID = -5406288064300275496L;
String ebagCode;
public String getEbagCode() {
return ebagCode;
}
public void setEbagCode(String ebagCode) {
this.ebagCode = ebagCode;
}
}

View File

@@ -0,0 +1,64 @@
package com.aoleyun.sn.bean;
import java.io.Serializable;
public class ElectronicFenceInfo implements Serializable {
private static final long serialVersionUID = 3539332214940698873L;
int id;
String name;
long longitude;
long latitude;
/*定位效验1是0否*/
int is_verify_location;
/*半径 米*/
int distance;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public long getLongitude() {
return longitude;
}
public void setLongitude(long longitude) {
this.longitude = longitude;
}
public long getLatitude() {
return latitude;
}
public void setLatitude(long latitude) {
this.latitude = latitude;
}
public int getIs_verify_location() {
return is_verify_location;
}
public void setIs_verify_location(int is_verify_location) {
this.is_verify_location = is_verify_location;
}
public int getDistance() {
return distance;
}
public void setDistance(int distance) {
this.distance = distance;
}
}

View File

@@ -1,8 +1,11 @@
package com.mjsheng.myappstore.bean;
package com.aoleyun.sn.bean;
import java.io.Serializable;
public class Expansions implements Serializable {
private static final long serialVersionUID = -4958527331079431641L;
private String file;
//包内文件地址
private String install_location;

View File

@@ -0,0 +1,45 @@
package com.aoleyun.sn.bean;
import com.google.gson.Gson;
import com.google.gson.JsonParser;
import java.io.Serializable;
public class ForceDownloadBean<T> implements Serializable {
private static final long serialVersionUID = 5434001463280365686L;
private int code;
private String msg;
private T data;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
@Override
public String toString() {
return JsonParser.parseString(new Gson().toJson(this)).getAsJsonObject().toString();
}
}

Some files were not shown because too many files have changed in this diff Show More