Compare commits

..

34 Commits

Author SHA1 Message Date
bbb0e22198 feat: MyTermuxActivity 重构为 TermuxButton 列表管理界面
- models/TermuxButtonManager: 新增数据管理层,支持 CRUD 及 JSON 文件持久化
- MyTermuxActivity: 替换硬编码按钮为 ListView,支持点击执行、长按编辑/删除
- layout/activity_my_termux: 布局重构,替换 ScrollView 为 ListView + 添加按钮
- strings.xml: 新增 17 条中文字符串资源
2026-05-13 11:28:09 +08:00
ee75f95c79 <winboll>APK 15.20.1 release Publish. 2026-05-13 10:28:36 +08:00
c40e301c90 fix: 移除重复依赖和权限声明,统一 Java 7 编译配置
- winboll/build.gradle: 移除重复的 okhttp:3.14.9 和 gson:2.8.5 依赖
- libwinboll/build.gradle: 新增 compileOptions 强制 Java 7 编译
- AndroidManifest.xml: 移除重复的 GET_PACKAGE_SIZE 权限声明
2026-05-13 10:21:10 +08:00
5f2170a7a1 feat(winboll): 重构应用主题系统,继承libaes主题元素
主要修改:
- 新增 MyAppTheme 系列主题样式,继承自 AESTheme
  - MyAppTheme (默认)
  - MyDepthAppTheme, MySkyAppTheme, MyGoldenAppTheme
  - MyBearingAppTheme, MyMemorAppTheme, MyTaoAppTheme
- 新增 MyAESAToolbar/MyAESASupportToolbar 样式继承
- 新增 WinBoLLThemeBean/WinBoLLThemeUtil 主题工具类
- MainActivity 使用自定义主题 ID 替换 AES 原始样式
- BaseWinBoLLActivity 主题设置改用 WinBoLLThemeUtil
- 修复 MainActivity Fragment 初始化逻辑
- 集成 AESThemeUtil 主题切换功能

