Compare commits

...

12 Commits

Author SHA1 Message Date
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
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
83da84371c Merge remote-tracking branch 'origin/aes' into winboll 2026-05-11 20:59:23 +08:00
8f869e19cc 更新基础类库 2026-05-10 05:12:19 +08:00
11 changed files with 207 additions and 80 deletions

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 10:28:36 HKT 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=0
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 10:28:36 HKT 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=0
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

@@ -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,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

@@ -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>