Compare commits

..

No commits in common. "appbase" and "contacts-v15.3.0" have entirely different histories.

466 changed files with 3360 additions and 7453 deletions

3
.gitmodules vendored
View File

@ -1,6 +1,3 @@
[submodule "libjc/jcc/libs"] [submodule "libjc/jcc/libs"]
path = libjc/jcc/libs path = libjc/jcc/libs
url = https://gitea.winboll.cc/Studio/APP_libjc_jcc_libs.git url = https://gitea.winboll.cc/Studio/APP_libjc_jcc_libs.git
[submodule "keystore"]
path = keystore
url = https://gitea.winboll.cc/Studio/keystore.git

View File

@ -0,0 +1,3 @@
#!/bin/usr/bash
## Change Back To Beta KeyStore in keystore module.
cd keystore;git reset --hard f5bc75ff45fcb8894b5bd3f49b91bdd8fe3c317e;cd ..

View File

@ -0,0 +1,3 @@
#!/bin/usr/bash
## Change Back To StageMG KeyStore in keystore module.
cd keystore;git reset --hard d22519b11253f85f495400b01b6373e9657defb4;cd ..

View File

@ -113,10 +113,10 @@ if [[ $? -eq 0 ]]; then
# 如果Git已经提交了所有代码就执行标签和应用发布操作 # 如果Git已经提交了所有代码就执行标签和应用发布操作
# 预先询问是否添加工作流标签 # 预先询问是否添加工作流标签
#echo "Add Github Workflows Tag? (yes/No)" echo "Add Github Workflows Tag? (yes/No)"
#result=$(askAddWorkflowsTag) result=$(askAddWorkflowsTag)
#nAskAddWorkflowsTag=$? nAskAddWorkflowsTag=$?
#echo $result echo $result
# 发布应用 # 发布应用
echo "Publishing WinBoLL APK ..." echo "Publishing WinBoLL APK ..."
@ -138,17 +138,17 @@ if [[ $? -eq 0 ]]; then
fi fi
# 添加 GitHub 工作流标签 # 添加 GitHub 工作流标签
#if [[ $nAskAddWorkflowsTag -eq 1 ]]; then if [[ $nAskAddWorkflowsTag -eq 1 ]]; then
# 如果用户选择添加工作流标签 # 如果用户选择添加工作流标签
#result=$(addWorkflowsTag $1) result=$(addWorkflowsTag $1)
#if [[ $? -eq 0 ]]; then if [[ $? -eq 0 ]]; then
# echo $result echo $result
# 工作流标签添加成功 # 工作流标签添加成功
#else else
#echo -e "${0}: addWorkflowsTag $1\n${result}\nAdd workflows tag cancel." echo -e "${0}: addWorkflowsTag $1\n${result}\nAdd workflows tag cancel."
#exit 1 # addWorkflowsTag 异常 exit 1 # addWorkflowsTag 异常
#fi fi
#fi fi
## 清理更新描述文件内容 ## 清理更新描述文件内容
echo "" > $1/app_update_description.txt echo "" > $1/app_update_description.txt

View File

@ -1,49 +0,0 @@
#!/bin/bash
# 应用秘钥创建脚本
# Linux 命令行创建JKS秘钥alias和keyAlias可配置文件名含时间戳
# 可配置参数(按需修改)
ALIAS="WinBoLL.CC_Debug" # 别名与keyAlias一致
STORE_PASS="androiddebugkey"
KEY_PASS="androiddebugkey"
COUNTRY="CN" # 国家代码
# 获取当前时间戳
TIMESTAMP=$(date +%Y%m%d%H%M%S)
FILENAME="${ALIAS}_${TIMESTAMP}.jks"
STORENAME="${ALIAS}_${TIMESTAMP}.keystore"
# 生成JKS文件alias与keyAlias同步
keytool -genkeypair \
-alias "${ALIAS}" \
-keyalg RSA \
-keysize 2048 \
-validity 1 \
-keystore "${FILENAME}" \
-dname "CN=WBFans, OU=Studio, O=WinBoLL, L=Shanwei, ST=Guangdong, C=${COUNTRY}" \
-storepass "${STORE_PASS}" \
-keypass "${KEY_PASS}"
# 写入配置文件
cat <<EOF > ${STORENAME}
keyAlias=${ALIAS}
keyPassword=${KEY_PASS}
storeFile=../appkey.jks
storePassword=${STORE_PASS}
EOF
echo "已生成秘钥:${FILENAME}"
echo "配置已写入 ${STORENAME}keyAlias=${ALIAS}"
# 询问是否复制文件
read -p "是否需要将文件复制为 appkey.jks 和 appkey.keystore(y/n): " CONFIRM
if [[ $CONFIRM =~ ^[Yy]$ ]]; then
# 复制 jks 文件为 appkey.jks
cp -v ${FILENAME} ../appkey.jks
# 复制 keystore 文件为 appkey.keystore
cp -v ${STORENAME} ../appkey.keystore
echo "文件复制完成"
else
echo "已取消文件复制"
fi

210
LICENSE
View File

@ -1,201 +1,73 @@
Apache License Apache License
Version 2.0, January 2004 Version 2.0, January 2004
http://www.apache.org/licenses/ http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions. 1. Definitions.
"License" shall mean the terms and conditions for use, reproduction, "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications, "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices (b) You must cause any modified files to carry prominent notices stating that You changed the files; and
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise, 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory, 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work. APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner] Copyright 2024 ZhanGSKen
Licensed under the Apache License, Version 2.0 (the "License"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. you may not use this file except in compliance with the License.
You may obtain a copy of the License at You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0 http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and See the License for the specific language governing permissions and
limitations under the License. limitations under the License.

View File

@ -1,8 +1,4 @@
# OriginMaster # ☁ ☁ ☁ WinBoLL APP ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁
【OriginMaster】WinBoLL 源生态计划。正如话,我需要一个 Point, 去撬动成个地球。
########
## ☁ ☁ ☁ WinBoLL APP ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁
# ☁ ☁ WinBoLL Studio Android 应用开源项目。☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ # ☁ ☁ WinBoLL Studio Android 应用开源项目。☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁
# ☁ ☁ ☁ WinBoLL 网站地址 https://www.winboll.cc/ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ # ☁ ☁ ☁ WinBoLL 网站地址 https://www.winboll.cc/ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁
@ -114,11 +110,9 @@
# 本项目要实际运用需要注意以下几个步骤: # 本项目要实际运用需要注意以下几个步骤:
# 在项目根目录下: # 在项目根目录下:
## ★. 项目模块编译环境设置(必须)settings.gradle-demo 要复制为 settings.gradle并取消相应项目模块的注释。 ## 1. 项目模块编译环境设置(必须)settings.gradle-demo 要复制为 settings.gradle并取消相应项目模块的注释。
## ★. 项目 Android SDK 编译环境设置(可选)local.properties-demo 要复制为 local.properties并按需要设置 Android SDK 目录。 ## 2. 项目 Android SDK 编译环境设置(可选)local.properties-demo 要复制为 local.properties并按需要设置 Android SDK 目录。
## ★. 应用签名密钥 keystore 设置问题。一般调试编译只需用【Termux】cd 进 GenKeyStore 目录执行 $ bash gen_debug_keystore.sh 命令即可完成设置。 ## 3. 类库型模块编译环境设置(可选)winboll.properties-demo 要复制为 winboll.properties并按需要设置 WinBoLL Maven 库登录用户信息。
## ☆. 应用 WiBoLL 签名密钥配置问题<非必须考虑>。设置时需要 clone 【keystore】模块源码并拷贝模块目录的 appkey.jks 与 appkey.keystore 到项目根目录即可。
## ☆. 类库型模块编译环境设置(可选)winboll.properties-demo 要复制为 winboll.properties并按需要设置 WinBoLL Maven 库登录用户信息。
# ☆类库型项目编译方法 # ☆类库型项目编译方法

View File

@ -1,35 +0,0 @@
# AES
#### 介绍
安卓视图元素类库
#### 软件架构
适配安卓应用 [AIDE Pro] 的 Gradle 编译结构。
也适配安卓应用 [AndroidIDE] 的 Gradle 编译结构。
#### Gradle 编译说明
调试版编译命令 gradle assembleBetaDebug
阶段版编译命令 bash .winboll/bashPublishAPKAddTag.sh aes
阶段版类库发布命令 git pull &&bash .winboll/bashPublishLIBAddTag.sh libaes
#### 使用说明
#### 参与贡献
1. Fork 本仓库
2. 新建 Feat_xxx 分支
3. 提交代码 : ZhanGSKen(ZhanGSKen<zhangsken@188.com>)
4. 新建 Pull Request
#### 特技
1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com)
3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目
4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
#### 参考文档

View File