文件变更:
- winboll/src/main/res/values/styles.xml
- winboll/src/main/java/.../winboll/theme/*.java (新增)
- winboll/src/main/java/.../MainActivity.java
- winboll/src/main/java/.../BaseWinBoLLActivity.java

注意:应用正在测试中
2026-05-12 16:08:48 +08:00
6308df8f36 Merge remote-tracking branch 'origin/aes' into winboll 2026-05-12 15:38:27 +08:00
5f24c2d351 更新类库版本 2026-05-12 15:35:42 +08:00
882016454f <libaes>Library Release 15.20.3 2026-05-12 13:11:30 +08:00
c6c290dcd2 <aes>APK 15.20.3 release Publish. 2026-05-12 13:11:09 +08:00
e64f3a3e97 恢复 DrawerFragmentActivity 与 ASupportToolbar 显示正常的版本 2026-05-12 13:08:12 +08:00
998cb3d193 <winboll>APK 15.20.0 release Publish. 2026-05-12 12:16:45 +08:00
9ba3374b16 基线版本号对齐 2026-05-12 12:11:17 +08:00
4ded8537e8 升级 WinBoLL 库依赖版本并完善应用主题配置
- 升级 WinBoLL 库依赖版本至 15.20.x 系列:
  - libaes: 15.15.10 → 15.20.2
  - libappbase: 15.15.23 → 15.20.9
- 完善 winboll 模块主题配置:
  - MyAppTheme 改用 Theme.AppCompat.Light.NoActionBar 解决 AppCompat 兼容问题
  - 添加完整的应用主题属性定义
  - 添加 MyDebugActivityTheme 调试主题
- 添加主窗口、工具栏、调试文字颜色定义
2026-05-12 12:05:28 +08:00
59e51da991 Merge remote-tracking branch 'origin/aes' into winboll 2026-05-12 11:42:13 +08:00
070e2fb4f0 Merge remote-tracking branch 'origin/appbase' into winboll 2026-05-12 11:42:07 +08:00
632ecc51d8 重构ASupportToolbar自定义控件,支持AES主题切换
- 优化ASupportToolbar控件的绘图流程
- 移除atoolbar_frame.xml依赖,改用Java代码内部绘图
- 添加notifyColorChange()方法绘制三层渐变背景
- 在onAttachedToWindow()时自动调用refreshFromTheme()刷新背景
- 主题切换时通过DrawerFragmentActivity调用refreshFromTheme()
- 添加attrs.xml属性:android:background用于自定义style
- 添加详细调试日志追踪整个绘制流程
- TestASupportToolbarActivity添加日志便于测试验证

修改文件:
- libaes/src/main/java/.../views/ASupportToolbar.java:重构绘图逻辑,添加调试日志
- libaes/src/main/java/.../activitys/DrawerFragmentActivity.java:主题切换时刷新Toolbar
- libaes/src/main/java/.../unittests/TestASupportToolbarActivity.java:添加调试日志
- libaes/src/main/res/values/attrs.xml:添加android:background属性
- aes/build.properties:版本号更新
- libaes/build.properties:版本号更新
2026-05-12 10:53:18 +08:00
58b2cace16 重构AES主题配置,继承APPBaseTheme属性支持
- AESTheme改为继承Theme.AppCompat并支持APPBaseTheme属性
- 修复运行时inflate错误:将?attr/xxx引用改为@color/xxx直接引用
- 添加DebugActivityTheme调试样式支持
- 添加必需的颜色定义(toolbarBackgroundColor、mainWindowBackgroundColor等)
- 新增夜间模式主题配置(values-night目录)
- 清理冗余注释和无用的调试配色方案
- aes模块的MyAESTheme添加themeDebug属性

修改文件:
- aes/src/main/res/values/styles.xml:添加MyDebugActivityTheme
- aes/src/main/res/values-night/:新增夜间模式样式
- libaes/src/main/res/values/colors.xml:添加主题必需颜色
- libaes/src/main/res/values/styles.xml:重构使用AppCompat主题
- libaes/src/main/res/values-night/:新增夜间模式颜色和样式
2026-05-12 09:52:57 +08:00
3648fa3361 更新基础类库版本 2026-05-12 09:26:33 +08:00
122122ef80 Merge remote-tracking branch 'origin/appbase' into aes 2026-05-12 09:22:37 +08:00
4caeb83e5e <libappbase>Library Release 15.20.9 2026-05-12 09:17:18 +08:00
d26ef7bf7f Merge remote-tracking branch 'origin/appbase' into aes 2026-05-11 21:18:47 +08:00
83da84371c Merge remote-tracking branch 'origin/aes' into winboll 2026-05-11 20:59:23 +08:00
f0fbdaf121 <libaes>Library Release 15.20.2 2026-05-11 20:41:44 +08:00
a20f29728e <aes>APK 15.20.2 release Publish. 2026-05-11 20:41:30 +08:00
9669fe2a8d 更新应用基础类库,改进应用调试接口。 2026-05-11 20:38:17 +08:00
ed5ab24bd3 <libaes>Library Release 15.20.1 2026-05-11 17:17:23 +08:00
b5c989b5f9 <aes>APK 15.20.1 release Publish. 2026-05-11 17:17:05 +08:00
725b336501 更新基础类库版本,提高应用调试能力。 2026-05-11 17:14:00 +08:00
57e4f8770b <libaes>Library Release 15.20.0 2026-05-11 15:02:44 +08:00
3b313e2362 <aes>APK 15.20.0 release Publish. 2026-05-11 15:02:27 +08:00
1e96cd02bc 对齐基础类库基准型号版本。 2026-05-11 14:58:21 +08:00
8f869e19cc 更新基础类库 2026-05-10 05:12:19 +08:00
270e21ed23 <libaes>Library Release 15.15.10 2026-05-10 05:04:34 +08:00
6412554096 <aes>APK 15.15.10 release Publish. 2026-05-10 05:04:15 +08:00
286f8513d4 refactor: 升级编译配置并调整最低API版本
- 升级 Gradle 编译版本为 Java 11
  根目录 build.gradle 中 JavaCompile 配置从 VERSION_1_7 改为 VERSION_11

- 调整 minSdkVersion 从 21 升级至 26
  适配 Android 8.0 (API 26) 及以上系统
  修改范围: aes/build.gradle, libaes/build.gradle

- 移除未使用的 XXPermissions 依赖
  该库使用 Java 8 字节码与 minSdkVersion 21 不兼容,项目中未引用此库
2026-05-10 04:48:29 +08:00
29 changed files with 727 additions and 420 deletions

View File

@@ -24,13 +24,13 @@ android {
defaultConfig {
applicationId "cc.winboll.studio.aes"
minSdkVersion 21
minSdkVersion 26
targetSdkVersion 30
versionCode 1
// versionName 更新后需要手动设置
// 项目模块目录的 build.gradle 文件的 stageCount=0
// Gradle编译环境下合起来的 versionName 就是 "${versionName}.0"
versionName "15.15"
versionName "15.20"
if(true) {
versionName = genVersionName("${versionName}")
}

View File

@@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle
#Sat Apr 25 04:16:42 HKT 2026
stageCount=10
#Tue May 12 13:11:28 HKT 2026
stageCount=4
libraryProject=libaes
baseVersion=15.15
publishVersion=15.15.9
baseVersion=15.20
publishVersion=15.20.3
buildCount=0
baseBetaVersion=15.15.10
baseBetaVersion=15.20.4

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyAESTheme" parent="AESTheme">
<item name="themeDebug">@style/MyDebugActivityTheme</item>
</style>
<style name="MyDebugActivityTheme" parent="Theme.AppCompat.NoActionBar">
<item name="android:statusBarColor">@color/toolbarBackgroundColor</item>
<item name="colorTittle">@color/mainWindowTextColor</item>
<item name="colorTittleBackgound">@color/toolbarBackgroundColor</item>
<item name="colorText">@color/debugTextColor</item>
<item name="colorTextBackgound">@color/mainWindowBackgroundColor</item>
<item name="debugTextColor">@color/debugTextColor</item>
<item name="toolbarTextColor">@color/toolbarTextColor</item>
</style>
</resources>

View File

@@ -1,5 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyAESTheme" parent="AESTheme">
<item name="themeDebug">@style/MyDebugActivityTheme</item>
</style>
<style name="MyDebugActivityTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:statusBarColor">@color/toolbarBackgroundColor</item>
<item name="colorTittle">@color/mainWindowTextColor</item>
<item name="colorTittleBackgound">@color/toolbarBackgroundColor</item>
<item name="colorText">@color/debugTextColor</item>
<item name="colorTextBackgound">@color/mainWindowBackgroundColor</item>
<item name="debugTextColor">@color/debugTextColor</item>
<item name="toolbarTextColor">@color/toolbarTextColor</item>
</style>
</resources>

View File

@@ -1,5 +1,5 @@
#Created by .winboll/winboll_app_build.gradle
#Tue May 12 09:16:45 HKT 2026
#Tue May 12 09:17:15 HKT 2026
stageCount=10
libraryProject=libappbase
baseVersion=15.20

View File

@@ -96,8 +96,8 @@ allprojects {
// 1. 对纯 Java 模块的 JavaCompile 任务配置(升级为 Java 11
tasks.withType(JavaCompile) {
options.compilerArgs << "-parameters"
sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
// 可选:确保编码一致
options.encoding = "UTF-8"
}

View File

@@ -9,7 +9,7 @@ android {
buildToolsVersion "30.0.3"
defaultConfig {
minSdkVersion 21
minSdkVersion 26
targetSdkVersion 30
}
@@ -27,8 +27,6 @@ android {
}
dependencies {
// 权限请求框架https://github.com/getActivity/XXPermissions
api 'com.github.getActivity:XXPermissions:18.63'
// 下拉控件
api 'com.baoyz.pullrefreshlayout:library:1.2.0'
// 拼音搜索
@@ -63,7 +61,7 @@ dependencies {
//annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
// WinBoLL库 nexus.winboll.cc 地址
api 'cc.winboll.studio:libappbase:15.15.19'
api 'cc.winboll.studio:libappbase:15.20.9'
// 备用库 jitpack.io 地址
//api 'com.github.ZhanGSKen:APPBase:appbase-v15.15.3'

View File

@@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle
#Sat Apr 25 04:16:30 HKT 2026
stageCount=10
#Tue May 12 13:11:09 HKT 2026
stageCount=4
libraryProject=libaes
baseVersion=15.15
publishVersion=15.15.9
baseVersion=15.20
publishVersion=15.20.3
buildCount=0
baseBetaVersion=15.15.10
baseBetaVersion=15.20.4

View File

@@ -12,6 +12,8 @@ import androidx.appcompat.widget.Toolbar;
import cc.winboll.studio.libaes.R;
import cc.winboll.studio.libaes.interfaces.IWinBoLLActivity;
import cc.winboll.studio.libaes.utils.AESThemeUtil;
import cc.winboll.studio.libaes.views.ASupportToolbar;
import cc.winboll.studio.libappbase.LogUtils;
public class TestASupportToolbarActivity extends AppCompatActivity implements IWinBoLLActivity {
@@ -29,14 +31,17 @@ public class TestASupportToolbarActivity extends AppCompatActivity implements IW
@Override
protected void onCreate(Bundle savedInstanceState) {
LogUtils.d(TAG, "onCreate() start");
AESThemeUtil.applyAppTheme(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_testasupporttoolbar);
LogUtils.d(TAG, "setContentView() done");
Toolbar toolbar = findViewById(R.id.activitytestasupporttoolbarASupportToolbar1);
LogUtils.d(TAG, "findViewById() done, toolbar=" + toolbar.getClass().getSimpleName());
setSupportActionBar(toolbar);
LogUtils.d(TAG, "setSupportActionBar() done");
getSupportActionBar().setTitle(TAG);
LogUtils.d(TAG, "setTitle() done");
LogUtils.d(TAG, "onCreate() end");
}
}

View File

@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorTextColor">#FFFFFFFF</color>
<color name="colorPrimary">#FF03AB4E</color>
<color name="colorPrimaryDark">#FF027C39</color>
<color name="colorAccent">#FF3DDC84</color>
<color name="colorText">#FFFFFB8D</color>
<color name="colorToastFrame">#FFA9A9A9</color>
<color name="colorToastShadow">#FF000000</color>
<color name="colorToastBackgroung">#FFFFFFFF</color>
<color name="colorAToolbarStartColor">#FF7D3F12</color>
<color name="colorAToolbarCenterColor">#FFCC6E2B</color>
<color name="colorAToolbarEndColor">#FFF4B98F</color>
<color name="colorACardShadow">@color/colorPrimaryDark</color>
<color name="colorACardFrame">@color/colorPrimary</color>
<color name="colorACardBackgroung">@color/colorAccent</color>
<color name="colorATickProgressBarBackgroung">@color/colorAccent</color>
<color name="colorATickProgressBarProgress">@color/colorPrimary</color>
<color name="colorOHPCTSBackground">@color/colorAccent</color>
<color name="colorOHPCTSSecondaryProgress">@color/colorPrimary</color>
<color name="colorOHPCTSProgress">@color/colorPrimaryDark</color>
<color name="toolbarBackgroundColor">#FF03AB4E</color>
<color name="toolbarTextColor">#FFFFFFFF</color>
<color name="mainWindowBackgroundColor">#FF2C2C2C</color>
<color name="mainWindowTextColor">#FFFFFFFF</color>
<color name="debugTextColor">#FFFF0000</color>
</resources>

View File

@@ -0,0 +1,112 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AESTheme" parent="Theme.AppCompat.NoActionBar">
<item name="themeDebug">@style/DebugActivityTheme</item>
<item name="aboutViewBackgroundColor">@color/mainWindowBackgroundColor</item>
<item name="aboutViewTextColor">@color/mainWindowTextColor</item>
<item name="aboutViewTitleColor">@color/mainWindowTextColor</item>
<item name="aboutViewDividerColor">@color/mainWindowTextColor</item>
<item name="dialogBackgroundColor">@color/mainWindowBackgroundColor</item>
<item name="dialogTextColor">@color/mainWindowTextColor</item>
<item name="toolbarBackgroundColor">@color/toolbarBackgroundColor</item>
<item name="toolbarTextColor">@color/toolbarTextColor</item>
<item name="textViewBackgroundColor">@color/mainWindowBackgroundColor</item>
<item name="textViewTextColor">@color/mainWindowTextColor</item>
<item name="editTextBackgroundColor">@color/mainWindowBackgroundColor</item>
<item name="editTextTextColor">@color/mainWindowTextColor</item>
<item name="scrollViewBackgroundColor">@color/mainWindowBackgroundColor</item>
<item name="activityBackgroundColor">@color/mainWindowBackgroundColor</item>
<item name="activityTextColor">@color/mainWindowTextColor</item>
<item name="mainWindowBackgroundColor">@color/mainWindowBackgroundColor</item>
<item name="mainWindowTextColor">@color/mainWindowTextColor</item>
<item name="mainWindowDarkBackgroundColor">@color/mainWindowBackgroundColor</item>
<item name="mainWindowDarkTextColor">@color/mainWindowTextColor</item>
<item name="android:statusBarColor">@color/toolbarBackgroundColor</item>
<item name="aToolbar">@style/AESAToolbar</item>
<item name="aSupportToolbar">@style/AESASupportToolbar</item>
</style>
<style name="DebugActivityTheme" parent="Theme.AppCompat.NoActionBar">
<item name="android:statusBarColor">@color/toolbarBackgroundColor</item>
<item name="colorTittle">@color/mainWindowTextColor</item>
<item name="colorTittleBackgound">@color/toolbarBackgroundColor</item>
<item name="colorText">@color/debugTextColor</item>
<item name="colorTextBackgound">@color/mainWindowBackgroundColor</item>
<item name="debugTextColor">@color/debugTextColor</item>
<item name="toolbarTextColor">@color/toolbarTextColor</item>
</style>
<style name="AESAToolbar">
<item name="attrAToolbarTitleTextColor">@color/colorTextColor</item>
<item name="attrAToolbarStartColor">@color/colorPrimaryDark</item>
<item name="attrAToolbarCenterColor">@color/colorPrimary</item>
<item name="attrAToolbarEndColor">@color/colorAccent</item>
</style>
<style name="AESASupportToolbar">
<item name="attrASupportToolbarTitleTextColor">@color/colorTextColor</item>
<item name="attrASupportToolbarStartColor">@color/colorPrimaryDark</item>
<item name="attrASupportToolbarCenterColor">@color/colorPrimary</item>
<item name="attrASupportToolbarEndColor">@color/colorAccent</item>
</style>
<style name="DepthAESTheme" parent="AESTheme">
<item name="colorPrimary">#FF0065EC</item>
<item name="colorPrimaryDark">#FF004DB4</item>
<item name="colorAccent">#FF4A97FF</item>
</style>
<style name="SkyAESTheme" parent="AESTheme">
<item name="colorPrimary">#FF00A6FF</item>
<item name="colorPrimaryDark">#FF007ABB</item>
<item name="colorAccent">#FF84D4FF</item>
</style>
<style name="GoldenAESTheme" parent="AESTheme">
<item name="colorPrimary">#FFF0CA11</item>
<item name="colorPrimaryDark">#FFD3AF00</item>
<item name="colorAccent">#FFFFE35C</item>
</style>
<style name="BearingAESTheme" parent="AESTheme">
<item name="colorPrimary">#FF840FFF</item>
<item name="colorPrimaryDark">#FF6900D7</item>
<item name="colorAccent">#FFBA78FF</item>
</style>
<style name="MemorAESTheme" parent="AESTheme">
<item name="colorPrimary">#FFFF00F5</item>
<item name="colorPrimaryDark">#FFE500DC</item>
<item name="colorAccent">#FFFF76FA</item>
</style>
<style name="TaoAESTheme" parent="AESTheme">
<item name="colorPrimary">#FFACACAC</item>
<item name="colorPrimaryDark">#FF898989</item>
<item name="colorAccent">#FFD8D8D8</item>
</style>
<style name="NormalDialogStyle" parent="Theme.AppCompat.Dialog">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowFrame">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowIsTranslucent">false</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowAnimationStyle">@style/cornerDialogAnim</item>
<item name="android:backgroundDimEnabled">true</item>
</style>
<style name="centerDialogAnim" parent="android:Animation">
<item name="@android:windowEnterAnimation">@anim/normal_dialog_enter_center</item>
<item name="@android:windowExitAnimation">@anim/normal_dialog_exit_center</item>
</style>
<style name="cornerDialogAnim" parent="android:Animation">
<item name="@android:windowEnterAnimation">@anim/normal_dialog_enter_corner</item>
<item name="@android:windowExitAnimation">@anim/normal_dialog_exit_corner</item>
</style>
</resources>

View File

@@ -43,6 +43,7 @@
<attr name="attrASupportToolbarStartColor"/>
<attr name="attrASupportToolbarCenterColor"/>
<attr name="attrASupportToolbarEndColor"/>
<attr name="android:background"/>
</declare-styleable>
<declare-styleable name="AButton">

View File

@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- 默认方案 -->
<color name="colorTextColor">#FF000000</color>
<color name="colorPrimary">#FF03AB4E</color>
<color name="colorPrimaryDark">#FF027C39</color>
<color name="colorAccent">#FF3DDC84</color>
<color name="colorText">#FFFFFB8D</color>
<color name="colorText">#FFFFFB8D</color>
<color name="colorToastFrame">#FFA9A9A9</color>
<color name="colorToastShadow">#FF000000</color>
<color name="colorToastBackgroung">#FFFFFFFF</color>
@@ -24,22 +24,10 @@
<color name="colorOHPCTSSecondaryProgress">@color/colorPrimary</color>
<color name="colorOHPCTSProgress">@color/colorPrimaryDark</color>
<!-- -->
<color name="toolbarBackgroundColor">#FF03AB4E</color>
<color name="toolbarTextColor">#FFFFFFFF</color>
<color name="mainWindowBackgroundColor">#FFFFFFFF</color>
<color name="mainWindowTextColor">#FF000000</color>
<color name="debugTextColor">#FFFF0000</color>
<!-- 调试方案
<color name="colorPrimary">#FF727272</color>
<color name="colorPrimaryDark">#FF444444</color>
<color name="colorAccent">#FF9EA19F</color>
<color name="colorAToolbarStartColor">#FF4776EB</color>
<color name="colorAToolbarCenterColor">#FF0D4BE7</color>
<color name="colorAToolbarEndColor">#FF8FA7E3</color>
<color name="colorACardShadow">#FF22A200</color>
<color name="colorACardFrame">#FF3FCC19</color>
<color name="colorACardBackgroung">#FF88F16B</color>
<color name="colorATickProgressBarBackgroung">#FF6DC4E2</color>
<color name="colorATickProgressBarProgress">#FF22B0E1</color>
-->
</resources>

View File

@@ -1,255 +1,112 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AESTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorTextColor">#FF000000</item>
<item name="colorPrimary">#FF18B05C</item>
<item name="colorPrimaryDark">#FF008C3F</item>
<item name="colorAccent">#FF24DC77</item>
<item name="android:textColor">#FF000000</item>
<item name="themeDebug">@style/DebugActivityTheme</item>
<item name="aboutViewBackgroundColor">@color/mainWindowBackgroundColor</item>
<item name="aboutViewTextColor">@color/mainWindowTextColor</item>
<item name="aboutViewTitleColor">@color/mainWindowTextColor</item>
<item name="aboutViewDividerColor">@color/mainWindowTextColor</item>
<item name="dialogBackgroundColor">@color/mainWindowBackgroundColor</item>
<item name="dialogTextColor">@color/mainWindowTextColor</item>
<item name="toolbarBackgroundColor">@color/toolbarBackgroundColor</item>
<item name="toolbarTextColor">@color/toolbarTextColor</item>
<item name="textViewBackgroundColor">@color/mainWindowBackgroundColor</item>
<item name="textViewTextColor">@color/mainWindowTextColor</item>
<item name="editTextBackgroundColor">@color/mainWindowBackgroundColor</item>
<item name="editTextTextColor">@color/mainWindowTextColor</item>
<item name="scrollViewBackgroundColor">@color/mainWindowBackgroundColor</item>
<item name="activityBackgroundColor">@color/mainWindowBackgroundColor</item>
<item name="activityTextColor">@color/mainWindowTextColor</item>
<item name="mainWindowBackgroundColor">@color/mainWindowBackgroundColor</item>
<item name="mainWindowTextColor">@color/mainWindowTextColor</item>
<item name="mainWindowDarkBackgroundColor">@color/mainWindowBackgroundColor</item>
<item name="mainWindowDarkTextColor">@color/mainWindowTextColor</item>
<item name="android:statusBarColor">@color/toolbarBackgroundColor</item>
<item name="aToolbar">@style/AESAToolbar</item>
<item name="aSupportToolbar">@style/AESASupportToolbar</item>
</style>
<style name="DebugActivityTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:statusBarColor">@color/toolbarBackgroundColor</item>
<item name="colorTittle">@color/mainWindowTextColor</item>
<item name="colorTittleBackgound">@color/toolbarBackgroundColor</item>
<item name="colorText">@color/debugTextColor</item>
<item name="colorTextBackgound">@color/mainWindowBackgroundColor</item>
<item name="debugTextColor">@color/debugTextColor</item>
<item name="toolbarTextColor">@color/toolbarTextColor</item>
</style>
<style name="AESAToolbar">
<item name="attrAToolbarTitleTextColor">?attr/colorTextColor</item>
<item name="attrAToolbarStartColor">?attr/colorPrimaryDark</item>
<item name="attrAToolbarCenterColor">?attr/colorPrimary</item>
<item name="attrAToolbarEndColor">?attr/colorAccent</item>
<item name="attrAToolbarTitleTextColor">@color/colorTextColor</item>
<item name="attrAToolbarStartColor">@color/colorPrimaryDark</item>
<item name="attrAToolbarCenterColor">@color/colorPrimary</item>
<item name="attrAToolbarEndColor">@color/colorAccent</item>
</style>
<style name="AESASupportToolbar">
<item name="attrASupportToolbarTitleTextColor">?attr/colorTextColor</item>
<item name="attrASupportToolbarStartColor">?attr/colorPrimaryDark</item>
<item name="attrASupportToolbarCenterColor">?attr/colorPrimary</item>
<item name="attrASupportToolbarEndColor">?attr/colorAccent</item>
<item name="attrASupportToolbarTitleTextColor">@color/colorTextColor</item>
<item name="attrASupportToolbarStartColor">@color/colorPrimaryDark</item>
<item name="attrASupportToolbarCenterColor">@color/colorPrimary</item>
<item name="attrASupportToolbarEndColor">@color/colorAccent</item>
</style>
<style name="DepthAESTheme" parent="AESTheme">
<item name="colorTextColor">#FF000000</item>
<item name="colorPrimary">#FF0065EC</item>
<item name="colorPrimaryDark">#FF004DB4</item>
<item name="colorAccent">#FF4A97FF</item>
<item name="android:textColor">#FF000000</item>
</style>
<style name="SkyAESTheme" parent="AESTheme">
<item name="colorTextColor">#FF000000</item>
<item name="colorPrimary">#FF00A6FF</item>
<item name="colorPrimaryDark">#FF007ABB</item>
<item name="colorAccent">#FF84D4FF</item>
<item name="android:textColor">#FF000000</item>
</style>
<style name="GoldenAESTheme" parent="AESTheme">
<item name="colorTextColor">#FF000000</item>
<item name="colorPrimary">#FFF0CA11</item>
<item name="colorPrimaryDark">#FFD3AF00</item>
<item name="colorAccent">#FFFFE35C</item>
<item name="android:textColor">#FF000000</item>
</style>
<style name="BearingAESTheme" parent="AESTheme">
<item name="colorTextColor">#FF000000</item>
<item name="colorPrimary">#FF840FFF</item>
<item name="colorPrimaryDark">#FF6900D7</item>
<item name="colorAccent">#FFBA78FF</item>
<item name="android:textColor">#FF000000</item>
</style>
<style name="MemorAESTheme" parent="AESTheme">
<item name="colorTextColor">#FF000000</item>
<item name="colorPrimary">#FFFF00F5</item>
<item name="colorPrimaryDark">#FFE500DC</item>
<item name="colorAccent">#FFFF76FA</item>
<item name="android:textColor">#FF000000</item>
</style>
<style name="TaoAESTheme" parent="AESTheme">
<item name="colorTextColor">#FF000000</item>
<item name="colorPrimary">#FFACACAC</item>
<item name="colorPrimaryDark">#FF898989</item>
<item name="colorAccent">#FFD8D8D8</item>
<item name="android:textColor">#FF000000</item>
</style>
<!--<style name="AESTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorTextColor">#FF000000</item>
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:textColor">#FF000000</item>
<item name="aToolbar">@style/AESAToolbar</item>
<item name="aSupportToolbar">@style/AESASupportToolbar</item>
</style>
<style name="AESAToolbar">
<item name="attrAToolbarTitleTextColor">?attr/colorTextColor</item>
<item name="attrAToolbarStartColor">?attr/colorPrimaryDark</item>
<item name="attrAToolbarCenterColor">?attr/colorPrimary</item>
<item name="attrAToolbarEndColor">?attr/colorAccent</item>
</style>
<style name="AESASupportToolbar">
<item name="attrASupportToolbarTitleTextColor">?attr/colorTextColor</item>
<item name="attrASupportToolbarStartColor">?attr/colorPrimaryDark</item>
<item name="attrASupportToolbarCenterColor">?attr/colorPrimary</item>
<item name="attrASupportToolbarEndColor">?attr/colorAccent</item>
</style>-->
<!--<style name="DepthAESTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorTextColor">#FF000000</item>
<item name="colorPrimary">#FF2566FE</item>
<item name="colorPrimaryDark">#FF1359FF</item>
<item name="colorAccent">#FF8BAEFF</item>
<item name="android:textColor">#FF000000</item>
<item name="aToolbar">@style/DepthAToolbar</item>
<item name="aSupportToolbar">@style/DepthASupportToolbar</item>
</style>
<style name="DepthAToolbar">
<item name="attrAToolbarTitleTextColor">?attr/colorTextColor</item>
<item name="attrAToolbarStartColor">?attr/colorPrimaryDark</item>
<item name="attrAToolbarCenterColor">?attr/colorPrimary</item>
<item name="attrAToolbarEndColor">?attr/colorAccent</item>
</style>
<style name="DepthASupportToolbar">
<item name="attrASupportToolbarTitleTextColor">?attr/colorTextColor</item>
<item name="attrASupportToolbarStartColor">?attr/colorPrimaryDark</item>
<item name="attrASupportToolbarCenterColor">?attr/colorPrimary</item>
<item name="attrASupportToolbarEndColor">?attr/colorAccent</item>
</style>
<style name="SkyAESTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorTextColor">#FF000000</item>
<item name="colorPrimary">#FF1E98D4</item>
<item name="colorPrimaryDark">#FF046A9C</item>
<item name="colorAccent">#FF8CD9FF</item>
<item name="android:textColor">#FF000000</item>
<item name="aToolbar">@style/SkyAToolbar</item>
<item name="aSupportToolbar">@style/SkyASupportToolbar</item>
</style>
<style name="SkyAToolbar">
<item name="attrAToolbarTitleTextColor">?attr/colorTextColor</item>
<item name="attrAToolbarStartColor">?attr/colorPrimaryDark</item>
<item name="attrAToolbarCenterColor">?attr/colorPrimary</item>
<item name="attrAToolbarEndColor">?attr/colorAccent</item>
</style>
<style name="SkyASupportToolbar">
<item name="attrASupportToolbarTitleTextColor">?attr/colorTextColor</item>
<item name="attrASupportToolbarStartColor">?attr/colorPrimaryDark</item>
<item name="attrASupportToolbarCenterColor">?attr/colorPrimary</item>
<item name="attrASupportToolbarEndColor">?attr/colorAccent</item>
</style>
<style name="GoldenAESTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorTextColor">#FF000000</item>
<item name="colorPrimary">#FFFFE22A</item>
<item name="colorPrimaryDark">#FFAE9600</item>
<item name="colorAccent">#FFFFED78</item>
<item name="android:textColor">#FF000000</item>
<item name="aToolbar">@style/GoldenAToolbar</item>
<item name="aSupportToolbar">@style/GoldenASupportToolbar</item>
</style>
<style name="GoldenAToolbar">
<item name="attrAToolbarTitleTextColor">?attr/colorTextColor</item>
<item name="attrAToolbarStartColor">?attr/colorPrimaryDark</item>
<item name="attrAToolbarCenterColor">?attr/colorPrimary</item>
<item name="attrAToolbarEndColor">?attr/colorAccent</item>
</style>
<style name="GoldenASupportToolbar">
<item name="attrASupportToolbarTitleTextColor">?attr/colorTextColor</item>
<item name="attrASupportToolbarStartColor">?attr/colorPrimaryDark</item>
<item name="attrASupportToolbarCenterColor">?attr/colorPrimary</item>
<item name="attrASupportToolbarEndColor">?attr/colorAccent</item>
</style>
<style name="MemorAESTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorTextColor">#FF000000</item>
<item name="colorPrimary">#FFCE1ED4</item>
<item name="colorPrimaryDark">#FFB500BC</item>
<item name="colorAccent">#FFE653EB</item>
<item name="android:textColor">#FF000000</item>
<item name="aToolbar">@style/MemorAToolbar</item>
<item name="aSupportToolbar">@style/MemorASupportToolbar</item>
</style>
<style name="MemorAToolbar">
<item name="attrAToolbarTitleTextColor">?attr/colorTextColor</item>
<item name="attrAToolbarStartColor">?attr/colorPrimaryDark</item>
<item name="attrAToolbarCenterColor">?attr/colorPrimary</item>
<item name="attrAToolbarEndColor">?attr/colorAccent</item>
</style>
<style name="MemorASupportToolbar">
<item name="attrASupportToolbarTitleTextColor">?attr/colorTextColor</item>
<item name="attrASupportToolbarStartColor">?attr/colorPrimaryDark</item>
<item name="attrASupportToolbarCenterColor">?attr/colorPrimary</item>
<item name="attrASupportToolbarEndColor">?attr/colorAccent</item>
</style>
<style name="TaoAESTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorTextColor">#FF000000</item>
<item name="colorPrimary">#FF9F9F9F</item>
<item name="colorPrimaryDark">#FF5E5E5E</item>
<item name="colorAccent">#FFD9D9D9</item>
<item name="android:textColor">#FF000000</item>
<item name="aToolbar">@style/TaoAToolbar</item>
<item name="aSupportToolbar">@style/TaoASupportToolbar</item>
</style>
<style name="TaoAToolbar">
<item name="attrAToolbarTitleTextColor">?attr/colorTextColor</item>
<item name="attrAToolbarStartColor">?attr/colorPrimaryDark</item>
<item name="attrAToolbarCenterColor">?attr/colorPrimary</item>
<item name="attrAToolbarEndColor">?attr/colorAccent</item>
</style>
<style name="TaoASupportToolbar">
<item name="attrASupportToolbarTitleTextColor">?attr/colorTextColor</item>
<item name="attrASupportToolbarStartColor">?attr/colorPrimaryDark</item>
<item name="attrASupportToolbarCenterColor">?attr/colorPrimary</item>
<item name="attrASupportToolbarEndColor">?attr/colorAccent</item>
</style>-->
<!--<style name="AToolbar">
<item name="attrAToolbarTitleTextColor">#FF2DDA27</item>
<item name="attrAToolbarStartColor">#FF2DDA27</item>
<item name="attrAToolbarCenterColor">#FF2DDA27</item>
<item name="attrAToolbarEndColor">#FF2DDA27</item>
</style>-->
<!--对话框的样式-->
<style name="NormalDialogStyle">
<!--对话框背景 -->
<style name="NormalDialogStyle" parent="Theme.AppCompat.Light.Dialog">
<item name="android:windowBackground">@android:color/transparent</item>
<!--边框 -->
<item name="android:windowFrame">@null</item>
<!--没有标题 -->
<item name="android:windowNoTitle">true</item>
<!-- 是否浮现在Activity之上 -->
<item name="android:windowIsFloating">true</item>
<!--背景透明 -->
<item name="android:windowIsTranslucent">false</item>
<!-- 是否有覆盖 -->
<item name="android:windowContentOverlay">@null</item>
<!--进出的显示动画 -->
<item name="android:windowAnimationStyle">@style/cornerDialogAnim</item>
<!--背景变暗-->
<item name="android:backgroundDimEnabled">true</item>
</style>
<!--对话框动画,中间弹出-->
<style name="centerDialogAnim" parent="android:Animation">
<item name="@android:windowEnterAnimation">@anim/normal_dialog_enter_center</item>
<item name="@android:windowExitAnimation">@anim/normal_dialog_exit_center</item>
</style>
<!--对话框动画,角落弹出-->
<style name="cornerDialogAnim" parent="android:Animation">
<item name="@android:windowEnterAnimation">@anim/normal_dialog_enter_corner</item>
<item name="@android:windowExitAnimation">@anim/normal_dialog_exit_corner</item>
</style>
</resources>

View File

@@ -12,6 +12,10 @@ android {
minSdkVersion 26
targetSdkVersion 30
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
buildTypes {
release {
minifyEnabled false
@@ -31,8 +35,8 @@ dependencies {
api 'com.jcraft:jsch:0.1.54'
// WinBoLL库 nexus.winboll.cc 地址
api 'cc.winboll.studio:libaes:15.15.2'
api 'cc.winboll.studio:libappbase:15.15.11'
api 'cc.winboll.studio:libaes:15.20.3'
api 'cc.winboll.studio:libappbase:15.20.9'
api fileTree(dir: 'libs', include: ['*.jar'])
}

View File

@@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle
#Sat May 09 19:01:46 GMT 2026
stageCount=27
#Wed May 13 11:15:04 CST 2026
stageCount=2
libraryProject=libwinboll
baseVersion=15.11
publishVersion=15.11.26
buildCount=29
baseBetaVersion=15.11.27
baseVersion=15.20
publishVersion=15.20.1
buildCount=1
baseBetaVersion=15.20.2

View File

@@ -31,7 +31,7 @@ android {
// versionName 更新后需要手动设置
// .winboll/winbollBuildProps.properties 文件的 stageCount=0
// Gradle编译环境下合起来的 versionName 就是 "${versionName}.0"
versionName "15.11"
versionName "15.20"
if(true) {
versionName = genVersionName("${versionName}")
}
@@ -51,7 +51,6 @@ android {
dependencies {
api project(':libwinboll')
api 'com.google.code.gson:gson:2.10.1'
// 下拉控件
@@ -68,8 +67,6 @@ dependencies {
api 'io.github.medyo:android-about-page:2.0.0'
// 网络连接类库
api 'com.squareup.okhttp3:okhttp:4.4.1'
// OkHttp网络请求
implementation 'com.squareup.okhttp3:okhttp:3.14.9'
// FastJSON解析
implementation 'com.alibaba:fastjson:1.2.76'
@@ -87,7 +84,6 @@ dependencies {
//注意以下5个库必须要引入
//implementation 'androidx.appcompat:appcompat:1.4.1'
api 'androidx.recyclerview:recyclerview:1.0.0'
api 'com.google.code.gson:gson:2.8.5'
api 'com.github.bumptech.glide:glide:4.9.0'
//annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
@@ -108,13 +104,5 @@ dependencies {
implementation 'com.termux:terminal-view:0.118.0'
implementation 'com.termux:termux-shared:0.118.0'
// WinBoLL库 nexus.winboll.cc 地址
api 'cc.winboll.studio:libaes:15.15.2'
api 'cc.winboll.studio:libappbase:15.15.11'
// WinBoLL备用库 jitpack.io 地址
//api 'com.github.ZhanGSKen:AES:aes-v15.15.7'
//api 'com.github.ZhanGSKen:APPBase:appbase-v15.15.4'
api fileTree(dir: 'libs', include: ['*.jar'])
}

View File

@@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle
#Sat May 09 19:01:46 GMT 2026
stageCount=27
#Wed May 13 11:15:04 CST 2026
stageCount=2
libraryProject=libwinboll
baseVersion=15.11
publishVersion=15.11.26
buildCount=29
baseBetaVersion=15.11.27
baseVersion=15.20
publishVersion=15.20.1
buildCount=1
baseBetaVersion=15.20.2

View File

@@ -15,14 +15,13 @@
<uses-permission android:name="android.permission.REORDER_TASKS"/>
<!-- 计算应用存储空间 -->
<uses-permission android:name="android.permission.GET_PACKAGE_SIZE"/>
<uses-permission
android:name="android.permission.GET_PACKAGE_SIZE"/>
<uses-permission
android:name="android.permission.QUERY_ALL_PACKAGES"
tools:ignore="QueryAllPackagesPermission"/>
<uses-permission android:name="android.permission.GET_PACKAGE_SIZE"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"

View File

@@ -11,6 +11,7 @@ import android.view.View;
import android.widget.AdapterView;
import cc.winboll.studio.libaes.activitys.DrawerFragmentActivity;
import cc.winboll.studio.libaes.models.DrawerMenuBean;
import cc.winboll.studio.libaes.utils.AESThemeUtil;
import cc.winboll.studio.libaes.utils.WinBoLLActivityManager;
import cc.winboll.studio.libappbase.LogUtils;
import cc.winboll.studio.winboll.R;
@@ -36,19 +37,17 @@ public class MainActivity extends DrawerFragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(cc.winboll.studio.winboll.theme.WinBoLLThemeUtil.getThemeTypeID(this));
super.onCreate(savedInstanceState);
// ------------------- 新增初始化MainActivity的Handler关键 -------------------
initMainHandler();
if (mBrowserFragment == null) {
LogUtils.d(TAG, "The code in this line is not fix yet.");
// String externalUrl = extractExternalUrl(getIntent());
// if (externalUrl != null) {
// mBrowserFragment = BrowserFragment.newInstance(externalUrl);
// } else {
// mBrowserFragment = new BrowserFragment();
// }
// addFragment(mBrowserFragment);
String externalUrl = extractExternalUrl(getIntent());
if (externalUrl != null) {
mBrowserFragment = BrowserFragment.newInstance(externalUrl);
} else {
mBrowserFragment = BrowserFragment.newInstance();
}
addFragment(mBrowserFragment);
}
showFragment(mBrowserFragment);
}
@@ -171,36 +170,35 @@ public class MainActivity extends DrawerFragmentActivity {
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int nItemId = item.getItemId();
if (nItemId == R.id.item_home) {
// 发送MSG_HOMEPAGE消息给BrowserFragment
if (mBrowserFragment != null && mBrowserFragment.getBrowserHandler() != null) {
Message msg = Message.obtain();
msg.what = BrowserFragment.MSG_HOMEPAGE;
mBrowserFragment.getBrowserHandler().sendMessage(msg);
}
} else if (nItemId == R.id.item_settings) {
WinBoLLActivityManager.getInstance().startWinBoLLActivity(getApplicationContext(), SettingsActivity.class);
} else if (nItemId == R.id.item_about) {
Intent intent = new Intent(getApplicationContext(), AboutActivity.class);
WinBoLLActivityManager.getInstance().startWinBoLLActivity(getApplicationContext(), intent, AboutActivity.class);
} else if (nItemId == R.id.item_mytermux) {
Intent intent = new Intent(getApplicationContext(), MyTermuxActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
} else if (nItemId == R.id.item_termux_env_test) {
Intent intent = new Intent(getApplicationContext(), TermuxEnvTestActivity.class);
WinBoLLActivityManager.getInstance().startWinBoLLActivity(getApplicationContext(), intent, AboutActivity.class);
} else if (nItemId == R.id.item_library_activity) {
Intent intent = new Intent(getApplicationContext(), cc.winboll.studio.libwinboll.WinBoLLLibraryActivity.class);
WinBoLLActivityManager.getInstance().startWinBoLLActivity(getApplicationContext(), intent, AboutActivity.class);
if (AESThemeUtil.onWinBoLLThemeItemSelected(this, item)) {
recreate();
} else {
return super.onOptionsItemSelected(item);
}
int nItemId = item.getItemId();
if (nItemId == R.id.item_home) {
if (mBrowserFragment != null && mBrowserFragment.getBrowserHandler() != null) {
Message msg = Message.obtain();
msg.what = BrowserFragment.MSG_HOMEPAGE;
mBrowserFragment.getBrowserHandler().sendMessage(msg);
}
} else if (nItemId == R.id.item_settings) {
WinBoLLActivityManager.getInstance().startWinBoLLActivity(getApplicationContext(), SettingsActivity.class);
} else if (nItemId == R.id.item_about) {
Intent intent = new Intent(getApplicationContext(), AboutActivity.class);
WinBoLLActivityManager.getInstance().startWinBoLLActivity(getApplicationContext(), intent, AboutActivity.class);
} else if (nItemId == R.id.item_mytermux) {
Intent intent = new Intent(getApplicationContext(), MyTermuxActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
} else if (nItemId == R.id.item_termux_env_test) {
Intent intent = new Intent(getApplicationContext(), TermuxEnvTestActivity.class);
WinBoLLActivityManager.getInstance().startWinBoLLActivity(getApplicationContext(), intent, AboutActivity.class);
} else if (nItemId == R.id.item_library_activity) {
Intent intent = new Intent(getApplicationContext(), cc.winboll.studio.libwinboll.WinBoLLLibraryActivity.class);
WinBoLLActivityManager.getInstance().startWinBoLLActivity(getApplicationContext(), intent, AboutActivity.class);
} else {
return super.onOptionsItemSelected(item);
}
}
return true;
}

View File

@@ -5,8 +5,8 @@ import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import cc.winboll.studio.libaes.interfaces.IWinBoLLActivity;
import cc.winboll.studio.libaes.models.AESThemeBean;
import cc.winboll.studio.libaes.utils.AESThemeUtil;
import cc.winboll.studio.libaes.utils.WinBoLLActivityManager;
import cc.winboll.studio.winboll.theme.WinBoLLThemeUtil;
/**
* @Author 豆包&ZhanGSKen<zhangsken@qq.com>
@@ -29,16 +29,11 @@ public abstract class BaseWinBoLLActivity extends AppCompatActivity implements I
}
AESThemeBean.ThemeType getThemeType() {
/*SharedPreferences sharedPreferences = getSharedPreferences(
SHAREDPREFERENCES_NAME, MODE_PRIVATE);
return AESThemeBean.ThemeType.values()[((sharedPreferences.getInt(DRAWER_THEME_TYPE, AESThemeBean.ThemeType.DEFAULT.ordinal())))];
*/
return AESThemeBean.getThemeStyleType(AESThemeUtil.getThemeTypeID(getApplicationContext()));
return WinBoLLThemeUtil.getThemeStyleType(WinBoLLThemeUtil.getThemeTypeID(getApplicationContext()));
}
void setThemeStyle() {
//setTheme(AESThemeBean.getThemeStyle(getThemeType()));
setTheme(AESThemeUtil.getThemeTypeID(getApplicationContext()));
setTheme(WinBoLLThemeUtil.getThemeTypeID(getApplicationContext()));
}
@Override

