From 5f2170a7a149b109b2921a18cb6d49480b4b58e7 Mon Sep 17 00:00:00 2001 From: LaizyBoy Date: Tue, 12 May 2026 16:08:48 +0800 Subject: [PATCH] =?UTF-8?q?feat(winboll):=20=E9=87=8D=E6=9E=84=E5=BA=94?= =?UTF-8?q?=E7=94=A8=E4=B8=BB=E9=A2=98=E7=B3=BB=E7=BB=9F=EF=BC=8C=E7=BB=A7?= =?UTF-8?q?=E6=89=BFlibaes=E4=B8=BB=E9=A2=98=E5=85=83=E7=B4=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 主要修改: - 新增 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 注意:应用正在测试中 --- .../winboll/studio/winboll/MainActivity.java | 76 +++++++++---------- .../activities/BaseWinBoLLActivity.java | 11 +-- .../winboll/theme/WinBoLLThemeBean.java | 49 ++++++++++++ .../winboll/theme/WinBoLLThemeUtil.java | 36 +++++++++ winboll/src/main/res/values/styles.xml | 64 +++++++++++----- 5 files changed, 168 insertions(+), 68 deletions(-) create mode 100644 winboll/src/main/java/cc/winboll/studio/winboll/theme/WinBoLLThemeBean.java create mode 100644 winboll/src/main/java/cc/winboll/studio/winboll/theme/WinBoLLThemeUtil.java diff --git a/winboll/src/main/java/cc/winboll/studio/winboll/MainActivity.java b/winboll/src/main/java/cc/winboll/studio/winboll/MainActivity.java index e396b2e..3ffc723 100644 --- a/winboll/src/main/java/cc/winboll/studio/winboll/MainActivity.java +++ b/winboll/src/main/java/cc/winboll/studio/winboll/MainActivity.java @@ -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; } diff --git a/winboll/src/main/java/cc/winboll/studio/winboll/activities/BaseWinBoLLActivity.java b/winboll/src/main/java/cc/winboll/studio/winboll/activities/BaseWinBoLLActivity.java index 9d4f407..7dedd62 100644 --- a/winboll/src/main/java/cc/winboll/studio/winboll/activities/BaseWinBoLLActivity.java +++ b/winboll/src/main/java/cc/winboll/studio/winboll/activities/BaseWinBoLLActivity.java @@ -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 @@ -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 diff --git a/winboll/src/main/java/cc/winboll/studio/winboll/theme/WinBoLLThemeBean.java b/winboll/src/main/java/cc/winboll/studio/winboll/theme/WinBoLLThemeBean.java new file mode 100644 index 0000000..1d748d7 --- /dev/null +++ b/winboll/src/main/java/cc/winboll/studio/winboll/theme/WinBoLLThemeBean.java @@ -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; + } +} diff --git a/winboll/src/main/java/cc/winboll/studio/winboll/theme/WinBoLLThemeUtil.java b/winboll/src/main/java/cc/winboll/studio/winboll/theme/WinBoLLThemeUtil.java new file mode 100644 index 0000000..1e6640d --- /dev/null +++ b/winboll/src/main/java/cc/winboll/studio/winboll/theme/WinBoLLThemeUtil.java @@ -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); + } +} diff --git a/winboll/src/main/res/values/styles.xml b/winboll/src/main/res/values/styles.xml index 2ae79d5..fcf0822 100644 --- a/winboll/src/main/res/values/styles.xml +++ b/winboll/src/main/res/values/styles.xml @@ -1,28 +1,50 @@ - + + + + + + + + + + + + +