@ -29,7 +29,7 @@ android {
// versionName // versionName
// build.gradle stageCount=0 // build.gradle stageCount=0
// Gradle编译环境下合起来的 versionName "${versionName}.0" // Gradle编译环境下合起来的 versionName "${versionName}.0"
versionName "15.9" versionName "15.6"
if(true) { if(true) {
versionName = genVersionName("${versionName}") versionName = genVersionName("${versionName}")
} }

View File

@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle #Created by .winboll/winboll_app_build.gradle
#Thu Jun 19 20:42:40 HKT 2025 #Sat May 03 11:34:58 GMT 2025
stageCount=2 stageCount=1
libraryProject=libaes libraryProject=libaes
baseVersion=15.9 baseVersion=15.6
publishVersion=15.9.1 publishVersion=15.6.0
buildCount=0 buildCount=9
baseBetaVersion=15.9.2 baseBetaVersion=15.6.1

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.aes; package cc.winboll.studio.aes;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/03/24 23:52:29 * @Date 2025/03/24 23:52:29
* @Describe AES应用介绍窗口 * @Describe AES应用介绍窗口
*/ */
@ -79,11 +79,11 @@ public class AboutActivity extends AppCompatActivity implements IWinBoLLActivity
appInfo.setAppName("AES"); appInfo.setAppName("AES");
appInfo.setAppIcon(cc.winboll.studio.libaes.R.drawable.ic_winboll); appInfo.setAppIcon(cc.winboll.studio.libaes.R.drawable.ic_winboll);
appInfo.setAppDescription("AES Description"); appInfo.setAppDescription("AES Description");
appInfo.setAppGitName("APPBase"); appInfo.setAppGitName("APP");
appInfo.setAppGitOwner("Studio"); appInfo.setAppGitOwner("Studio");
appInfo.setAppGitAPPBranch(szBranchName); appInfo.setAppGitAPPBranch(szBranchName);
appInfo.setAppGitAPPSubProjectFolder(szBranchName); appInfo.setAppGitAPPSubProjectFolder(szBranchName);
appInfo.setAppHomePage("https://discuz.winboll.cc/forum.php?mod=viewthread&tid=2&fromuid=1"); appInfo.setAppHomePage("https://www.winboll.cc/studio/details.php?app=AES");
appInfo.setAppAPKName("AES"); appInfo.setAppAPKName("AES");
appInfo.setAppAPKFolderName("AES"); appInfo.setAppAPKFolderName("AES");
//appInfo.setIsAddDebugTools(false); //appInfo.setIsAddDebugTools(false);

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.aes; package cc.winboll.studio.aes;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@QQ.COM
* @Date 2024/06/13 19:03:58 * @Date 2024/06/13 19:03:58
* @Describe AES应用类 * @Describe AES应用类
*/ */

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.aes; package cc.winboll.studio.aes;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@QQ.COM
* @Date 2024/06/13 19:05:52 * @Date 2024/06/13 19:05:52
* @Describe 应用主窗口 * @Describe 应用主窗口
*/ */

View File

@ -24,7 +24,7 @@ android {
defaultConfig { defaultConfig {
applicationId "cc.winboll.studio.androiddemo" applicationId "cc.winboll.studio.androiddemo"
minSdkVersion 24 minSdkVersion 24
targetSdkVersion 30 targetSdkVersion 29
versionCode 1 versionCode 1
// versionName // versionName
// .winboll/winbollBuildProps.properties stageCount=0 // .winboll/winbollBuildProps.properties stageCount=0
@ -67,6 +67,6 @@ dependencies {
// https://mvnrepository.com/artifact/com.android.support/recyclerview-v7 // https://mvnrepository.com/artifact/com.android.support/recyclerview-v7
api 'com.android.support:recyclerview-v7:28.0.0' api 'com.android.support:recyclerview-v7:28.0.0'
api 'cc.winboll.studio:libapputils:15.8.2' api 'cc.winboll.studio:libapputils:15.2.2'
api 'cc.winboll.studio:libappbase:15.8.2' api 'cc.winboll.studio:libappbase:15.2.2'
} }

View File

@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle #Created by .winboll/winboll_app_build.gradle
#Sun Jun 01 08:02:46 GMT 2025 #Thu Apr 03 03:17:18 GMT 2025
stageCount=0 stageCount=0
libraryProject= libraryProject=
baseVersion=15.0 baseVersion=15.0
publishVersion=15.0.0 publishVersion=15.0.0
buildCount=27 buildCount=21
baseBetaVersion=15.0.1 baseBetaVersion=15.0.1

View File

@ -24,7 +24,7 @@ android {
defaultConfig { defaultConfig {
applicationId "cc.winboll.studio.androidxdemo" applicationId "cc.winboll.studio.androidxdemo"
minSdkVersion 24 minSdkVersion 24
targetSdkVersion 30 targetSdkVersion 29
versionCode 1 versionCode 1
// versionName // versionName
// .winboll/winbollBuildProps.properties stageCount=0 // .winboll/winbollBuildProps.properties stageCount=0
@ -67,7 +67,7 @@ dependencies {
//api 'androidx.vectordrawable:vectordrawable-animated:1.1.0' //api 'androidx.vectordrawable:vectordrawable-animated:1.1.0'
//api 'androidx.fragment:fragment:1.1.0' //api 'androidx.fragment:fragment:1.1.0'
api 'cc.winboll.studio:libaes:15.8.0' api 'cc.winboll.studio:libaes:15.2.6'
api 'cc.winboll.studio:libapputils:15.8.2' api 'cc.winboll.studio:libapputils:15.2.2'
api 'cc.winboll.studio:libappbase:15.8.2' api 'cc.winboll.studio:libappbase:15.2.2'
} }

View File

@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle #Created by .winboll/winboll_app_build.gradle
#Thu Jun 19 12:49:47 GMT 2025 #Thu Apr 03 03:15:55 GMT 2025
stageCount=0 stageCount=0
libraryProject= libraryProject=
baseVersion=15.0 baseVersion=15.0
publishVersion=15.0.0 publishVersion=15.0.0
buildCount=26 buildCount=18
baseBetaVersion=15.0.1 baseBetaVersion=15.0.1

View File

@ -22,9 +22,9 @@ import android.widget.HorizontalScrollView;
import android.widget.ScrollView; import android.widget.ScrollView;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import cc.winboll.studio.androidxdemo.R;
import cc.winboll.studio.libappbase.GlobalApplication; import cc.winboll.studio.libappbase.GlobalApplication;
import com.hjq.toast.ToastUtils; import com.hjq.toast.ToastUtils;
import com.hjq.toast.style.WhiteToastStyle;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.Closeable; import java.io.Closeable;
@ -53,8 +53,8 @@ public class App extends GlobalApplication {
// 初始化 Toast 框架 // 初始化 Toast 框架
ToastUtils.init(this); ToastUtils.init(this);
// 设置 Toast 布局样式 // 设置 Toast 布局样式
//ToastUtils.setView(R.layout.view_toast); ToastUtils.setView(R.layout.view_toast);
ToastUtils.setStyle(new WhiteToastStyle()); //ToastUtils.setStyle(new WhiteToastStyle());
ToastUtils.setGravity(Gravity.BOTTOM, 0, 200); ToastUtils.setGravity(Gravity.BOTTOM, 0, 200);
//CrashHandler.getInstance().registerGlobal(this); //CrashHandler.getInstance().registerGlobal(this);

View File

@ -30,7 +30,7 @@ android {
// versionName // versionName
// .winboll/winbollBuildProps.properties stageCount=0 // .winboll/winbollBuildProps.properties stageCount=0
// Gradle编译环境下合起来的 versionName "${versionName}.0" // Gradle编译环境下合起来的 versionName "${versionName}.0"
versionName "15.8" versionName "15.7"
if(true) { if(true) {
versionName = genVersionName("${versionName}") versionName = genVersionName("${versionName}")
} }

View File

@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle #Created by .winboll/winboll_app_build.gradle
#Mon Jun 09 09:38:19 HKT 2025 #Sat May 03 10:32:21 GMT 2025
stageCount=9 stageCount=7
libraryProject=libappbase libraryProject=libappbase
baseVersion=15.8 baseVersion=15.7
publishVersion=15.8.8 publishVersion=15.7.6
buildCount=0 buildCount=4
baseBetaVersion=15.8.9 baseBetaVersion=15.7.7

View File

@ -9,8 +9,7 @@
android:label="@string/app_name" android:label="@string/app_name"
android:theme="@style/MyAPPBaseTheme" android:theme="@style/MyAPPBaseTheme"
android:resizeableActivity="true" android:resizeableActivity="true"
android:process=":App" android:process=":App">
android:networkSecurityConfig="@xml/network_security_config">
<activity <activity
android:name=".MainActivity" android:name=".MainActivity"
@ -40,8 +39,7 @@
android:resizeableActivity="true" android:resizeableActivity="true"
android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"/> android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"/>
<activity <activity android:name=".activities.New2Activity"
android:name=".activities.New2Activity"
android:label="New2Activity" android:label="New2Activity"
android:exported="true" android:exported="true"
android:resizeableActivity="true" android:resizeableActivity="true"
@ -76,8 +74,7 @@
<service android:name=".services.AssistantService"/> <service android:name=".services.AssistantService"/>
<receiver <receiver android:name="cc.winboll.studio.appbase.receivers.MainReceiver"
android:name="cc.winboll.studio.appbase.receivers.MainReceiver"
android:exported="true"> android:exported="true">
<intent-filter> <intent-filter>
@ -108,8 +105,7 @@
</receiver> </receiver>
<receiver <receiver android:name=".receivers.APPNewsWidgetClickListener"
android:name=".receivers.APPNewsWidgetClickListener"
android:exported="true"> android:exported="true">
<intent-filter> <intent-filter>
@ -126,6 +122,7 @@
android:name="android.max_aspect" android:name="android.max_aspect"
android:value="4.0"/> android:value="4.0"/>
</application> </application>
</manifest> </manifest>

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.appbase; package cc.winboll.studio.appbase;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@QQ.COM
* @Date 2025/01/05 09:54:42 * @Date 2025/01/05 09:54:42
* @Describe APPbase 应用类 * @Describe APPbase 应用类
*/ */

View File

@ -11,7 +11,6 @@ import android.widget.CheckBox;
import android.widget.Toolbar; import android.widget.Toolbar;
import cc.winboll.studio.appbase.R; import cc.winboll.studio.appbase.R;
import cc.winboll.studio.appbase.activities.NewActivity; import cc.winboll.studio.appbase.activities.NewActivity;
import cc.winboll.studio.appbase.activities.WinBoLLActivity;
import cc.winboll.studio.appbase.services.MainService; import cc.winboll.studio.appbase.services.MainService;
import cc.winboll.studio.appbase.services.TestDemoBindService; import cc.winboll.studio.appbase.services.TestDemoBindService;
import cc.winboll.studio.appbase.services.TestDemoService; import cc.winboll.studio.appbase.services.TestDemoService;
@ -19,13 +18,12 @@ import cc.winboll.studio.libappbase.CrashHandler;
import cc.winboll.studio.libappbase.GlobalApplication; import cc.winboll.studio.libappbase.GlobalApplication;
import cc.winboll.studio.libappbase.GlobalCrashActivity; import cc.winboll.studio.libappbase.GlobalCrashActivity;
import cc.winboll.studio.libappbase.LogUtils; import cc.winboll.studio.libappbase.LogUtils;
import cc.winboll.studio.libappbase.LogView;
import cc.winboll.studio.libappbase.sos.SOS; import cc.winboll.studio.libappbase.sos.SOS;
import cc.winboll.studio.libappbase.utils.ToastUtils; import cc.winboll.studio.libappbase.utils.ToastUtils;
import cc.winboll.studio.libappbase.widgets.StatusWidget; import cc.winboll.studio.libappbase.widgets.StatusWidget;
import cc.winboll.studio.libappbase.winboll.IWinBoLLActivity; import cc.winboll.studio.libappbase.winboll.IWinBoLLActivity;
public class MainActivity extends WinBoLLActivity implements IWinBoLLActivity { public class MainActivity extends WinBoLLActivityBase implements IWinBoLLActivity {
public static final String TAG = "MainActivity"; public static final String TAG = "MainActivity";
@ -40,6 +38,7 @@ public class MainActivity extends WinBoLLActivity implements IWinBoLLActivity {
} }
Toolbar mToolbar; Toolbar mToolbar;
//LogView mLogView;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
@ -52,25 +51,29 @@ public class MainActivity extends WinBoLLActivity implements IWinBoLLActivity {
CheckBox cbIsDebugMode = findViewById(R.id.activitymainCheckBox1); CheckBox cbIsDebugMode = findViewById(R.id.activitymainCheckBox1);
cbIsDebugMode.setChecked(GlobalApplication.isDebuging()); cbIsDebugMode.setChecked(GlobalApplication.isDebuging());
//mLogView = findViewById(R.id.activitymainLogView1);
// if (GlobalApplication.isDebuging()) {
// mLogView.start();
// ToastUtils.show("LogView start.");
// }
} }
@Override @Override
public boolean onCreateOptionsMenu(Menu menu) { public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.toolbar_main, menu); getMenuInflater().inflate(R.menu.toolbar_main, menu);
getMenuInflater().inflate(R.menu.toolbar_appbase, menu);
return super.onCreateOptionsMenu(menu); return super.onCreateOptionsMenu(menu);
} }
@Override @Override
public boolean onOptionsItemSelected(MenuItem item) { public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId() == R.id.item_yun) {
GlobalApplication.getWinBoLLActivityManager().startWinBoLLActivity(this, cc.winboll.studio.libappbase.activities.YunActivity.class);
} else if(item.getItemId() == R.id.item_logon) {
GlobalApplication.getWinBoLLActivityManager().startWinBoLLActivity(this, cc.winboll.studio.libappbase.activities.LogonActivity.class);
}
// 在switch语句中处理每个ID并在处理完后返回true未处理的情况返回false // 在switch语句中处理每个ID并在处理完后返回true未处理的情况返回false
return super.onOptionsItemSelected(item); return super.onOptionsItemSelected(item);
} }
@Override @Override
protected void onDestroy() { protected void onDestroy() {
super.onDestroy(); super.onDestroy();
@ -135,6 +138,8 @@ public class MainActivity extends WinBoLLActivity implements IWinBoLLActivity {
} }
public void onStopTestDemoService(View view) { public void onStopTestDemoService(View view) {
Intent intent = new Intent(this, TestDemoService.class); Intent intent = new Intent(this, TestDemoService.class);
intent.setAction(TestDemoService.ACTION_DISABLE); intent.setAction(TestDemoService.ACTION_DISABLE);
@ -174,10 +179,5 @@ public class MainActivity extends WinBoLLActivity implements IWinBoLLActivity {
GlobalApplication.getWinBoLLActivityManager().startWinBoLLActivity(this, NewActivity.class); GlobalApplication.getWinBoLLActivityManager().startWinBoLLActivity(this, NewActivity.class);
} }
@Override
protected void onResume() {
super.onResume();
}
} }

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.appbase; package cc.winboll.studio.appbase;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/02/13 19:30:10 * @Date 2025/02/13 19:30:10
*/ */
import android.content.Context; import android.content.Context;

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.appbase.activities; package cc.winboll.studio.appbase.activities;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/03/25 11:46:40 * @Date 2025/03/25 11:46:40
* @Describe 测试窗口2 * @Describe 测试窗口2
*/ */
@ -12,10 +12,11 @@ import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.widget.Toolbar; import android.widget.Toolbar;
import cc.winboll.studio.appbase.R; import cc.winboll.studio.appbase.R;
import cc.winboll.studio.appbase.WinBoLLActivityBase;
import cc.winboll.studio.libappbase.GlobalApplication; import cc.winboll.studio.libappbase.GlobalApplication;
import cc.winboll.studio.libappbase.winboll.IWinBoLLActivity; import cc.winboll.studio.libappbase.winboll.IWinBoLLActivity;
public class New2Activity extends WinBoLLActivity implements IWinBoLLActivity { public class New2Activity extends WinBoLLActivityBase implements IWinBoLLActivity {
public static final String TAG = "New2Activity"; public static final String TAG = "New2Activity";
@ -66,11 +67,16 @@ public class New2Activity extends WinBoLLActivity implements IWinBoLLActivity {
@Override @Override
public boolean onCreateOptionsMenu(Menu menu) { public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.toolbar_main, menu); getMenuInflater().inflate(R.menu.toolbar_main, menu);
getMenuInflater().inflate(R.menu.toolbar_appbase, menu);
return super.onCreateOptionsMenu(menu); return super.onCreateOptionsMenu(menu);
} }
@Override @Override
public boolean onOptionsItemSelected(MenuItem item) { public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == cc.winboll.studio.appbase.R.id.item_log) {
GlobalApplication.getWinBoLLActivityManager().startLogActivity(this);
return true;
}
// 在switch语句中处理每个ID并在处理完后返回true未处理的情况返回false // 在switch语句中处理每个ID并在处理完后返回true未处理的情况返回false
return super.onOptionsItemSelected(item); return super.onOptionsItemSelected(item);
} }

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.appbase.activities; package cc.winboll.studio.appbase.activities;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/03/25 05:04:22 * @Date 2025/03/25 05:04:22
*/ */
import android.app.Activity; import android.app.Activity;
@ -11,10 +11,11 @@ import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.widget.Toolbar; import android.widget.Toolbar;
import cc.winboll.studio.appbase.R; import cc.winboll.studio.appbase.R;
import cc.winboll.studio.appbase.WinBoLLActivityBase;
import cc.winboll.studio.libappbase.GlobalApplication; import cc.winboll.studio.libappbase.GlobalApplication;
import cc.winboll.studio.libappbase.winboll.IWinBoLLActivity; import cc.winboll.studio.libappbase.winboll.IWinBoLLActivity;
public class NewActivity extends WinBoLLActivity implements IWinBoLLActivity { public class NewActivity extends WinBoLLActivityBase implements IWinBoLLActivity {
public static final String TAG = "NewActivity"; public static final String TAG = "NewActivity";
@ -64,11 +65,16 @@ public class NewActivity extends WinBoLLActivity implements IWinBoLLActivity {
@Override @Override
public boolean onCreateOptionsMenu(Menu menu) { public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.toolbar_main, menu); getMenuInflater().inflate(R.menu.toolbar_main, menu);
getMenuInflater().inflate(R.menu.toolbar_appbase, menu);
return super.onCreateOptionsMenu(menu); return super.onCreateOptionsMenu(menu);
} }
@Override @Override
public boolean onOptionsItemSelected(MenuItem item) { public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == cc.winboll.studio.appbase.R.id.item_log) {
GlobalApplication.getWinBoLLActivityManager().startLogActivity(this);
return true;
}
// 在switch语句中处理每个ID并在处理完后返回true未处理的情况返回false // 在switch语句中处理每个ID并在处理完后返回true未处理的情况返回false
return super.onOptionsItemSelected(item); return super.onOptionsItemSelected(item);
} }

View File

@ -1,61 +0,0 @@
package cc.winboll.studio.appbase.activities;
/**
* @Author ZhanGSKen<zhangsken@188.com>
* @Date 2025/05/10 09:48
* @Describe WinBoLL 窗口基础类
*/
import android.app.Activity;
import android.os.Bundle;
import android.view.MenuItem;
import cc.winboll.studio.appbase.MainActivity;
import cc.winboll.studio.appbase.R;
import cc.winboll.studio.libappbase.GlobalApplication;
import cc.winboll.studio.libappbase.LogUtils;
import cc.winboll.studio.libappbase.winboll.IWinBoLLActivity;
public class WinBoLLActivity extends Activity implements IWinBoLLActivity {
public static final String TAG = "WinBoLLActivity";
@Override
public Activity getActivity() {
return this;
}
@Override
public String getTag() {
return TAG;
}
@Override
protected void onResume() {
super.onResume();
LogUtils.d(TAG, String.format("onResume %s", getTag()));
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.item_log) {
GlobalApplication.getWinBoLLActivityManager().startLogActivity(this);
return true;
} else if (item.getItemId() == R.id.item_home) {
GlobalApplication.getWinBoLLActivityManager().startWinBoLLActivity(getApplicationContext(), MainActivity.class);
return true;
}
// 在switch语句中处理每个ID并在处理完后返回true未处理的情况返回false
return super.onOptionsItemSelected(item);
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
GlobalApplication.getWinBoLLActivityManager().add(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
GlobalApplication.getWinBoLLActivityManager().registeRemove(this);
}
}

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.appbase.handlers; package cc.winboll.studio.appbase.handlers;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/02/14 03:51:40 * @Date 2025/02/14 03:51:40
*/ */
import android.os.Handler; import android.os.Handler;

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.appbase.models; package cc.winboll.studio.appbase.models;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/02/13 07:06:13 * @Date 2025/02/13 07:06:13
*/ */
import android.util.JsonReader; import android.util.JsonReader;

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.appbase.models; package cc.winboll.studio.appbase.models;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/03/07 12:47:22 * @Date 2025/03/07 12:47:22
* @Describe TestServiceBean * @Describe TestServiceBean
*/ */

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.appbase.models; package cc.winboll.studio.appbase.models;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/03/07 12:49:21 * @Date 2025/03/07 12:49:21
* @Describe TestDemoServiceBean * @Describe TestDemoServiceBean
*/ */

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.appbase.receivers; package cc.winboll.studio.appbase.receivers;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/03/24 07:11:44 * @Date 2025/03/24 07:11:44
*/ */
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.appbase.receivers; package cc.winboll.studio.appbase.receivers;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/02/13 06:58:04 * @Date 2025/02/13 06:58:04
* @Describe 主要广播接收器 * @Describe 主要广播接收器
*/ */
@ -10,18 +10,16 @@ import android.content.ComponentName;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import cc.winboll.studio.appbase.models.WinBoLLNewsBean;
import cc.winboll.studio.appbase.services.MainService; import cc.winboll.studio.appbase.services.MainService;
import cc.winboll.studio.appbase.widgets.APPNewsWidget; import cc.winboll.studio.appbase.widgets.APPNewsWidget;
import cc.winboll.studio.libappbase.AppUtils; import cc.winboll.studio.libappbase.AppUtils;
import cc.winboll.studio.libappbase.LogUtils; import cc.winboll.studio.libappbase.LogUtils;
import cc.winboll.studio.libappbase.models.APPModel; import cc.winboll.studio.libappbase.sos.APPModel;
import cc.winboll.studio.libappbase.models.WinBoLLModel;
import cc.winboll.studio.libappbase.models.WinBoLLNewsBean;
import cc.winboll.studio.libappbase.sos.SOS; import cc.winboll.studio.libappbase.sos.SOS;
import cc.winboll.studio.libappbase.sos.SOSObject; import cc.winboll.studio.libappbase.sos.SOSObject;
import cc.winboll.studio.libappbase.sos.WinBoLL;
import cc.winboll.studio.libappbase.utils.ToastUtils; import cc.winboll.studio.libappbase.utils.ToastUtils;
import cc.winboll.studio.libappbase.winboll.IWinBoLLActivity;
import cc.winboll.studio.libappbase.winboll.WinBoLL;
import java.io.IOException; import java.io.IOException;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
@ -44,21 +42,21 @@ public class MainReceiver extends BroadcastReceiver {
String szAction = intent.getAction(); String szAction = intent.getAction();
if (szAction.equals(ACTION_BOOT_COMPLETED)) { if (szAction.equals(ACTION_BOOT_COMPLETED)) {
ToastUtils.show("ACTION_BOOT_COMPLETED"); ToastUtils.show("ACTION_BOOT_COMPLETED");
} else if (szAction.equals(IWinBoLLActivity.ACTION_BIND)) { } else if (szAction.equals(WinBoLL.ACTION_BIND)) {
LogUtils.d(TAG, "ACTION_BIND"); LogUtils.d(TAG, "ACTION_BIND");
LogUtils.d(TAG, String.format("context.getPackageName() %s", context.getPackageName())); LogUtils.d(TAG, String.format("context.getPackageName() %s", context.getPackageName()));
LogUtils.d(TAG, String.format("intent.getAction() %s", intent.getAction())); LogUtils.d(TAG, String.format("intent.getAction() %s", intent.getAction()));
String szWinBoLLModel = intent.getStringExtra(WinBoLL.EXTRA_WINBOLLMODEL); String szAPPModel = intent.getStringExtra(WinBoLL.EXTRA_APPMODEL);
LogUtils.d(TAG, String.format("szAPPModel %s", szWinBoLLModel)); LogUtils.d(TAG, String.format("szAPPModel %s", szAPPModel));
if (szWinBoLLModel != null && !szWinBoLLModel.equals("")) { if (szAPPModel != null && !szAPPModel.equals("")) {
try { try {
WinBoLLModel bean = WinBoLLModel.parseStringToBean(szWinBoLLModel, WinBoLLModel.class); APPModel bean = APPModel.parseStringToBean(szAPPModel, APPModel.class);
if (bean != null) { if (bean != null) {
String szAppPackageName = bean.getAppPackageName(); String szAppPackageName = bean.getAppPackageName();
LogUtils.d(TAG, String.format("szAppPackageName %s", szAppPackageName)); LogUtils.d(TAG, String.format("szAppPackageName %s", szAppPackageName));
String szAppMainServiveName = bean.getAppMainServiveName(); String szAppMainServiveName = bean.getAppMainServiveName();
LogUtils.d(TAG, String.format("szAppMainServiveName %s", szAppMainServiveName)); LogUtils.d(TAG, String.format("szAppMainServiveName %s", szAppMainServiveName));
mwrService.get().bindWinBoLLModelConnection(bean); mwrService.get().bindAPPModelConnection(bean);
} }
} catch (IOException e) { } catch (IOException e) {
LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.appbase.services; package cc.winboll.studio.appbase.services;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/02/14 03:38:31 * @Date 2025/02/14 03:38:31
* @Describe 守护进程服务 * @Describe 守护进程服务
*/ */

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.appbase.services; package cc.winboll.studio.appbase.services;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/02/13 06:56:41 * @Date 2025/02/13 06:56:41
* @Describe 拨号主服务 * @Describe 拨号主服务
* 参考: * 参考:
@ -18,16 +18,15 @@ import android.content.ServiceConnection;
import android.os.Binder; import android.os.Binder;
import android.os.IBinder; import android.os.IBinder;
import cc.winboll.studio.appbase.MyTileService; import cc.winboll.studio.appbase.MyTileService;
import cc.winboll.studio.appbase.handlers.MainServiceHandler;
import cc.winboll.studio.appbase.models.MainServiceBean; import cc.winboll.studio.appbase.models.MainServiceBean;
import cc.winboll.studio.appbase.handlers.MainServiceHandler;
import cc.winboll.studio.appbase.receivers.MainReceiver; import cc.winboll.studio.appbase.receivers.MainReceiver;
import cc.winboll.studio.appbase.services.AssistantService; import cc.winboll.studio.appbase.services.AssistantService;
import cc.winboll.studio.appbase.threads.MainServiceThread; import cc.winboll.studio.appbase.threads.MainServiceThread;
import cc.winboll.studio.appbase.widgets.APPNewsWidget; import cc.winboll.studio.appbase.widgets.APPNewsWidget;
import cc.winboll.studio.libappbase.LogUtils; import cc.winboll.studio.libappbase.LogUtils;
import cc.winboll.studio.libappbase.models.APPModel;
import cc.winboll.studio.libappbase.models.WinBoLLModel;
import java.util.ArrayList; import java.util.ArrayList;
import cc.winboll.studio.libappbase.sos.APPModel;
public class MainService extends Service { public class MainService extends Service {
@ -183,7 +182,7 @@ public class MainService extends Service {
} }
} }
public void bindWinBoLLModelConnection(WinBoLLModel bean) { public void bindAPPModelConnection(APPModel bean) {
LogUtils.d(TAG, "bindAPPModelConnection(...)"); LogUtils.d(TAG, "bindAPPModelConnection(...)");
// 清理旧的绑定链接 // 清理旧的绑定链接
for (int i = mAPPModelConnectionList.size() - 1; i > -1; i--) { for (int i = mAPPModelConnectionList.size() - 1; i > -1; i--) {
@ -204,7 +203,7 @@ public class MainService extends Service {
Intent intentWidget = new Intent(this, APPNewsWidget.class); Intent intentWidget = new Intent(this, APPNewsWidget.class);
intentWidget.setAction(APPNewsWidget.ACTION_WAKEUP_SERVICE); intentWidget.setAction(APPNewsWidget.ACTION_WAKEUP_SERVICE);
WinBoLLModel appSOSBean = new WinBoLLModel(bean.getAppPackageName(), bean.getAppMainServiveName()); APPModel appSOSBean = new APPModel(bean.getAppPackageName(), bean.getAppMainServiveName());
intentWidget.putExtra("APPSOSBean", appSOSBean.toString()); intentWidget.putExtra("APPSOSBean", appSOSBean.toString());
sendBroadcast(intentWidget); sendBroadcast(intentWidget);
} }
@ -213,7 +212,7 @@ public class MainService extends Service {
ComponentName mComponentName; ComponentName mComponentName;
boolean isBindToAPP(WinBoLLModel bean) { boolean isBindToAPP(APPModel bean) {
return mComponentName != null return mComponentName != null
&& mComponentName.getClassName().equals(bean.getAppMainServiveName()) && mComponentName.getClassName().equals(bean.getAppMainServiveName())
&& mComponentName.getPackageName().equals(bean.getAppPackageName()); && mComponentName.getPackageName().equals(bean.getAppPackageName());

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.appbase.services; package cc.winboll.studio.appbase.services;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/03/07 12:45:49 * @Date 2025/03/07 12:45:49
* @Describe 启动时申请绑定到APPBase主服务的服务示例 * @Describe 启动时申请绑定到APPBase主服务的服务示例
*/ */
@ -10,12 +10,11 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Binder; import android.os.Binder;
import android.os.IBinder; import android.os.IBinder;
import cc.winboll.studio.appbase.App;
import cc.winboll.studio.appbase.models.TestDemoBindServiceBean; import cc.winboll.studio.appbase.models.TestDemoBindServiceBean;
import cc.winboll.studio.appbase.services.TestDemoBindService;
import cc.winboll.studio.libappbase.LogUtils; import cc.winboll.studio.libappbase.LogUtils;
import cc.winboll.studio.libappbase.sos.WinBoLL;
import cc.winboll.studio.appbase.App;
import cc.winboll.studio.libappbase.sos.SOS; import cc.winboll.studio.libappbase.sos.SOS;
import cc.winboll.studio.libappbase.winboll.WinBoLL;
public class TestDemoBindService extends Service { public class TestDemoBindService extends Service {

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.appbase.services; package cc.winboll.studio.appbase.services;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/03/07 12:39:24 * @Date 2025/03/07 12:39:24
* @Describe 普通服务示例 * @Describe 普通服务示例
*/ */
@ -12,6 +12,7 @@ import android.os.Binder;
import android.os.IBinder; import android.os.IBinder;
import cc.winboll.studio.appbase.models.TestDemoServiceBean; import cc.winboll.studio.appbase.models.TestDemoServiceBean;
import cc.winboll.studio.libappbase.LogUtils; import cc.winboll.studio.libappbase.LogUtils;
import cc.winboll.studio.libappbase.sos.WinBoLL;
public class TestDemoService extends Service { public class TestDemoService extends Service {

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.appbase.threads; package cc.winboll.studio.appbase.threads;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/02/14 03:46:44 * @Date 2025/02/14 03:46:44
*/ */
import android.content.Context; import android.content.Context;

View File

@ -1,6 +1,6 @@
package cc.winboll.studio.appbase.widgets; package cc.winboll.studio.appbase.widgets;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/02/15 14:41:25 * @Date 2025/02/15 14:41:25
* @Describe TimeWidget * @Describe TimeWidget
*/ */
@ -12,17 +12,16 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.widget.RemoteViews; import android.widget.RemoteViews;
import cc.winboll.studio.appbase.R; import cc.winboll.studio.appbase.R;
import cc.winboll.studio.appbase.models.WinBoLLNewsBean;
import cc.winboll.studio.appbase.receivers.APPNewsWidgetClickListener; import cc.winboll.studio.appbase.receivers.APPNewsWidgetClickListener;
import cc.winboll.studio.libappbase.AppUtils; import cc.winboll.studio.libappbase.AppUtils;
import cc.winboll.studio.libappbase.LogUtils; import cc.winboll.studio.libappbase.LogUtils;
import cc.winboll.studio.libappbase.models.APPModel; import cc.winboll.studio.libappbase.sos.APPModel;
import cc.winboll.studio.libappbase.models.WinBoLLNewsBean; import cc.winboll.studio.libappbase.sos.WinBoLL;
import cc.winboll.studio.libappbase.winboll.WinBoLL;
import java.io.IOException; import java.io.IOException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import cc.winboll.studio.libappbase.models.WinBoLLModel;
public class APPNewsWidget extends AppWidgetProvider { public class APPNewsWidget extends AppWidgetProvider {
@ -58,11 +57,11 @@ public class APPNewsWidget extends AppWidgetProvider {
} }
}else if (intent.getAction().equals(ACTION_WAKEUP_SERVICE)) { }else if (intent.getAction().equals(ACTION_WAKEUP_SERVICE)) {
LogUtils.d(TAG, "ACTION_WAKEUP_SERVICE"); LogUtils.d(TAG, "ACTION_WAKEUP_SERVICE");
String szWinBoLLModel = intent.getStringExtra(WinBoLL.EXTRA_WINBOLLMODEL); String szAPPModel = intent.getStringExtra(WinBoLL.EXTRA_APPMODEL);
LogUtils.d(TAG, String.format("szWinBoLLModel %s", szWinBoLLModel)); LogUtils.d(TAG, String.format("szAPPModel %s", szAPPModel));
if (szWinBoLLModel != null && !szWinBoLLModel.equals("")) { if (szAPPModel != null && !szAPPModel.equals("")) {
try { try {
WinBoLLModel bean = WinBoLLModel.parseStringToBean(szWinBoLLModel, WinBoLLModel.class); APPModel bean = APPModel.parseStringToBean(szAPPModel, APPModel.class);
if (bean != null) { if (bean != null) {
String szAppPackageName = bean.getAppPackageName(); String szAppPackageName = bean.getAppPackageName();
LogUtils.d(TAG, String.format("szAppPackageName %s", szAppPackageName)); LogUtils.d(TAG, String.format("szAppPackageName %s", szAppPackageName));

View File

@ -32,18 +32,12 @@
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="安卓R对应的是Android 11其API级别是30。以下是Android 11中一些重要的API相关特性 android:text="Hello, WinBoLL!"/>
\n- 隐私保护方面:引入单次授权,让用户可以选择授予应用对位置信息、麦克风和摄像头的临时访问权限。还增加了数据访问审核功能,能让开发者深入了解应用在何处访问私密数据。
\n- 系统功能方面提供了ControlsProviderService API用于向连接的外部设备提供控件这些控件显示于Android电源菜单中的设备控件下。媒体控件也得到更新显示于快捷设置旁来自多个应用的会话排列在一个可滑动的轮播界面中。
\n- 硬件支持方面提供了一些API以支持瀑布屏通过将窗口布局属性  layoutInDisplayCutoutMode  设为  LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS 可允许窗口延伸到屏幕各个边缘上的刘海和瀑布区域。对于合页式屏幕配置的设备提供了具有  TYPE_HINGE_ANGLE  的新传感器以及新的  SensorEvent 用于监控合页角度。
\n- 安全方面:对生物识别身份验证机制进行了更新,引入了  BiometricManager.Authenticators  接口,定义了  BIOMETRIC_STRONG  BIOMETRIC_WEAK  DEVICE_CREDENTIAL  等身份验证类型。还在  BiometricPrompt  类中提供了对“每次使用时进行身份验证”密钥的更多支持。
\n- 性能和质量方面支持无线调试通过Android调试桥adb从工作站以无线方式部署和调试应用避免了常见的USB连接问题。"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Android版本10的代号是“Q”API级别是29。 Android 10开始谷歌不再公开使用甜品作为版本代号但内部仍保留了大量与“Q”相关的元素。Android 10本身并没有严格对应某个特定的Java版本但在开发Android 10应用时通常可以使用Java 8或更高版本。 Java 8为Android开发带来了诸如Lambda表达式、方法引用等新特性能提高开发效率和代码可读性与Android 10开发适配良好。Java 9及更高版本也可用于Android 10开发能使用一些新的语言特性和API但可能需要注意兼容性和配置问题。"/>
<HorizontalScrollView <HorizontalScrollView
android:layout_width="match_parent" android:layout_width="match_parent"
@ -217,5 +211,6 @@
</LinearLayout> </LinearLayout>
</ScrollView> </ScrollView>
</LinearLayout> </LinearLayout>

View File

@ -1,20 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" <menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"> xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/item_home"
android:title="HOME"
android:icon="@drawable/ic_winboll"/>
<item
android:id="@+id/item_yun"
android:title="YUN"
android:icon="@drawable/ic_winboll"/>
<item
android:id="@+id/item_logon"
android:title="Logon"
android:icon="@drawable/ic_winboll"/>
<item
android:id="@+id/item_log"
android:title="LOG"
android:icon="@drawable/ic_winboll_log"/>
</menu> </menu>

View File

@ -1,12 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<!-- 允许访问 winboll.cc 及其子域名(原配置) -->
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">winboll.cc</domain>
</domain-config>
<!-- **新增:允许访问 IP 地址 10.8.0.250** -->
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="false">10.8.0.250</domain> <!-- 不包含子域名 -->
</domain-config>
</network-security-config>

View File

@ -29,7 +29,7 @@ android {
// versionName // versionName
// build.gradle stageCount=0 // build.gradle stageCount=0
// Gradle编译环境下合起来的 versionName "${versionName}.0" // Gradle编译环境下合起来的 versionName "${versionName}.0"
versionName "15.8" versionName "15.3"
if(true) { if(true) {
versionName = genVersionName("${versionName}") versionName = genVersionName("${versionName}")
} }

View File

@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle #Created by .winboll/winboll_app_build.gradle
#Tue Jun 03 15:05:48 HKT 2025 #Tue Apr 29 15:04:17 HKT 2025
stageCount=5 stageCount=5
libraryProject=libapputils libraryProject=libapputils
baseVersion=15.8 baseVersion=15.3
publishVersion=15.8.4 publishVersion=15.3.4
buildCount=0 buildCount=0
baseBetaVersion=15.8.5 baseBetaVersion=15.3.5

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.apputils; package cc.winboll.studio.apputils;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@QQ.COM
* @Date 2024/12/08 15:10:51 * @Date 2024/12/08 15:10:51
* @Describe 全局应用类 * @Describe 全局应用类
*/ */

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.apputils; package cc.winboll.studio.apputils;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@QQ.COM
* @Date 2025/01/03 11:02:49 * @Date 2025/01/03 11:02:49
* @Describe 一个可以浏览随 APP 附带的 Html 文档的窗口 * @Describe 一个可以浏览随 APP 附带的 Html 文档的窗口
*/ */
@ -20,7 +20,18 @@ import cc.winboll.studio.libapputils.views.SimpleWebView;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
public class AssetsHtmlActivity extends WinBoLLActivity implements IWinBoLLActivity { public class AssetsHtmlActivity extends WinBoLLActivityBase implements IWinBoLLActivity {
@Override
public Activity getActivity() {
return super.getActivity();
}
@Override
public String getTag() {
return TAG;
}
public static final String TAG = "AssetsHtmlActivity"; public static final String TAG = "AssetsHtmlActivity";
@ -32,16 +43,11 @@ public class AssetsHtmlActivity extends WinBoLLActivity implements IWinBoLLActiv
// Assets 文件夹里的 Html 文件的名称 // Assets 文件夹里的 Html 文件的名称
String mszHtmlFileName; String mszHtmlFileName;
//
@Override // @Override
public Activity getActivity() { // public Activity getActivity() {
return this; // return this;
} // }
@Override
public String getTag() {
return TAG;
}
@Override @Override
public boolean onCreateOptionsMenu(Menu menu) { public boolean onCreateOptionsMenu(Menu menu) {

View File

@ -217,10 +217,10 @@ final public class MainActivity extends Activity {
if (item.getItemId() == R.id.item_exit) { if (item.getItemId() == R.id.item_exit) {
//exit(); //exit();
return true; return true;
// } else if (item.getItemId() == R.id.item_teststringtoqrcodeview) { } else if (item.getItemId() == R.id.item_teststringtoqrcodeview) {
// Intent intent = new Intent(this, TestStringToQRCodeViewActivity.class); Intent intent = new Intent(this, TestStringToQRCodeViewActivity.class);
// startActivityForResult(intent, REQUEST_QRCODEDECODE_ACTIVITY); startActivityForResult(intent, REQUEST_QRCODEDECODE_ACTIVITY);
// //WinBoLLActivityManager.getInstance(this).startWinBoLLActivity(this, TestStringToQrCodeViewActivity.class); //WinBoLLActivityManager.getInstance(this).startWinBoLLActivity(this, TestStringToQrCodeViewActivity.class);
} else if (item.getItemId() == R.id.item_testqrcodedecodeactivity) { } else if (item.getItemId() == R.id.item_testqrcodedecodeactivity) {
Intent intent = new Intent(this, QRCodeDecodeActivity.class); Intent intent = new Intent(this, QRCodeDecodeActivity.class);
startActivityForResult(intent, REQUEST_QRCODEDECODE_ACTIVITY); startActivityForResult(intent, REQUEST_QRCODEDECODE_ACTIVITY);

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.apputils; package cc.winboll.studio.apputils;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@QQ.COM
* @Date 2025/01/18 10:32:21 * @Date 2025/01/18 10:32:21
* @Describe 二维码扫码解码窗口 * @Describe 二维码扫码解码窗口
*/ */

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.apputils; package cc.winboll.studio.apputils;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/03/23 16:14:45 * @Date 2025/03/23 16:14:45
*/ */
import android.app.Activity; import android.app.Activity;

View File

@ -1,24 +0,0 @@
package cc.winboll.studio.apputils;
/**
* @Author ZhanGSKen<zhangsken@188.com>
* @Date 2025/05/13 11:15
* @Describe WinBoLLActivity
*/
import android.app.Activity;
import cc.winboll.studio.libappbase.winboll.IWinBoLLActivity;
public class WinBoLLActivity extends Activity implements IWinBoLLActivity {
public static final String TAG = "WinBoLLActivity";
@Override
public Activity getActivity() {
return this;
}
@Override
public String getTag() {
return TAG;
}
}

View File

@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle #Created by .winboll/winboll_app_build.gradle
#Tue Jun 24 09:54:47 HKT 2025 #Sun May 04 05:32:00 GMT 2025
stageCount=3 stageCount=1
libraryProject= libraryProject=
baseVersion=15.2 baseVersion=15.2
publishVersion=15.2.2 publishVersion=15.2.0
buildCount=0 buildCount=74
baseBetaVersion=15.2.3 baseBetaVersion=15.2.1

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.autoinstaller; package cc.winboll.studio.autoinstaller;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@QQ.COM
* @Date 2024/04/28 02:39:58 * @Date 2024/04/28 02:39:58
* @Describe 全局应用类 * @Describe 全局应用类
*/ */

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.autoinstaller; package cc.winboll.studio.autoinstaller;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/04/15 09:24:46 * @Date 2025/04/15 09:24:46
* @Describe 磁贴工具服务类 * @Describe 磁贴工具服务类
*/ */

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.autoinstaller.models; package cc.winboll.studio.autoinstaller.models;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/04/02 20:50:29 * @Date 2025/04/02 20:50:29
* @Describe 监控的 APK 安装文件对应的应用信息数据模型 * @Describe 监控的 APK 安装文件对应的应用信息数据模型
*/ */

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.autoinstaller.models; package cc.winboll.studio.autoinstaller.models;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@QQ.COM
* @Date 2024/05/27 17:36:01 * @Date 2024/05/27 17:36:01
* @Describe 应用配置数据类 * @Describe 应用配置数据类
*/ */

View File

@ -5,7 +5,7 @@ import cc.winboll.studio.libappbase.BaseBean;
import java.io.IOException; import java.io.IOException;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/04/15 09:27:39 * @Date 2025/04/15 09:27:39
* @Describe MainServiceBean * @Describe MainServiceBean
*/ */

View File

@ -9,7 +9,7 @@ import cc.winboll.studio.autoinstaller.services.MainService;
import cc.winboll.studio.libappbase.LogUtils; import cc.winboll.studio.libappbase.LogUtils;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@QQ.COM
* @Date 2024/06/06 13:19:38 * @Date 2024/06/06 13:19:38
* @Describe 应用消息接收类 * @Describe 应用消息接收类
*/ */

View File

@ -10,7 +10,7 @@ import cc.winboll.studio.autoinstaller.models.AppConfigs;
import cc.winboll.studio.autoinstaller.utils.ServiceUtil; import cc.winboll.studio.autoinstaller.utils.ServiceUtil;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@QQ.COM
* @Date 2024/05/27 20:16:00 * @Date 2024/05/27 20:16:00
* @Describe MainService 守护进程服务 * @Describe MainService 守护进程服务
*/ */

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.autoinstaller.utils; package cc.winboll.studio.autoinstaller.utils;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@QQ.COM
* @Date 2024/05/27 17:56:31 * @Date 2024/05/27 17:56:31
* @Describe 文件管理类 * @Describe 文件管理类
*/ */

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.autoinstaller.utils; package cc.winboll.studio.autoinstaller.utils;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@QQ.COM
* @Date 2024/12/11 06:28:50 * @Date 2024/12/11 06:28:50
* @Describe 一个获取安卓APK安装文件的应用包名的函数 * @Describe 一个获取安卓APK安装文件的应用包名的函数
*/ */

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.autoinstaller.utils; package cc.winboll.studio.autoinstaller.utils;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@QQ.COM
* @Date 2024/05/27 20:20:03 * @Date 2024/05/27 20:20:03
* @Describe 服务类工具 * @Describe 服务类工具
*/ */

View File

@ -1,10 +1,11 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules. // Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript { buildscript {
repositories { repositories {
mavenLocal { // Maven ~/.m2/repository
// Maven仓库路径 //mavenLocal()
url 'file:///sdcard/.m2/repository/' //
} maven { url "file:///sdcard/.m2/repository" }
// Nexus Maven // Nexus Maven
// "WinBoLL Release" // "WinBoLL Release"
maven { url "https://nexus.winboll.cc/repository/maven-public/" } maven { url "https://nexus.winboll.cc/repository/maven-public/" }
@ -19,13 +20,7 @@ buildscript {
maven { url "https://jitpack.io" } maven { url "https://jitpack.io" }
mavenCentral() mavenCentral()
google() google()
//println "mavenLocal : ==========="
//println mavenLocal().url
//println "mavenLocal : ==========="
//mavenLocal() //mavenLocal()
// WinBoLL.CC Maven
maven { url 'https://spare-maven.winboll.cc/repository/' }
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:7.2.1' // compileSdkVersion 32 classpath 'com.android.tools.build:gradle:7.2.1' // compileSdkVersion 32
@ -36,10 +31,10 @@ buildscript {
allprojects { allprojects {
repositories { repositories {
mavenLocal { // Maven ~/.m2/repository
// Maven仓库路径 //mavenLocal()
url 'file:///sdcard/.m2/repository/' //
} maven { url "file:///sdcard/.m2/repository" }
// Nexus Maven // Nexus Maven
// "WinBoLL Release" // "WinBoLL Release"
@ -55,13 +50,7 @@ allprojects {
maven { url "https://jitpack.io" } maven { url "https://jitpack.io" }
mavenCentral() mavenCentral()
google() google()
//println "mavenLocal : ===========" mavenLocal()
//println mavenLocal().url
//println "mavenLocal : ==========="
//mavenLocal()
// WinBoLL.CC Maven
maven { url 'https://spare-maven.winboll.cc/repository/' }
} }
ext { ext {
// //
@ -72,7 +61,7 @@ allprojects {
bashCommitAppPublishBuildFlagInfoFilePath = ".winboll/bashCommitAppPublishBuildFlagInfo.sh" bashCommitAppPublishBuildFlagInfoFilePath = ".winboll/bashCommitAppPublishBuildFlagInfo.sh"
winbollFilePath = "winboll.properties" winbollFilePath = "winboll.properties"
keyPropsFilePath = "appkey.keystore" keyPropsFilePath = "current.keystore"
// lint // lint
lintXmlReportFilePath = "build/reports/lint-results.xml" lintXmlReportFilePath = "build/reports/lint-results.xml"
lintHTMLReportFilePath = "build/reports/lint-results.html" lintHTMLReportFilePath = "build/reports/lint-results.html"

View File

@ -24,7 +24,7 @@ https://github.com/aJIEw/PhoneCallApp.git
1. Fork 本仓库 1. Fork 本仓库
2. 新建 Feat_xxx 分支 2. 新建 Feat_xxx 分支
3. 提交代码 : ZhanGSKen(ZhanGSKen<zhangsken@188.com>) 3. 提交代码 : ZhanGSKen(ZhanGSKen@AliYun.Com)
4. 新建 Pull Request 4. 新建 Pull Request

View File

@ -24,7 +24,7 @@ android {
defaultConfig { defaultConfig {
applicationId "cc.winboll.studio.contacts" applicationId "cc.winboll.studio.contacts"
minSdkVersion 24 minSdkVersion 24
targetSdkVersion 30 targetSdkVersion 29
versionCode 1 versionCode 1
// versionName // versionName
// build.gradle stageCount=0 // build.gradle stageCount=0
@ -45,9 +45,9 @@ android {
dependencies { dependencies {
api fileTree(dir: 'libs', include: ['*.jar']) api fileTree(dir: 'libs', include: ['*.jar'])
api 'cc.winboll.studio:libaes:15.8.0' api 'cc.winboll.studio:libaes:15.6.0'
api 'cc.winboll.studio:libapputils:15.8.1' api 'cc.winboll.studio:libapputils:15.3.4'
api 'cc.winboll.studio:libappbase:15.8.1' api 'cc.winboll.studio:libappbase:15.7.6'
// https://github.com/getActivity/XXPermissions // https://github.com/getActivity/XXPermissions
api 'com.github.getActivity:XXPermissions:18.63' api 'com.github.getActivity:XXPermissions:18.63'

View File

@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle #Created by .winboll/winboll_app_build.gradle
#Tue May 20 13:02:18 HKT 2025 #Sun May 04 21:09:14 HKT 2025
stageCount=3 stageCount=1
libraryProject= libraryProject=
baseVersion=15.3 baseVersion=15.3
publishVersion=15.3.2 publishVersion=15.3.0
buildCount=0 buildCount=0
baseBetaVersion=15.3.3 baseBetaVersion=15.3.1

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.contacts; package cc.winboll.studio.contacts;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@QQ.COM
* @Date 2024/12/08 15:10:51 * @Date 2024/12/08 15:10:51
* @Describe 全局应用类 * @Describe 全局应用类
*/ */

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.contacts.activities; package cc.winboll.studio.contacts.activities;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/03/31 15:15:54 * @Date 2025/03/31 15:15:54
* @Describe 应用介绍窗口 * @Describe 应用介绍窗口
*/ */
@ -10,7 +10,6 @@ import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar; import androidx.appcompat.widget.Toolbar;
import cc.winboll.studio.contacts.R; import cc.winboll.studio.contacts.R;
import cc.winboll.studio.libaes.winboll.APPInfo; import cc.winboll.studio.libaes.winboll.APPInfo;
@ -18,7 +17,7 @@ import cc.winboll.studio.libaes.winboll.AboutView;
import cc.winboll.studio.libappbase.GlobalApplication; import cc.winboll.studio.libappbase.GlobalApplication;
import cc.winboll.studio.libappbase.winboll.IWinBoLLActivity; import cc.winboll.studio.libappbase.winboll.IWinBoLLActivity;
public class AboutActivity extends AppCompatActivity implements IWinBoLLActivity { public class AboutActivity extends WinBoLLActivity implements IWinBoLLActivity {
public static final String TAG = "AboutActivity"; public static final String TAG = "AboutActivity";

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.contacts.activities; package cc.winboll.studio.contacts.activities;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/02/20 17:15:46 * @Date 2025/02/20 17:15:46
* @Describe 拨号窗口 * @Describe 拨号窗口
*/ */

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.contacts.activities; package cc.winboll.studio.contacts.activities;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/02/20 20:18:26 * @Date 2025/02/20 20:18:26
*/ */
import android.content.Intent; import android.content.Intent;

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.contacts.activities; package cc.winboll.studio.contacts.activities;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/02/21 05:37:42 * @Date 2025/02/21 05:37:42
*/ */
import android.content.Context; import android.content.Context;
@ -202,11 +202,6 @@ public class SettingsActivity extends AppCompatActivity implements IWinBoLLActiv
settingsModel.setIsEnableDun(isEnableDun); settingsModel.setIsEnableDun(isEnableDun);
Rules.getInstance(this).saveDun(); Rules.getInstance(this).saveDun();
Rules.getInstance(this).reload(); Rules.getInstance(this).reload();
// 重新加载盾牌参数
etDunTotalCount.setText(Integer.toString(settingsModel.getDunTotalCount()));
etDunResumeSecondCount.setText(Integer.toString(settingsModel.getDunResumeSecondCount()));
etDunResumeCount.setText(Integer.toString(settingsModel.getDunResumeCount()));
} }
void updateStreamVolumeTextView() { void updateStreamVolumeTextView() {

View File

@ -11,7 +11,7 @@ import cc.winboll.studio.libappbase.LogUtils;
import cc.winboll.studio.libappbase.LogView; import cc.winboll.studio.libappbase.LogView;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/03/02 16:07:04 * @Date 2025/03/02 16:07:04
*/ */
public class UnitTestActivity extends Activity { public class UnitTestActivity extends Activity {

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.contacts.activities; package cc.winboll.studio.contacts.activities;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/03/31 15:16:45 * @Date 2025/03/31 15:16:45
* @Describe 应用窗口基类 * @Describe 应用窗口基类
*/ */
@ -13,9 +13,9 @@ import cc.winboll.studio.libaes.beans.AESThemeBean;
import cc.winboll.studio.libaes.utils.AESThemeUtil; import cc.winboll.studio.libaes.utils.AESThemeUtil;
import cc.winboll.studio.libappbase.winboll.IWinBoLLActivity; import cc.winboll.studio.libappbase.winboll.IWinBoLLActivity;
public class WinBollActivity extends AppCompatActivity implements IWinBoLLActivity { public class WinBoLLActivity extends AppCompatActivity implements IWinBoLLActivity {
public static final String TAG = "WinBollActivity"; public static final String TAG = "WinBoLLActivity";
protected volatile AESThemeBean.ThemeType mThemeType; protected volatile AESThemeBean.ThemeType mThemeType;

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.contacts.adapters; package cc.winboll.studio.contacts.adapters;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/02/26 13:09:32 * @Date 2025/02/26 13:09:32
* @Describe CallLogAdapter * @Describe CallLogAdapter
*/ */

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.contacts.adapters; package cc.winboll.studio.contacts.adapters;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/02/26 13:35:44 * @Date 2025/02/26 13:35:44
* @Describe ContactAdapter * @Describe ContactAdapter
*/ */

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.contacts.adapters; package cc.winboll.studio.contacts.adapters;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/02/20 14:20:38 * @Date 2025/02/20 14:20:38
* @Describe ImagePagerAdapter * @Describe ImagePagerAdapter
*/ */

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.contacts.adapters; package cc.winboll.studio.contacts.adapters;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/03/02 17:27:41 * @Date 2025/03/02 17:27:41
* @Describe PhoneConnectRuleAdapter * @Describe PhoneConnectRuleAdapter
*/ */

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.contacts.beans; package cc.winboll.studio.contacts.beans;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/02/26 13:10:57 * @Date 2025/02/26 13:10:57
* @Describe CallLogModel * @Describe CallLogModel
*/ */

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.contacts.beans; package cc.winboll.studio.contacts.beans;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/02/26 13:37:00 * @Date 2025/02/26 13:37:00
* @Describe ContactModel * @Describe ContactModel
*/ */

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.contacts.beans; package cc.winboll.studio.contacts.beans;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/02/13 07:06:13 * @Date 2025/02/13 07:06:13
*/ */
import android.util.JsonReader; import android.util.JsonReader;

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.contacts.beans; package cc.winboll.studio.contacts.beans;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/02/21 09:52:10 * @Date 2025/02/21 09:52:10
* @Describe 电话黑名单规则 * @Describe 电话黑名单规则
*/ */

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.contacts.beans; package cc.winboll.studio.contacts.beans;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/02/24 18:47:11 * @Date 2025/02/24 18:47:11
* @Describe 手机铃声设置参数类 * @Describe 手机铃声设置参数类
*/ */

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.contacts.beans; package cc.winboll.studio.contacts.beans;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/03/02 19:51:40 * @Date 2025/03/02 19:51:40
* @Describe SettingsModel * @Describe SettingsModel
*/ */

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.contacts.bobulltoon; package cc.winboll.studio.contacts.bobulltoon;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/03/02 13:47:48 * @Date 2025/03/02 13:47:48
* @Describe 汤姆猫管家 使用 BoBullToon 项目对通讯地址进行筛选判断的好朋友 * @Describe 汤姆猫管家 使用 BoBullToon 项目对通讯地址进行筛选判断的好朋友
*/ */

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.contacts.dun; package cc.winboll.studio.contacts.dun;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/02/21 06:15:10 * @Date 2025/02/21 06:15:10
* @Describe 云盾防御规则 * @Describe 云盾防御规则
*/ */
@ -124,12 +124,8 @@ public class Rules {
boolean isDefend = false; // 盾牌是否生效 boolean isDefend = false; // 盾牌是否生效
boolean isConnect = true; // 防御结果是否连接 boolean isConnect = true; // 防御结果是否连接
// 进行盾牌层数预计缩减计算
int nDunCurrentCount = mSettingsModel.getDunCurrentCount() - 1;
LogUtils.d(TAG, String.format("nDunCurrentCount : %d", nDunCurrentCount));
// 如果盾值小于1则解除防御 // 如果盾值小于1则解除防御
if (!isDefend && nDunCurrentCount < 1) { if (!isDefend && mSettingsModel.getDunCurrentCount() < 1) {
// 盾层为1以下防御解除 // 盾层为1以下防御解除
LogUtils.d(TAG, "盾层为1以下防御解除"); LogUtils.d(TAG, "盾层为1以下防御解除");
isDefend = true; isDefend = true;
@ -193,16 +189,16 @@ public class Rules {
// 就减少防御盾牌层数 // 就减少防御盾牌层数
// 每校验一次规则云盾防御层数减1 // 每校验一次规则云盾防御层数减1
// 当云盾防御层数为0时再次进行以下程序段则恢复满值防御 // 当云盾防御层数为0时再次进行以下程序段则恢复满值防御
int newDunCount = nDunCurrentCount; int newDunCount = mSettingsModel.getDunCurrentCount() - 1;
LogUtils.d(TAG, String.format("新的防御层数预计为 %d", newDunCount)); LogUtils.d(TAG, String.format("新的防御层数预计为 %d", newDunCount));
// 保证盾值在[1DunTotalCount]之内其他值一律重置为 DunTotalCount // 保证盾值在[0DunTotalCount]之内其他值一律重置为 DunTotalCount
if (newDunCount > 0 && newDunCount < mSettingsModel.getDunTotalCount()) { if (newDunCount < 0 || newDunCount > mSettingsModel.getDunTotalCount()) {
mSettingsModel.setDunCurrentCount(newDunCount);
LogUtils.d(TAG, String.format("设置防御层数为 %d", newDunCount));
} else {
mSettingsModel.setDunCurrentCount(mSettingsModel.getDunTotalCount()); mSettingsModel.setDunCurrentCount(mSettingsModel.getDunTotalCount());
LogUtils.d(TAG, String.format("盾值不在[0%d]区间,恢复防御最大值%d", mSettingsModel.getDunTotalCount(), mSettingsModel.getDunTotalCount())); LogUtils.d(TAG, String.format("盾值不在[0%d]区间,恢复防御最大值%d", mSettingsModel.getDunTotalCount(), mSettingsModel.getDunTotalCount()));
} else {
mSettingsModel.setDunCurrentCount(newDunCount);
LogUtils.d(TAG, String.format("设置防御层数为 %d", newDunCount));
} }
saveDun(); saveDun();

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.contacts.fragments; package cc.winboll.studio.contacts.fragments;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/02/20 12:57:00 * @Date 2025/02/20 12:57:00
* @Describe 拨号 * @Describe 拨号
*/ */

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.contacts.fragments; package cc.winboll.studio.contacts.fragments;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/02/20 12:57:50 * @Date 2025/02/20 12:57:50
* @Describe 联系人 * @Describe 联系人
*/ */

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.contacts.fragments; package cc.winboll.studio.contacts.fragments;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/02/20 12:58:15 * @Date 2025/02/20 12:58:15
* @Describe 应用日志 * @Describe 应用日志
*/ */

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.contacts.handlers; package cc.winboll.studio.contacts.handlers;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/02/14 03:51:40 * @Date 2025/02/14 03:51:40
*/ */
import android.os.Handler; import android.os.Handler;

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.contacts.receivers; package cc.winboll.studio.contacts.receivers;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/02/13 06:58:04 * @Date 2025/02/13 06:58:04
* @Describe 主要广播接收器 * @Describe 主要广播接收器
*/ */

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.contacts.services; package cc.winboll.studio.contacts.services;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/02/14 03:38:31 * @Date 2025/02/14 03:38:31
* @Describe 守护进程服务 * @Describe 守护进程服务
*/ */

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.contacts.services; package cc.winboll.studio.contacts.services;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/02/13 06:56:41 * @Date 2025/02/13 06:56:41
* @Describe 拨号主服务 * @Describe 拨号主服务
* 参考: * 参考:
@ -18,7 +18,6 @@ import android.content.ServiceConnection;
import android.media.AudioManager; import android.media.AudioManager;
import android.os.Binder; import android.os.Binder;
import android.os.IBinder; import android.os.IBinder;
import cc.winboll.studio.contacts.App;
import cc.winboll.studio.contacts.beans.MainServiceBean; import cc.winboll.studio.contacts.beans.MainServiceBean;
import cc.winboll.studio.contacts.beans.RingTongBean; import cc.winboll.studio.contacts.beans.RingTongBean;
import cc.winboll.studio.contacts.bobulltoon.TomCat; import cc.winboll.studio.contacts.bobulltoon.TomCat;
@ -30,9 +29,11 @@ import cc.winboll.studio.contacts.services.MainService;
import cc.winboll.studio.contacts.threads.MainServiceThread; import cc.winboll.studio.contacts.threads.MainServiceThread;
import cc.winboll.studio.libappbase.LogUtils; import cc.winboll.studio.libappbase.LogUtils;
import cc.winboll.studio.libappbase.sos.SOS; import cc.winboll.studio.libappbase.sos.SOS;
import cc.winboll.studio.libappbase.winboll.WinBoLL;
import java.util.Timer; import java.util.Timer;
import java.util.TimerTask; import java.util.TimerTask;
import cc.winboll.studio.libappbase.sos.WinBoLL;
import cc.winboll.studio.contacts.App;
import cc.winboll.studio.libappbase.sos.APPModel;
public class MainService extends Service { public class MainService extends Service {

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.contacts.threads; package cc.winboll.studio.contacts.threads;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/02/14 03:46:44 * @Date 2025/02/14 03:46:44
*/ */
import android.content.Context; import android.content.Context;

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.contacts.utils; package cc.winboll.studio.contacts.utils;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/03/06 21:08:16 * @Date 2025/03/06 21:08:16
* @Describe ContactUtils * @Describe ContactUtils
*/ */

View File

@ -3,7 +3,7 @@ import android.widget.EditText;
import cc.winboll.studio.libappbase.LogUtils; import cc.winboll.studio.libappbase.LogUtils;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/04/13 00:59:13 * @Date 2025/04/13 00:59:13
* @Describe Int类型数字输入框工具集 * @Describe Int类型数字输入框工具集
*/ */

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.contacts.utils; package cc.winboll.studio.contacts.utils;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/04/13 01:16:28 * @Date 2025/04/13 01:16:28
* @Describe Int数字操作工具集 * @Describe Int数字操作工具集
*/ */

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.contacts.utils; package cc.winboll.studio.contacts.utils;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/02/26 15:21:48 * @Date 2025/02/26 15:21:48
* @Describe PhoneUtils * @Describe PhoneUtils
*/ */

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.contacts.utils; package cc.winboll.studio.contacts.utils;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@QQ.COM
* @Date 2024/12/09 19:00:21 * @Date 2024/12/09 19:00:21
* @Describe .* 前置预防针 * @Describe .* 前置预防针
regex pointer preventive injection regex pointer preventive injection

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.contacts.views; package cc.winboll.studio.contacts.views;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/03/02 21:11:03 * @Date 2025/03/02 21:11:03
* @Describe 云盾防御信息 * @Describe 云盾防御信息
*/ */

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.contacts.views; package cc.winboll.studio.contacts.views;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/03/04 10:51:50 * @Date 2025/03/04 10:51:50
* @Describe CustomHorizontalScrollView * @Describe CustomHorizontalScrollView
*/ */

View File

@ -1,7 +1,7 @@
package cc.winboll.studio.contacts.views; package cc.winboll.studio.contacts.views;
/** /**
* @Author ZhanGSKen<zhangsken@188.com> * @Author ZhanGSKen@AliYun.Com
* @Date 2025/03/19 14:04:20 * @Date 2025/03/19 14:04:20
* @Describe 云盾滑视度热备控件 * @Describe 云盾滑视度热备控件
*/ */

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