View File

@@ -1,31 +1,46 @@
package cc.winboll.studio.winboll.applications;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import cc.winboll.studio.libappbase.LogUtils;
import cc.winboll.studio.winboll.R;
import cc.winboll.studio.winboll.models.TermuxButtonManager;
import cc.winboll.studio.winboll.models.TermuxButtonModel;
import cc.winboll.studio.winboll.termux.TermuxCommandExecutor;
import java.util.ArrayList;
public class MyTermuxActivity extends AppCompatActivity {
public static final String TAG = "MyTermuxActivity";
private Toolbar mToolbar;
private Button mTermuxButton;
private Button mTermuxWorkSpacesButton;
private ListView mListView;
private Button mBtnAdd;
private ButtonAdapter mAdapter;
private ArrayList<TermuxButtonModel> mButtonList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_termux);
// 初始化工具栏
initToolbar();
// 初始化按钮
initView();
initListView();
initAddButton();
refreshList();
}
private void initToolbar() {
@@ -34,44 +49,189 @@ public class MyTermuxActivity extends AppCompatActivity {
setSupportActionBar(mToolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LogUtils.d(TAG, "点击返回按钮");
finish();
}
});
LogUtils.d(TAG, "工具栏初始化完成");
@Override
public void onClick(View v) {
finish();
}
});
}
}
private void initView() {
mTermuxButton = findViewById(R.id.btn_termux);
if (mTermuxButton != null) {
mTermuxButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LogUtils.d(TAG, "点击 Termux 按钮");
TermuxCommandExecutor.openTermuxBash(MyTermuxActivity.this, "cd ~");
//TermuxCommandExecutor.openTermuxBash(MyTermuxActivity.this, "cd ~/TermuxWorkSpaces", "./TermuxWorkSpaces");
}
});
LogUtils.d(TAG, "Termux 按钮初始化完成");
}
private void initListView() {
mListView = findViewById(R.id.list_termux_buttons);
mButtonList = new ArrayList<TermuxButtonModel>();
mAdapter = new ButtonAdapter();
mListView.setAdapter(mAdapter);
mTermuxWorkSpacesButton = findViewById(R.id.btn_termuxworkspaces);
if (mTermuxWorkSpacesButton != null) {
mTermuxWorkSpacesButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LogUtils.d(TAG, "点击 TermuxWorkSpaces 按钮");
TermuxCommandExecutor.openTermuxBash(MyTermuxActivity.this, "cd ~/TermuxWorkSpaces", "./TermuxWorkSpaces");
}
});
LogUtils.d(TAG, "TermuxWorkSpaces 按钮初始化完成");
}
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
TermuxButtonModel model = mButtonList.get(position);
TermuxCommandExecutor.openTermuxBash(MyTermuxActivity.this,
model.getExeCommand(), model.getWorkDir());
}
});
mListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
showContextMenu(position);
return true;
}
});
}
private boolean isTermuxAvailable() {
return TermuxCommandExecutor.isTermuxInstalled(this);
private void initAddButton() {
mBtnAdd = findViewById(R.id.btn_add_termux_button);
mBtnAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showButtonDialog(-1, null);
}
});
}
private void refreshList() {
mButtonList.clear();
ArrayList<TermuxButtonModel> loaded = TermuxButtonManager.loadButtons(this);
if (loaded != null) {
mButtonList.addAll(loaded);
}
mAdapter.notifyDataSetChanged();
}
private void showContextMenu(final int position) {
final TermuxButtonModel model = mButtonList.get(position);
String[] items = new String[]{
getString(R.string.menu_execute),
getString(R.string.menu_edit),
getString(R.string.menu_delete),
getString(R.string.menu_cancel)
};
new AlertDialog.Builder(this)
.setTitle(model.getButtonName())
.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (which == 0) {
TermuxCommandExecutor.openTermuxBash(MyTermuxActivity.this,
model.getExeCommand(), model.getWorkDir());
} else if (which == 1) {
showButtonDialog(position, model);
} else if (which == 2) {
showDeleteConfirmDialog(position);
}
}
})
.show();
}
private void showDeleteConfirmDialog(final int position) {
new AlertDialog.Builder(this)
.setTitle(getString(R.string.dialog_delete_title))
.setMessage(getString(R.string.dialog_delete_message) + mButtonList.get(position).getButtonName())
.setPositiveButton(getString(R.string.dialog_confirm), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
TermuxButtonManager.deleteButton(MyTermuxActivity.this, mButtonList, position);
refreshList();
Toast.makeText(MyTermuxActivity.this, R.string.toast_deleted, Toast.LENGTH_SHORT).show();
}
})
.setNegativeButton(getString(R.string.dialog_cancel), null)
.show();
}
private void showButtonDialog(final int index, final TermuxButtonModel model) {
final boolean isEdit = (model != null);
LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);
layout.setPadding(40, 20, 40, 20);
final EditText etName = new EditText(this);
etName.setHint(R.string.hint_button_name);
if (model != null) {
etName.setText(model.getButtonName());
}
layout.addView(etName);
final EditText etCommand = new EditText(this);
etCommand.setHint(R.string.hint_exe_command);
if (model != null) {
etCommand.setText(model.getExeCommand());
}
layout.addView(etCommand);
final EditText etWorkDir = new EditText(this);
etWorkDir.setHint(R.string.hint_work_dir);
if (model != null) {
etWorkDir.setText(model.getWorkDir());
}
layout.addView(etWorkDir);
int titleResId = isEdit ? R.string.dialog_edit_title : R.string.dialog_add_title;
new AlertDialog.Builder(this)
.setTitle(titleResId)
.setView(layout)
.setPositiveButton(getString(R.string.dialog_save), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String name = etName.getText().toString().trim();
String command = etCommand.getText().toString().trim();
String workDir = etWorkDir.getText().toString().trim();
if (name.isEmpty() || command.isEmpty()) {
Toast.makeText(MyTermuxActivity.this, R.string.toast_fields_required, Toast.LENGTH_SHORT).show();
return;
}
TermuxButtonModel newModel = new TermuxButtonModel();
newModel.setButtonName(name);
newModel.setExeCommand(command);
newModel.setWorkDir(workDir);
if (isEdit) {
TermuxButtonManager.updateButton(MyTermuxActivity.this, mButtonList, index, newModel);
} else {
TermuxButtonManager.addButton(MyTermuxActivity.this, mButtonList, newModel);
}
refreshList();
}
})
.setNegativeButton(getString(R.string.dialog_cancel), null)
.show();
}
private class ButtonAdapter extends BaseAdapter {
@Override
public int getCount() {
return mButtonList.size();
}
@Override
public Object getItem(int position) {
return mButtonList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView tv;
if (convertView == null) {
tv = new TextView(MyTermuxActivity.this);
tv.setPadding(30, 20, 30, 20);
tv.setTextSize(16);
tv.setMinHeight(80);
} else {
tv = (TextView) convertView;
}
TermuxButtonModel model = mButtonList.get(position);
tv.setText(model.getButtonName() + "\n" + model.getExeCommand());
tv.setTextColor(getResources().getColor(android.R.color.white));
return tv;
}
}
}

