diff --git a/winboll/build.properties b/winboll/build.properties index 861bb08..0b11a41 100644 --- a/winboll/build.properties +++ b/winboll/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Sat Dec 06 18:16:28 GMT 2025 +#Sat Dec 06 19:13:59 GMT 2025 stageCount=6 libraryProject= baseVersion=15.11 publishVersion=15.11.5 -buildCount=39 +buildCount=46 baseBetaVersion=15.11.6 diff --git a/winboll/src/main/java/cc/winboll/studio/winboll/App.java b/winboll/src/main/java/cc/winboll/studio/winboll/App.java index 024a65b..9bfaab0 100644 --- a/winboll/src/main/java/cc/winboll/studio/winboll/App.java +++ b/winboll/src/main/java/cc/winboll/studio/winboll/App.java @@ -59,7 +59,7 @@ public class App extends GlobalApplication { public void onCreate() { super.onCreate(); setIsDebugging(BuildConfig.DEBUG); - setIsDebugging(false); + //setIsDebugging(false); WinBoLLActivityManager.init(this); 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 f83140f..24f4d2a 100644 --- a/winboll/src/main/java/cc/winboll/studio/winboll/MainActivity.java +++ b/winboll/src/main/java/cc/winboll/studio/winboll/MainActivity.java @@ -2,6 +2,7 @@ package cc.winboll.studio.winboll; import android.app.Activity; import android.os.Bundle; +import android.os.Handler; import android.os.Message; import android.view.Menu; import android.view.MenuItem; @@ -22,26 +23,25 @@ import java.util.ArrayList; import android.content.Intent; import cc.winboll.studio.libaes.activitys.AboutActivity; -public class MainActivity extends DrawerFragmentActivity implements IWinBoLLActivity { +public class MainActivity extends DrawerFragmentActivity { public static final String TAG = "MainActivity"; BrowserFragment mBrowserFragment; - @Override - public Activity getActivity() { - return null; - } - - @Override - public String getTag() { - return TAG; - } + // ------------------- 新增:Handler 消息定义(接收URL历史更新消息) ------------------- + // 消息标识:URL加载历史更新(刷新抽屉菜单的历史列表) + public static final int MSG_URLLOADHISTORY_UPDATE = 1002; + // 自定义Handler(接收应用内消息,如BrowserFragment发送的历史更新消息) + private static Handler _mMainHandler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + // ------------------- 新增:初始化MainActivity的Handler(关键) ------------------- + initMainHandler(); + if (mBrowserFragment == null) { mBrowserFragment = new BrowserFragment(); addFragment(mBrowserFragment); @@ -49,28 +49,75 @@ public class MainActivity extends DrawerFragmentActivity implements IWinBoLLActi showFragment(mBrowserFragment); } + public static void sendMessage(Message msg) { + _mMainHandler.sendMessage(msg); + } + + /** + * 初始化Handler(接收MSG_URLLOADHISTORY_UPDATE消息,刷新抽屉历史菜单) + */ + private void initMainHandler() { + // 清理旧数据 + if (_mMainHandler != null) { + _mMainHandler.removeCallbacksAndMessages(null); + _mMainHandler = null; + } + + // Java 7 匿名内部类实现Handler(主线程创建,安全更新UI/抽屉菜单) + _mMainHandler = new Handler() { + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + switch (msg.what) { + case MSG_URLLOADHISTORY_UPDATE: + // 处理URL历史更新消息:刷新抽屉菜单的历史列表 + LogUtils.d(TAG, "收到URL历史更新消息,刷新抽屉菜单"); + refreshUrlHistoryDrawerMenu(); + break; + default: + break; + } + } + }; + } + @Override public void initDrawerMenuItemList(ArrayList listDrawerMenu) { super.initDrawerMenuItemList(listDrawerMenu); - LogUtils.d(TAG, "initDrawerMenuItemList"); - //listDrawerMenu.clear(); - // 添加抽屉菜单项 - listDrawerMenu.add(new DrawerMenuBean(R.drawable.ic_launcher, TestAButtonFragment.TAG)); - listDrawerMenu.add(new DrawerMenuBean(R.drawable.ic_launcher, TestViewPageFragment.TAG)); + //LogUtils.d(TAG, "initDrawerMenuItemList"); + // 加载URL历史菜单(初始化时加载) + refreshUrlHistoryDrawerMenu(); notifyDrawerMenuDataChanged(); } @Override public void reinitDrawerMenuItemList(ArrayList listDrawerMenu) { super.reinitDrawerMenuItemList(listDrawerMenu); - LogUtils.d(TAG, "reinitDrawerMenuItemList"); - //listDrawerMenu.clear(); - // 添加抽屉菜单项 - listDrawerMenu.add(new DrawerMenuBean(R.drawable.ic_launcher, TestAButtonFragment.TAG)); - listDrawerMenu.add(new DrawerMenuBean(R.drawable.ic_launcher, TestViewPageFragment.TAG)); + //LogUtils.d(TAG, "reinitDrawerMenuItemList"); + // 重新加载URL历史菜单(菜单重置时加载) + refreshUrlHistoryDrawerMenu(); notifyDrawerMenuDataChanged(); } + void loadUrlLoadHistotyMenu(ArrayList listDrawerMenu) { + listDrawerMenu.clear(); + if (BrowserFragment._mUrlLoadHistory != null) { + for (String url : BrowserFragment._mUrlLoadHistory) { + listDrawerMenu.add(new DrawerMenuBean(R.drawable.ic_launcher, url)); + } + } + } + + // ------------------- 新增:刷新URL历史抽屉菜单(提取独立方法,复用) ------------------- + private void refreshUrlHistoryDrawerMenu() { + // 获取抽屉菜单列表,重新加载历史数据并刷新 + ArrayList drawerMenuList = super.malDrawerMenuItem; // 假设父类提供获取菜单列表的方法 + if (drawerMenuList != null) { + loadUrlLoadHistotyMenu(drawerMenuList); // 重新加载更新后的历史数据 + notifyDrawerMenuDataChanged(); // 通知抽屉菜单刷新UI + } + } + @Override public DrawerFragmentActivity.ActivityType initActivityType() { return DrawerFragmentActivity.ActivityType.Main; @@ -85,28 +132,22 @@ public class MainActivity extends DrawerFragmentActivity implements IWinBoLLActi @Override public void onItemClick(AdapterView parent, View view, int position, long id) { super.onItemClick(parent, view, position, id); - switch (position) { - case 0 : { - if (mBrowserFragment == null) { - mBrowserFragment = new BrowserFragment(); - addFragment(mBrowserFragment); - } - showFragment(mBrowserFragment); - break; - } + if (mBrowserFragment != null && mBrowserFragment.getBrowserHandler() != null) { + Message msg = Message.obtain(); + msg.what = BrowserFragment.MSG_HISTORY_POSITION; + msg.obj = position; + mBrowserFragment.getBrowserHandler().sendMessage(msg); } } @Override public boolean onOptionsItemSelected(MenuItem item) { int nItemId = item.getItemId(); - if(nItemId == R.id.item_home) { - // 关键:获取BrowserFragment的Handler + if (nItemId == R.id.item_home) { + // 发送MSG_HOMEPAGE消息给BrowserFragment if (mBrowserFragment != null && mBrowserFragment.getBrowserHandler() != null) { - // 创建消息(Java 7 显式创建Message) Message msg = Message.obtain(); - msg.what = BrowserFragment.MSG_HOMEPAGE; // 指定消息标识 - // 发送消息(可携带数据,如msg.obj = "额外参数";) + msg.what = BrowserFragment.MSG_HOMEPAGE; mBrowserFragment.getBrowserHandler().sendMessage(msg); } } else if (nItemId == R.id.item_settings) { @@ -137,8 +178,23 @@ public class MainActivity extends DrawerFragmentActivity implements IWinBoLLActi appInfo.setAppHomePage("https://www.winboll.cc/apks/index.php?project=WinBoLL"); appInfo.setAppAPKName("WinBoLL"); appInfo.setAppAPKFolderName("WinBoLL"); - //appInfo.setIsAddDebugTools(false); - //appInfo.setIsAddDebugTools(BuildConfig.DEBUG); return appInfo; } + + // ------------------- 新增:对外提供Handler(供其他组件发送消息,如BrowserFragment) ------------------- + public Handler getMainHandler() { + return _mMainHandler; + } + + // ------------------- 新增:生命周期管理(防止Handler内存泄漏) ------------------- + @Override + protected void onDestroy() { + super.onDestroy(); + // 清除Handler所有消息和回调,避免内存泄漏 + if (_mMainHandler != null) { + _mMainHandler.removeCallbacksAndMessages(null); + _mMainHandler = null; + } + } } + diff --git a/winboll/src/main/java/cc/winboll/studio/winboll/fragments/BrowserFragment.java b/winboll/src/main/java/cc/winboll/studio/winboll/fragments/BrowserFragment.java index 479b894..ee58f42 100644 --- a/winboll/src/main/java/cc/winboll/studio/winboll/fragments/BrowserFragment.java +++ b/winboll/src/main/java/cc/winboll/studio/winboll/fragments/BrowserFragment.java @@ -15,8 +15,11 @@ import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; +import cc.winboll.studio.winboll.MainActivity; import cc.winboll.studio.winboll.R; import cc.winboll.studio.winboll.views.WinBoLLView; +import java.util.ArrayList; +import android.app.Activity; /** * @Author ZhanGSKen&豆包大模型 @@ -35,10 +38,13 @@ public class BrowserFragment extends Fragment implements View.OnClickListener, W private Button mBtnBack; private ProgressBar mProgressBar; private WinBoLLView mWinBoLLView; + public static ArrayList _mUrlLoadHistory = new ArrayList(); // ------------------- 新增:Handler 消息定义(应用内通信) ------------------- // 消息标识:跳转首页(winboll.cc) public static final int MSG_HOMEPAGE = 1001; + // 跳转到历史记录位置 + public static final int MSG_HISTORY_POSITION = 1002; // 自定义Handler(接收应用内其他页面发送的消息) private Handler mBrowserHandler; @@ -52,6 +58,9 @@ public class BrowserFragment extends Fragment implements View.OnClickListener, W public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { // 加载布局(Java 7 显式强转,无菱形语法) View view = inflater.inflate(R.layout.fragment_browser, container, false); + // 清理旧历史记录 + _mUrlLoadHistory.clear(); + // 初始化控件 initViews(view); // 绑定事件 @@ -129,7 +138,16 @@ public class BrowserFragment extends Fragment implements View.OnClickListener, W mEtUrl.setText(homeUrl); showToast("已跳转至首页"); break; - // 可扩展:添加其他消息标识(如MSG_OPEN_URL、MSG_REFRESH等) + case MSG_HISTORY_POSITION: + int position = (int)msg.obj; + if(-1 < position && position < _mUrlLoadHistory.size()) { + // 处理“跳转首页”消息:加载winboll.cc + String historyUrl = _mUrlLoadHistory.get(position); + mWinBoLLView.loadUrlSafe(historyUrl); + mEtUrl.setText(historyUrl); + //showToast("已跳转至" + historyUrl); + } + break; default: break; } @@ -221,6 +239,7 @@ public class BrowserFragment extends Fragment implements View.OnClickListener, W // 页面加载完成:更新输入框URL if (mEtUrl != null && url != null) { mEtUrl.setText(url); + addUrlToHistory(url); } } @@ -273,5 +292,28 @@ public class BrowserFragment extends Fragment implements View.OnClickListener, W mBrowserHandler = null; } } + + // 在 BrowserFragment 中添加以下代码(Java 7 语法) + /** + * 发送URL历史更新消息给MainActivity(当历史列表变化时调用) + */ + private void sendUrlHistoryUpdateMsg() { + Message msg = Message.obtain(); + msg.what = MainActivity.MSG_URLLOADHISTORY_UPDATE; + MainActivity.sendMessage(msg); + } + + // 调用时机示例(在BrowserFragment加载URL并更新历史列表后调用) + // 假设BrowserFragment中有添加URL到历史的方法: + private void addUrlToHistory(String url) { + if (_mUrlLoadHistory == null) { + _mUrlLoadHistory = new ArrayList(); + } + if (!_mUrlLoadHistory.contains(url)) { + _mUrlLoadHistory.add(0, url); + // 关键:添加历史后发送更新消息,通知MainActivity刷新抽屉菜单 + sendUrlHistoryUpdateMsg(); + } + } }