View File

@@ -0,0 +1,37 @@
package cc.winboll.studio.winboll.models;
import android.content.Context;
import cc.winboll.studio.libappbase.BaseBean;
import java.util.ArrayList;
public class TermuxButtonManager {
public static ArrayList<TermuxButtonModel> loadButtons(Context context) {
ArrayList<TermuxButtonModel> list = new ArrayList<TermuxButtonModel>();
BaseBean.loadBeanList(context, list, TermuxButtonModel.class);
return list;
}
public static boolean saveButtons(Context context, ArrayList<TermuxButtonModel> list) {
return BaseBean.saveBeanList(context, list, TermuxButtonModel.class);
}
public static void addButton(Context context, ArrayList<TermuxButtonModel> list, TermuxButtonModel button) {
list.add(button);
saveButtons(context, list);
}
public static void updateButton(Context context, ArrayList<TermuxButtonModel> list, int index, TermuxButtonModel button) {
if (index >= 0 && index < list.size()) {
list.set(index, button);
saveButtons(context, list);
}
}
public static void deleteButton(Context context, ArrayList<TermuxButtonModel> list, int index) {
if (index >= 0 && index < list.size()) {
list.remove(index);
saveButtons(context, list);
}
}
}

View File

@@ -0,0 +1,49 @@
package cc.winboll.studio.winboll.theme;
import cc.winboll.studio.libaes.models.AESThemeBean;
import cc.winboll.studio.winboll.R;
public class WinBoLLThemeBean {
public static final String TAG = "WinBoLLThemeBean";
public static int getDefaultThemeStyleID() {
return R.style.MyAppTheme;
}
public static int getThemeStyleID(AESThemeBean.ThemeType themeType) {
int themeStyleID = getDefaultThemeStyleID();
if (AESThemeBean.ThemeType.DEPTH == themeType) {
themeStyleID = R.style.MyDepthAppTheme;
} else if (AESThemeBean.ThemeType.SKY == themeType) {
themeStyleID = R.style.MySkyAppTheme;
} else if (AESThemeBean.ThemeType.GOLDEN == themeType) {
themeStyleID = R.style.MyGoldenAppTheme;
} else if (AESThemeBean.ThemeType.BEARING == themeType) {
themeStyleID = R.style.MyBearingAppTheme;
} else if (AESThemeBean.ThemeType.MEMOR == themeType) {
themeStyleID = R.style.MyMemorAppTheme;
} else if (AESThemeBean.ThemeType.TAO == themeType) {
themeStyleID = R.style.MyTaoAppTheme;
}
return themeStyleID;
}
public static AESThemeBean.ThemeType getThemeStyleType(int nThemeStyleID) {
AESThemeBean.ThemeType themeStyle = AESThemeBean.ThemeType.AES;
if (R.style.MyDepthAppTheme == nThemeStyleID) {
themeStyle = AESThemeBean.ThemeType.DEPTH;
} else if (R.style.MySkyAppTheme == nThemeStyleID) {
themeStyle = AESThemeBean.ThemeType.SKY;
} else if (R.style.MyGoldenAppTheme == nThemeStyleID) {
themeStyle = AESThemeBean.ThemeType.GOLDEN;
} else if (R.style.MyBearingAppTheme == nThemeStyleID) {
themeStyle = AESThemeBean.ThemeType.BEARING;
} else if (R.style.MyMemorAppTheme == nThemeStyleID) {
themeStyle = AESThemeBean.ThemeType.MEMOR;
} else if (R.style.MyTaoAppTheme == nThemeStyleID) {
themeStyle = AESThemeBean.ThemeType.TAO;
}
return themeStyle;
}
}

View File

@@ -0,0 +1,36 @@
package cc.winboll.studio.winboll.theme;
import android.content.Context;
import cc.winboll.studio.libaes.models.AESThemeBean;
import cc.winboll.studio.libaes.utils.AESThemeUtil;
public class WinBoLLThemeUtil {
public static final String TAG = "WinBoLLThemeUtil";
public static int getThemeTypeID(Context context) {
AESThemeBean bean = AESThemeBean.loadBean(context, AESThemeBean.class);
int themeTypeID;
if (bean == null) {
themeTypeID = WinBoLLThemeBean.getDefaultThemeStyleID();
} else {
int aesStyleID = bean.getCurrentThemeTypeID();
AESThemeBean.ThemeType themeType = WinBoLLThemeBean.getThemeStyleType(aesStyleID);
themeTypeID = WinBoLLThemeBean.getThemeStyleID(themeType);
}
return themeTypeID;
}
public static void saveThemeStyleID(Context context, int nThemeTypeID) {
AESThemeBean bean = new AESThemeBean(nThemeTypeID);
AESThemeBean.saveBean(context, bean);
}
public static AESThemeBean.ThemeType getThemeStyleType(int nThemeStyleID) {
return WinBoLLThemeBean.getThemeStyleType(nThemeStyleID);
}
public static int getThemeStyleID(AESThemeBean.ThemeType themeType) {
return WinBoLLThemeBean.getThemeStyleID(themeType);
}
}

View File

@@ -4,8 +4,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="top">
android:layout_height="match_parent">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
@@ -17,74 +16,20 @@
app:titleTextColor="@android:color/white"
app:subtitleTextColor="@android:color/white"/>
<ScrollView
<ListView
android:id="@+id/list_termux_buttons"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1.0">
android:layout_weight="1.0"
android:divider="@android:color/darker_gray"
android:dividerHeight="1dp"/>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<HorizontalScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1.0">
<LinearLayout
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<cc.winboll.studio.winboll.views.TermuxButton
android:id="@+id/btn_termux"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Termux"
android:textSize="18sp"
android:padding="16dp"
android:backgroundTint="@android:color/holo_blue_dark"
app:exeCommand="cd ~"
app:workDir="~"
app:isCommitted="true"
app:commitTitle="打开 Termux"
app:commitInfo="打开 Termux 应用"/>
<cc.winboll.studio.winboll.views.TermuxButton
android:id="@+id/btn_termuxworkspaces"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TermuxWorkSpaces"
android:textSize="18sp"
android:padding="16dp"
android:backgroundTint="@android:color/holo_blue_dark"
app:exeCommand="cd ~/TermuxWorkSpaces"
app:workDir="~"
app:isCommitted="false"
app:commitTitle="打开 TermuxWorkSpaces"
app:commitInfo="打开 Termux 应用,进入 TermuxWorkSpaces 目录。"/>
</LinearLayout>
</HorizontalScrollView>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="+"
android:id="@+id/btn_addtermuxbutton"/>
</LinearLayout>
</LinearLayout>
</ScrollView>
<Button
android:id="@+id/btn_add_termux_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/add_termux_button"
android:textSize="16sp"
android:padding="12dp"/>
</LinearLayout>

View File

@@ -4,4 +4,10 @@
<color name="colorPrimaryDark">#00796B</color>
<color name="colorAccent">#FF9800</color>
<color name="pattern_lock_black">#000000</color>
<color name="mainWindowBackgroundColor">#FFF5F5F5</color>
<color name="mainWindowTextColor">#FF000000</color>
<color name="toolbarTextColor">#FF000000</color>
<color name="toolbarBackgroundColor">#FF00B322</color>
<color name="debugTextColor">#FF808080</color>
</resources>

View File

@@ -13,4 +13,21 @@
<string name="toolbar_icon_description">WinBoLL APP</string>
<string name="my_termux_activity">MyTermuxActivity</string>
<string name="pattern_lock_title">图案密码设置</string>
<string name="add_termux_button">+ 添加Termux按钮</string>
<string name="menu_execute">执行</string>
<string name="menu_edit">编辑</string>
<string name="menu_delete">删除</string>
<string name="menu_cancel">取消</string>
<string name="dialog_delete_title">确认删除</string>
<string name="dialog_delete_message">确定要删除</string>
<string name="dialog_add_title">添加Termux按钮</string>
<string name="dialog_edit_title">编辑Termux按钮</string>
<string name="dialog_save">保存</string>
<string name="dialog_confirm">确定</string>
<string name="dialog_cancel">取消</string>
<string name="hint_button_name">按钮名称</string>
<string name="hint_exe_command">执行命令</string>
<string name="hint_work_dir">工作目录(默认 ~</string>
<string name="toast_deleted">已删除</string>
<string name="toast_fields_required">按钮名称和执行命令不能为空</string>
</resources>

View File

@@ -1,5 +1,57 @@
<resources>
<style name="MyAppTheme" parent="AESTheme">
<style name="MyAppTheme" parent="AESTheme">
<item name="themeDebug">@style/MyDebugActivityTheme</item>
<item name="aToolbar">@style/MyAESAToolbar</item>
<item name="aSupportToolbar">@style/MyAESASupportToolbar</item>
</style>
<style name="MyDepthAppTheme" parent="DepthAESTheme">
<item name="themeDebug">@style/MyDebugActivityTheme</item>
<item name="aToolbar">@style/MyAESAToolbar</item>
<item name="aSupportToolbar">@style/MyAESASupportToolbar</item>
</style>
<style name="MySkyAppTheme" parent="SkyAESTheme">
<item name="themeDebug">@style/MyDebugActivityTheme</item>
<item name="aToolbar">@style/MyAESAToolbar</item>
<item name="aSupportToolbar">@style/MyAESASupportToolbar</item>
</style>
<style name="MyGoldenAppTheme" parent="GoldenAESTheme">
<item name="themeDebug">@style/MyDebugActivityTheme</item>
<item name="aToolbar">@style/MyAESAToolbar</item>
<item name="aSupportToolbar">@style/MyAESASupportToolbar</item>
</style>
<style name="MyBearingAppTheme" parent="BearingAESTheme">
<item name="themeDebug">@style/MyDebugActivityTheme</item>
<item name="aToolbar">@style/MyAESAToolbar</item>
<item name="aSupportToolbar">@style/MyAESASupportToolbar</item>
</style>
<style name="MyMemorAppTheme" parent="MemorAESTheme">
<item name="themeDebug">@style/MyDebugActivityTheme</item>
<item name="aToolbar">@style/MyAESAToolbar</item>
<item name="aSupportToolbar">@style/MyAESASupportToolbar</item>
</style>
<style name="MyTaoAppTheme" parent="TaoAESTheme">
<item name="themeDebug">@style/MyDebugActivityTheme</item>
<item name="aToolbar">@style/MyAESAToolbar</item>
<item name="aSupportToolbar">@style/MyAESASupportToolbar</item>
</style>
<style name="MyAESAToolbar" parent="AESAToolbar" />
<style name="MyAESASupportToolbar" parent="AESASupportToolbar" />
<style name="MyDebugActivityTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:statusBarColor">@color/toolbarBackgroundColor</item>
<item name="colorTittle">@color/mainWindowTextColor</item>
<item name="colorTittleBackgound">@color/toolbarBackgroundColor</item>
<item name="colorText">@color/debugTextColor</item>
<item name="colorTextBackgound">@color/mainWindowBackgroundColor</item>
<item name="debugTextColor">@color/debugTextColor</item>
<item name="toolbarTextColor">@color/toolbarTextColor</item>
</style>
</resources>