diff --git a/appbase/build.gradle b/appbase/build.gradle
index f59582b9..f1adbe8b 100644
--- a/appbase/build.gradle
+++ b/appbase/build.gradle
@@ -30,7 +30,7 @@ android {
// versionName 更新后需要手动设置
// .winboll/winbollBuildProps.properties 文件的 stageCount=0
// Gradle编译环境下合起来的 versionName 就是 "${versionName}.0"
- versionName "15.9"
+ versionName "15.10"
if(true) {
versionName = genVersionName("${versionName}")
}
diff --git a/appbase/build.properties b/appbase/build.properties
index 7928c981..5cf40492 100644
--- a/appbase/build.properties
+++ b/appbase/build.properties
@@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle
-#Mon Sep 15 18:05:08 HKT 2025
-stageCount=6
+#Sun Sep 21 16:44:01 GMT 2025
+stageCount=0
libraryProject=libappbase
-baseVersion=15.9
-publishVersion=15.9.5
-buildCount=46
-baseBetaVersion=15.9.6
+baseVersion=15.10
+publishVersion=15.10.0
+buildCount=6
+baseBetaVersion=15.10.1
diff --git a/appbase/src/main/AndroidManifest.xml b/appbase/src/main/AndroidManifest.xml
index 66f68a38..4b2817e6 100644
--- a/appbase/src/main/AndroidManifest.xml
+++ b/appbase/src/main/AndroidManifest.xml
@@ -9,10 +9,9 @@
android:label="@string/app_name"
android:theme="@style/MyAPPBaseTheme"
android:resizeableActivity="true"
- android:process=":App"
- android:networkSecurityConfig="@xml/network_security_config">
+ android:process=":App">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
diff --git a/appbase/src/main/java/cc/winboll/studio/appbase/App.java b/appbase/src/main/java/cc/winboll/studio/appbase/App.java
index 11609284..271747c0 100644
--- a/appbase/src/main/java/cc/winboll/studio/appbase/App.java
+++ b/appbase/src/main/java/cc/winboll/studio/appbase/App.java
@@ -5,23 +5,15 @@ package cc.winboll.studio.appbase;
* @Date 2025/01/05 09:54:42
* @Describe APPbase 应用类
*/
-import cc.winboll.studio.libappbase.GlobalApplication;
import android.content.IntentFilter;
-import cc.winboll.studio.libappbase.sos.SOSCenterServiceReceiver;
-import cc.winboll.studio.libappbase.sos.SOS;
+import cc.winboll.studio.libappbase.GlobalApplication;
public class App extends GlobalApplication {
public static final String TAG = "App";
- SOSCenterServiceReceiver mSOSCenterServiceReceiver;
-
@Override
public void onCreate() {
super.onCreate();
- mSOSCenterServiceReceiver = new SOSCenterServiceReceiver();
- IntentFilter intentFilter = new IntentFilter();
- intentFilter.addAction(SOS.ACTION_SOS);
- registerReceiver(mSOSCenterServiceReceiver, intentFilter);
}
}
diff --git a/appbase/src/main/java/cc/winboll/studio/appbase/MainActivity.java b/appbase/src/main/java/cc/winboll/studio/appbase/MainActivity.java
index 7f55f8a9..f2cadee3 100644
--- a/appbase/src/main/java/cc/winboll/studio/appbase/MainActivity.java
+++ b/appbase/src/main/java/cc/winboll/studio/appbase/MainActivity.java
@@ -10,35 +10,16 @@ import android.view.View;
import android.widget.CheckBox;
import android.widget.Toolbar;
import cc.winboll.studio.appbase.R;
-import cc.winboll.studio.appbase.activities.NewActivity;
-import cc.winboll.studio.appbase.activities.WinBoLLActivity;
-import cc.winboll.studio.appbase.services.MainService;
-import cc.winboll.studio.appbase.services.TestDemoBindService;
-import cc.winboll.studio.appbase.services.TestDemoService;
import cc.winboll.studio.libappbase.CrashHandler;
import cc.winboll.studio.libappbase.GlobalApplication;
import cc.winboll.studio.libappbase.GlobalCrashActivity;
import cc.winboll.studio.libappbase.LogUtils;
-import cc.winboll.studio.libappbase.LogView;
-import cc.winboll.studio.libappbase.sos.SOS;
-import cc.winboll.studio.libappbase.utils.ToastUtils;
-import cc.winboll.studio.libappbase.widgets.StatusWidget;
-import cc.winboll.studio.libappbase.winboll.IWinBoLLActivity;
+import cc.winboll.studio.libappbase.ToastUtils;
-public class MainActivity extends WinBoLLActivity implements IWinBoLLActivity {
+public class MainActivity extends Activity {
public static final String TAG = "MainActivity";
- @Override
- public Activity getActivity() {
- return this;
- }
-
- @Override
- public String getTag() {
- return TAG;
- }
-
Toolbar mToolbar;
@Override
@@ -71,113 +52,15 @@ public class MainActivity extends WinBoLLActivity implements IWinBoLLActivity {
return super.onOptionsItemSelected(item);
}
- @Override
- protected void onDestroy() {
- super.onDestroy();
- Intent intentAPPWidget = new Intent(this, StatusWidget.class);
- intentAPPWidget.setAction(StatusWidget.ACTION_STATUS_UPDATE);
- sendBroadcast(intentAPPWidget);
+ public void onCrashTest(View view) {
+ for (int i = Integer.MIN_VALUE; i < Integer.MAX_VALUE; i++) {
+ getString(i);
+ }
}
-
- public void onSwitchDebugMode(View view) {
- boolean isDebuging = ((CheckBox)view).isChecked();
- GlobalApplication.setIsDebuging(isDebuging);
- GlobalApplication.saveDebugStatus();
- }
-
- public void onPreviewGlobalCrashActivity(View view) {
- Intent intent = new Intent(this, GlobalCrashActivity.class);
- intent.putExtra(CrashHandler.EXTRA_CRASH_INFO, "Demo log...");
- startActivity(intent);
- }
-
- public void onStartCenter(View view) {
- MainService.startMainService(this);
- }
-
- public void onStopCenter(View view) {
- MainService.stopMainService(this);
- }
-
- public void onTestStopMainServiceWithoutSettingEnable(View view) {
- LogUtils.d(TAG, "onTestStopMainServiceWithoutSettingEnable");
- stopService(new Intent(this, MainService.class));
- }
-
- public void onTestUseComponentStartService(View view) {
- LogUtils.d(TAG, "onTestUseComponentStartService");
-
- // 目标服务的包名和类名
- String packageName = this.getPackageName();
- String serviceClassName = TestDemoService.class.getName();
-
- // 构建Intent
- Intent intentService = new Intent();
- intentService.setComponent(new ComponentName(packageName, serviceClassName));
-
- startService(intentService);
- }
-
- public void onTestDemoServiceSOS(View view) {
- Intent intent = new Intent(this, TestDemoService.class);
- stopService(intent);
- if (App.isDebuging()) {
- SOS.sosToAppBaseBeta(this, TestDemoService.class.getName());
- } else {
- SOS.sosToAppBase(this, TestDemoService.class.getName());
- }
- }
-
- public void onSartTestDemoService(View view) {
+
+ public void onLogTest(View view) {
Intent intent = new Intent(this, TestDemoService.class);
intent.setAction(TestDemoService.ACTION_ENABLE);
startService(intent);
-
}
-
- public void onStopTestDemoService(View view) {
- Intent intent = new Intent(this, TestDemoService.class);
- intent.setAction(TestDemoService.ACTION_DISABLE);
- startService(intent);
-
- Intent intentStop = new Intent(this, TestDemoService.class);
- stopService(intentStop);
- }
-
- public void onStopTestDemoServiceNoSettings(View view) {
- Intent intent = new Intent(this, TestDemoService.class);
- stopService(intent);
- }
-
- public void onSartTestDemoBindService(View view) {
- Intent intent = new Intent(this, TestDemoBindService.class);
- intent.setAction(TestDemoBindService.ACTION_ENABLE);
- startService(intent);
-
- }
-
- public void onStopTestDemoBindService(View view) {
- Intent intent = new Intent(this, TestDemoBindService.class);
- intent.setAction(TestDemoBindService.ACTION_DISABLE);
- startService(intent);
-
- Intent intentStop = new Intent(this, TestDemoBindService.class);
- stopService(intentStop);
- }
-
- public void onStopTestDemoBindServiceNoSettings(View view) {
- Intent intent = new Intent(this, TestDemoBindService.class);
- stopService(intent);
- }
-
- public void onTestOpenNewActivity(View view) {
- GlobalApplication.getWinBoLLActivityManager().startWinBoLLActivity(this, NewActivity.class);
- }
-
- @Override
- protected void onResume() {
- super.onResume();
- }
-
-
}
diff --git a/appbase/src/main/java/cc/winboll/studio/appbase/MyTileService.java b/appbase/src/main/java/cc/winboll/studio/appbase/MyTileService.java
deleted file mode 100644
index 9e174108..00000000
--- a/appbase/src/main/java/cc/winboll/studio/appbase/MyTileService.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package cc.winboll.studio.appbase;
-
-/**
- * @Author ZhanGSKen
- * @Date 2025/02/13 19:30:10
- */
-import android.content.Context;
-import android.service.quicksettings.Tile;
-import android.service.quicksettings.TileService;
-import cc.winboll.studio.appbase.models.MainServiceBean;
-import cc.winboll.studio.appbase.services.MainService;
-
-public class MyTileService extends TileService {
- public static final String TAG = "MyTileService";
-
- volatile static MyTileService _MyTileService;
-
- @Override
- public void onStartListening() {
- super.onStartListening();
- _MyTileService = this;
- Tile tile = getQsTile();
- MainServiceBean bean = MainServiceBean.loadBean(this, MainServiceBean.class);
- if (bean != null && bean.isEnable()) {
- //MainService.startMainService(context);
- tile.setState(Tile.STATE_ACTIVE);
- tile.setIcon(android.graphics.drawable.Icon.createWithResource(this, R.drawable.ic_cloud));
- } else {
- //MainService.stopMainService(context);
- tile.setState(Tile.STATE_INACTIVE);
- tile.setIcon(android.graphics.drawable.Icon.createWithResource(this, R.drawable.ic_cloud_outline));
- }
- tile.updateTile();
-// Tile tile = getQsTile();
-// tile.setState(Tile.STATE_INACTIVE);
-// tile.setLabel(getString(R.string.tileservice_name));
-// tile.setIcon(android.graphics.drawable.Icon.createWithResource(this, R.drawable.ic_cloud_outline));
-// tile.updateTile();
-
- }
-
- @Override
- public void onClick() {
- super.onClick();
- Tile tile = getQsTile();
- MainServiceBean bean = MainServiceBean.loadBean(this, MainServiceBean.class);
- if (bean == null) {
- bean = new MainServiceBean();
- }
-
- if (tile.getState() == Tile.STATE_ACTIVE) {
- bean.setIsEnable(false);
- MainServiceBean.saveBean(this, bean);
- MainService.stopMainService(this);
- } else if (tile.getState() == Tile.STATE_INACTIVE) {
- bean.setIsEnable(true);
- MainServiceBean.saveBean(this, bean);
- MainService.startMainService(this);
- }
- updateServiceIconStatus(this);
- }
-
- public static void updateServiceIconStatus(Context context) {
- if (_MyTileService == null) {
- return;
- }
-
- Tile tile = _MyTileService.getQsTile();
- MainServiceBean bean = MainServiceBean.loadBean(context, MainServiceBean.class);
- if (bean != null && bean.isEnable()) {
- tile.setState(Tile.STATE_ACTIVE);
- tile.setIcon(android.graphics.drawable.Icon.createWithResource(context, R.drawable.ic_cloud));
- } else {
- tile.setState(Tile.STATE_INACTIVE);
- tile.setIcon(android.graphics.drawable.Icon.createWithResource(context, R.drawable.ic_cloud_outline));
- }
- tile.updateTile();
- }
-}
diff --git a/appbase/src/main/java/cc/winboll/studio/appbase/activities/New2Activity.java b/appbase/src/main/java/cc/winboll/studio/appbase/activities/New2Activity.java
deleted file mode 100644
index faf79d20..00000000
--- a/appbase/src/main/java/cc/winboll/studio/appbase/activities/New2Activity.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package cc.winboll.studio.appbase.activities;
-
-/**
- * @Author ZhanGSKen
- * @Date 2025/03/25 11:46:40
- * @Describe 测试窗口2
- */
-import android.app.Activity;
-import android.os.Bundle;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.View;
-import android.widget.Toolbar;
-import cc.winboll.studio.appbase.R;
-import cc.winboll.studio.libappbase.GlobalApplication;
-import cc.winboll.studio.libappbase.winboll.IWinBoLLActivity;
-
-public class New2Activity extends WinBoLLActivity implements IWinBoLLActivity {
-
- public static final String TAG = "New2Activity";
-
- Toolbar mToolbar;
- //LogView mLogView;
-
- @Override
- public Activity getActivity() {
- return this;
- }
-
- @Override
- public String getTag() {
- return TAG;
- }
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_new2);
-
-// mLogView = findViewById(R.id.logview);
-// mLogView.start();
- mToolbar = findViewById(R.id.toolbar);
- setActionBar(mToolbar);
-
- }
-
- @Override
- protected void onResume() {
- super.onResume();
- //mLogView.start();
- }
-
- public void onCloseThisActivity(View view) {
- GlobalApplication.getWinBoLLActivityManager().finish(this);
- }
-
- public void onCloseAllActivity(View view) {
- GlobalApplication.getWinBoLLActivityManager().finishAll();
- }
-
- public void onNewActivity(View view) {
- GlobalApplication.getWinBoLLActivityManager().startWinBoLLActivity(this, NewActivity.class);
- }
-
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.toolbar_main, menu);
- return super.onCreateOptionsMenu(menu);
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- // 在switch语句中处理每个ID,并在处理完后返回true,未处理的情况返回false。
- return super.onOptionsItemSelected(item);
- }
-}
diff --git a/appbase/src/main/java/cc/winboll/studio/appbase/activities/NewActivity.java b/appbase/src/main/java/cc/winboll/studio/appbase/activities/NewActivity.java
deleted file mode 100644
index f87156e1..00000000
--- a/appbase/src/main/java/cc/winboll/studio/appbase/activities/NewActivity.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package cc.winboll.studio.appbase.activities;
-
-/**
- * @Author ZhanGSKen&豆包大模型
- * @Date 2025/03/25 05:04:22
- * @Describe
- */
-import android.app.Activity;
-import android.os.Bundle;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.View;
-import android.widget.Toolbar;
-import cc.winboll.studio.appbase.R;
-import cc.winboll.studio.libappbase.GlobalApplication;
-import cc.winboll.studio.libappbase.winboll.IWinBoLLActivity;
-
-public class NewActivity extends WinBoLLActivity implements IWinBoLLActivity {
-
- public static final String TAG = "NewActivity";
-
- Toolbar mToolbar;
- //LogView mLogView;
-
- @Override
- public Activity getActivity() {
- return this;
- }
-
- @Override
- public String getTag() {
- return TAG;
- }
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_new);
-// mLogView = findViewById(R.id.logview);
-// mLogView.start();
- mToolbar = findViewById(R.id.toolbar);
- setActionBar(mToolbar);
-
- }
-
- @Override
- protected void onResume() {
- super.onResume();
- //mLogView.start();
- }
-
- public void onCloseThisActivity(View view) {
- GlobalApplication.getWinBoLLActivityManager().finish(this);
- }
-
- public void onCloseAllActivity(View view) {
- GlobalApplication.getWinBoLLActivityManager().finishAll();
- }
-
- public void onNew2Activity(View view) {
- GlobalApplication.getWinBoLLActivityManager().startWinBoLLActivity(this, New2Activity.class);
- }
-
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.toolbar_main, menu);
- return super.onCreateOptionsMenu(menu);
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- // 在switch语句中处理每个ID,并在处理完后返回true,未处理的情况返回false。
- return super.onOptionsItemSelected(item);
- }
-}
diff --git a/appbase/src/main/java/cc/winboll/studio/appbase/activities/WinBoLLActivity.java b/appbase/src/main/java/cc/winboll/studio/appbase/activities/WinBoLLActivity.java
deleted file mode 100644
index 0721c401..00000000
--- a/appbase/src/main/java/cc/winboll/studio/appbase/activities/WinBoLLActivity.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package cc.winboll.studio.appbase.activities;
-
-/**
- * @Author ZhanGSKen
- * @Date 2025/05/10 09:48
- * @Describe WinBoLL 窗口基础类
- */
-import android.app.Activity;
-import android.os.Bundle;
-import android.view.MenuItem;
-import cc.winboll.studio.appbase.MainActivity;
-import cc.winboll.studio.appbase.R;
-import cc.winboll.studio.libappbase.GlobalApplication;
-import cc.winboll.studio.libappbase.LogUtils;
-import cc.winboll.studio.libappbase.winboll.IWinBoLLActivity;
-
-public class WinBoLLActivity extends Activity implements IWinBoLLActivity {
-
- public static final String TAG = "WinBoLLActivity";
-
- @Override
- public Activity getActivity() {
- return this;
- }
-
- @Override
- public String getTag() {
- return TAG;
- }
-
- @Override
- protected void onResume() {
- super.onResume();
- LogUtils.d(TAG, String.format("onResume %s", getTag()));
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- if (item.getItemId() == R.id.item_log) {
- GlobalApplication.getWinBoLLActivityManager().startLogActivity(this);
- return true;
- } else if (item.getItemId() == R.id.item_home) {
- GlobalApplication.getWinBoLLActivityManager().startWinBoLLActivity(getApplicationContext(), MainActivity.class);
- return true;
- }
- // 在switch语句中处理每个ID,并在处理完后返回true,未处理的情况返回false。
- return super.onOptionsItemSelected(item);
- }
-
- @Override
- protected void onPostCreate(Bundle savedInstanceState) {
- super.onPostCreate(savedInstanceState);
- GlobalApplication.getWinBoLLActivityManager().add(this);
- }
-
- @Override
- protected void onDestroy() {
- super.onDestroy();
- GlobalApplication.getWinBoLLActivityManager().registeRemove(this);
- }
-}
diff --git a/appbase/src/main/java/cc/winboll/studio/appbase/handlers/MainServiceHandler.java b/appbase/src/main/java/cc/winboll/studio/appbase/handlers/MainServiceHandler.java
deleted file mode 100644
index c9d6a0e8..00000000
--- a/appbase/src/main/java/cc/winboll/studio/appbase/handlers/MainServiceHandler.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package cc.winboll.studio.appbase.handlers;
-
-/**
- * @Author ZhanGSKen
- * @Date 2025/02/14 03:51:40
- */
-import android.os.Handler;
-import android.os.Message;
-import cc.winboll.studio.appbase.services.MainService;
-import java.lang.ref.WeakReference;
-
-public class MainServiceHandler extends Handler {
- public static final String TAG = "MainServiceHandler";
-
- public static final int MSG_REMINDTHREAD = 0;
-
- WeakReference serviceWeakReference;
- public MainServiceHandler(MainService service) {
- serviceWeakReference = new WeakReference(service);
- }
-
- @Override
- public void handleMessage(Message msg) {
- switch (msg.what) {
- case MSG_REMINDTHREAD: // 处理下载完成消息,更新UI
- {
- // 显示提醒消息
- //
- //LogUtils.d(TAG, "显示提醒消息");
- MainService mainService = serviceWeakReference.get();
- if (mainService != null) {
- mainService.appenMessage((String)msg.obj);
- }
- break;
- }
- }
- }
-}
diff --git a/appbase/src/main/java/cc/winboll/studio/appbase/models/MainServiceBean.java b/appbase/src/main/java/cc/winboll/studio/appbase/models/MainServiceBean.java
deleted file mode 100644
index 01dc4144..00000000
--- a/appbase/src/main/java/cc/winboll/studio/appbase/models/MainServiceBean.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package cc.winboll.studio.appbase.models;
-
-/**
- * @Author ZhanGSKen
- * @Date 2025/02/13 07:06:13
- */
-import android.util.JsonReader;
-import android.util.JsonWriter;
-import cc.winboll.studio.libappbase.BaseBean;
-import java.io.IOException;
-
-public class MainServiceBean extends BaseBean {
-
- public static final String TAG = "MainServiceBean";
-
- boolean isEnable;
-
- public MainServiceBean() {
- this.isEnable = false;
- }
-
- public void setIsEnable(boolean isEnable) {
- this.isEnable = isEnable;
- }
-
- public boolean isEnable() {
- return isEnable;
- }
-
- @Override
- public String getName() {
- return MainServiceBean.class.getName();
- }
-
- @Override
- public void writeThisToJsonWriter(JsonWriter jsonWriter) throws IOException {
- super.writeThisToJsonWriter(jsonWriter);
- jsonWriter.name("isEnable").value(isEnable());
-
- }
-
- @Override
- public boolean initObjectsFromJsonReader(JsonReader jsonReader, String name) throws IOException {
- if (super.initObjectsFromJsonReader(jsonReader, name)) { return true; } else {
- if (name.equals("isEnable")) {
- setIsEnable(jsonReader.nextBoolean());
- } else {
- return false;
- }
- }
- return true;
- }
-
- @Override
- public BaseBean readBeanFromJsonReader(JsonReader jsonReader) throws IOException {
- jsonReader.beginObject();
- while (jsonReader.hasNext()) {
- String name = jsonReader.nextName();
- if (!initObjectsFromJsonReader(jsonReader, name)) {
- jsonReader.skipValue();
- }
- }
- // 结束 JSON 对象
- jsonReader.endObject();
- return this;
- }
-}
diff --git a/appbase/src/main/java/cc/winboll/studio/appbase/models/TestDemoBindServiceBean.java b/appbase/src/main/java/cc/winboll/studio/appbase/models/TestDemoBindServiceBean.java
deleted file mode 100644
index 75f7184b..00000000
--- a/appbase/src/main/java/cc/winboll/studio/appbase/models/TestDemoBindServiceBean.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package cc.winboll.studio.appbase.models;
-
-/**
- * @Author ZhanGSKen
- * @Date 2025/03/07 12:47:22
- * @Describe TestServiceBean
- */
-import android.util.JsonReader;
-import android.util.JsonWriter;
-import cc.winboll.studio.libappbase.BaseBean;
-import java.io.IOException;
-
-public class TestDemoBindServiceBean extends BaseBean {
-
- public static final String TAG = "TestServiceBean";
-
- boolean isEnable;
-
- public TestDemoBindServiceBean() {
- this.isEnable = false;
- }
-
- public void setIsEnable(boolean isEnable) {
- this.isEnable = isEnable;
- }
-
- public boolean isEnable() {
- return isEnable;
- }
-
- @Override
- public String getName() {
- return TestDemoBindServiceBean.class.getName();
- }
-
- @Override
- public void writeThisToJsonWriter(JsonWriter jsonWriter) throws IOException {
- super.writeThisToJsonWriter(jsonWriter);
- jsonWriter.name("isEnable").value(isEnable());
- }
-
- @Override
- public boolean initObjectsFromJsonReader(JsonReader jsonReader, String name) throws IOException {
- if (super.initObjectsFromJsonReader(jsonReader, name)) { return true; } else {
- if (name.equals("isEnable")) {
- setIsEnable(jsonReader.nextBoolean());
- } else {
- return false;
- }
- }
- return true;
- }
-
- @Override
- public BaseBean readBeanFromJsonReader(JsonReader jsonReader) throws IOException {
- jsonReader.beginObject();
- while (jsonReader.hasNext()) {
- String name = jsonReader.nextName();
- if (!initObjectsFromJsonReader(jsonReader, name)) {
- jsonReader.skipValue();
- }
- }
- // 结束 JSON 对象
- jsonReader.endObject();
- return this;
- }
-}
diff --git a/appbase/src/main/java/cc/winboll/studio/appbase/models/TestDemoServiceBean.java b/appbase/src/main/java/cc/winboll/studio/appbase/models/TestDemoServiceBean.java
deleted file mode 100644
index 8d6a379a..00000000
--- a/appbase/src/main/java/cc/winboll/studio/appbase/models/TestDemoServiceBean.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package cc.winboll.studio.appbase.models;
-
-/**
- * @Author ZhanGSKen
- * @Date 2025/03/07 12:49:21
- * @Describe TestDemoServiceBean
- */
-import android.util.JsonReader;
-import android.util.JsonWriter;
-import cc.winboll.studio.libappbase.BaseBean;
-import java.io.IOException;
-
-public class TestDemoServiceBean extends BaseBean {
-
- public static final String TAG = "TestDemoServiceBean";
-
- boolean isEnable;
-
- public TestDemoServiceBean() {
- this.isEnable = false;
- }
-
- public void setIsEnable(boolean isEnable) {
- this.isEnable = isEnable;
- }
-
- public boolean isEnable() {
- return isEnable;
- }
-
- @Override
- public String getName() {
- return TestDemoServiceBean.class.getName();
- }
-
- @Override
- public void writeThisToJsonWriter(JsonWriter jsonWriter) throws IOException {
- super.writeThisToJsonWriter(jsonWriter);
- jsonWriter.name("isEnable").value(isEnable());
-
- }
-
- @Override
- public boolean initObjectsFromJsonReader(JsonReader jsonReader, String name) throws IOException {
- if (super.initObjectsFromJsonReader(jsonReader, name)) { return true; } else {
- if (name.equals("isEnable")) {
- setIsEnable(jsonReader.nextBoolean());
- } else {
- return false;
- }
- }
- return true;
- }
-
- @Override
- public BaseBean readBeanFromJsonReader(JsonReader jsonReader) throws IOException {
- jsonReader.beginObject();
- while (jsonReader.hasNext()) {
- String name = jsonReader.nextName();
- if (!initObjectsFromJsonReader(jsonReader, name)) {
- jsonReader.skipValue();
- }
- }
- // 结束 JSON 对象
- jsonReader.endObject();
- return this;
- }
-}
diff --git a/appbase/src/main/java/cc/winboll/studio/appbase/receivers/APPNewsWidgetClickListener.java b/appbase/src/main/java/cc/winboll/studio/appbase/receivers/APPNewsWidgetClickListener.java
deleted file mode 100644
index fd4a35d9..00000000
--- a/appbase/src/main/java/cc/winboll/studio/appbase/receivers/APPNewsWidgetClickListener.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package cc.winboll.studio.appbase.receivers;
-
-/**
- * @Author ZhanGSKen
- * @Date 2025/03/24 07:11:44
- */
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import cc.winboll.studio.appbase.widgets.APPNewsWidget;
-import cc.winboll.studio.libappbase.LogUtils;
-
-public class APPNewsWidgetClickListener extends BroadcastReceiver {
-
- public static final String TAG = "APPNewsWidgetClickListener";
- public static final String ACTION_PRE = APPNewsWidgetClickListener.class.getName() + ".ACTION_PRE";
- public static final String ACTION_NEXT = APPNewsWidgetClickListener.class.getName() + ".ACTION_NEXT";
-
- @Override
- public void onReceive(Context context, Intent intent) {
- String action = intent.getAction();
- if (action == null) {
- LogUtils.d(TAG, String.format("action %s", action));
- return;
- }
- if (action.equals(ACTION_PRE)) {
- LogUtils.d(TAG, "ACTION_PRE");
- APPNewsWidget.prePage(context);
- } else if (action.equals(ACTION_NEXT)) {
- LogUtils.d(TAG, "ACTION_NEXT");
- APPNewsWidget.nextPage(context);
- } else {
- LogUtils.d(TAG, String.format("action %s", action));
- }
- }
-}
diff --git a/appbase/src/main/java/cc/winboll/studio/appbase/receivers/MainReceiver.java b/appbase/src/main/java/cc/winboll/studio/appbase/receivers/MainReceiver.java
deleted file mode 100644
index 14f4318d..00000000
--- a/appbase/src/main/java/cc/winboll/studio/appbase/receivers/MainReceiver.java
+++ /dev/null
@@ -1,119 +0,0 @@
-package cc.winboll.studio.appbase.receivers;
-
-/**
- * @Author ZhanGSKen
- * @Date 2025/02/13 06:58:04
- * @Describe 主要广播接收器
- */
-import android.content.BroadcastReceiver;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import cc.winboll.studio.appbase.services.MainService;
-import cc.winboll.studio.appbase.widgets.APPNewsWidget;
-import cc.winboll.studio.libappbase.AppUtils;
-import cc.winboll.studio.libappbase.LogUtils;
-import cc.winboll.studio.libappbase.models.APPModel;
-import cc.winboll.studio.libappbase.models.WinBoLLModel;
-import cc.winboll.studio.libappbase.models.WinBoLLNewsBean;
-import cc.winboll.studio.libappbase.sos.SOS;
-import cc.winboll.studio.libappbase.sos.SOSObject;
-import cc.winboll.studio.libappbase.utils.ToastUtils;
-import cc.winboll.studio.libappbase.winboll.IWinBoLLActivity;
-import cc.winboll.studio.libappbase.winboll.WinBoLL;
-import java.io.IOException;
-import java.lang.ref.WeakReference;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
-public class MainReceiver extends BroadcastReceiver {
-
- public static final String TAG = "MainReceiver";
-
- public static final String ACTION_BOOT_COMPLETED = "android.intent.action.BOOT_COMPLETED";
-
- WeakReference mwrService;
-
- public MainReceiver(MainService service) {
- mwrService = new WeakReference(service);
- }
-
- @Override
- public void onReceive(Context context, Intent intent) {
- String szAction = intent.getAction();
- if (szAction.equals(ACTION_BOOT_COMPLETED)) {
- ToastUtils.show("ACTION_BOOT_COMPLETED");
- } else if (szAction.equals(IWinBoLLActivity.ACTION_BIND)) {
- LogUtils.d(TAG, "ACTION_BIND");
- LogUtils.d(TAG, String.format("context.getPackageName() %s", context.getPackageName()));
- LogUtils.d(TAG, String.format("intent.getAction() %s", intent.getAction()));
- String szWinBoLLModel = intent.getStringExtra(WinBoLL.EXTRA_WINBOLLMODEL);
- LogUtils.d(TAG, String.format("szAPPModel %s", szWinBoLLModel));
- if (szWinBoLLModel != null && !szWinBoLLModel.equals("")) {
- try {
- WinBoLLModel bean = WinBoLLModel.parseStringToBean(szWinBoLLModel, WinBoLLModel.class);
- if (bean != null) {
- String szAppPackageName = bean.getAppPackageName();
- LogUtils.d(TAG, String.format("szAppPackageName %s", szAppPackageName));
- String szAppMainServiveName = bean.getAppMainServiveName();
- LogUtils.d(TAG, String.format("szAppMainServiveName %s", szAppMainServiveName));
- mwrService.get().bindWinBoLLModelConnection(bean);
- }
- } catch (IOException e) {
- LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
- }
- }
- } else if (intent.getAction().equals(SOS.ACTION_SOS)) {
- LogUtils.d(TAG, "ACTION_SOS");
- String sos = intent.getStringExtra(SOS.EXTRA_OBJECT);
- LogUtils.d(TAG, String.format("SOS %s", sos));
- if (sos != null && !sos.equals("")) {
- SOSObject bean = SOS.parseSOSObject(sos);
- if (bean != null) {
- String szObjectPackageName = bean.getObjectPackageName();
- LogUtils.d(TAG, String.format("szObjectPackageName %s", szObjectPackageName));
- String szObjectServiveName = bean.getObjectServiveName();
- LogUtils.d(TAG, String.format("szObjectServiveName %s", szObjectServiveName));
-
- Intent intentService = new Intent();
- intentService.setComponent(new ComponentName(szObjectPackageName, szObjectServiveName));
- context.startService(intentService);
-
- String appName = AppUtils.getAppNameByPackageName(context, szObjectPackageName);
- LogUtils.d(TAG, String.format("appName %s", appName));
- WinBoLLNewsBean appWinBoLLNewsBean = new WinBoLLNewsBean(appName);
- SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
- String currentTime = sdf.format(new Date());
- StringBuilder sbLine = new StringBuilder();
- sbLine.append("[");
- sbLine.append(currentTime);
- sbLine.append("] Power to ");
- sbLine.append(appName);
- appWinBoLLNewsBean.setMessage(sbLine.toString());
-
- APPNewsWidget.addWinBoLLNewsBean(context, appWinBoLLNewsBean);
-
- Intent intentWidget = new Intent(context, APPNewsWidget.class);
- intentWidget.setAction(APPNewsWidget.ACTION_RELOAD_REPORT);
- context.sendBroadcast(intentWidget);
- }
-
-
- }
- } else {
- ToastUtils.show(szAction);
- }
- }
-
- // 注册 Receiver
- //
- public void registerAction(MainService service) {
- IntentFilter filter=new IntentFilter();
- filter.addAction(ACTION_BOOT_COMPLETED);
- filter.addAction(SOS.ACTION_SOS);
- filter.addAction(WinBoLL.ACTION_BIND);
- //filter.addAction(Intent.ACTION_BATTERY_CHANGED);
- service.registerReceiver(this, filter);
- }
-}
diff --git a/appbase/src/main/java/cc/winboll/studio/appbase/services/AssistantService.java b/appbase/src/main/java/cc/winboll/studio/appbase/services/AssistantService.java
deleted file mode 100644
index 07702412..00000000
--- a/appbase/src/main/java/cc/winboll/studio/appbase/services/AssistantService.java
+++ /dev/null
@@ -1,138 +0,0 @@
-package cc.winboll.studio.appbase.services;
-
-/**
- * @Author ZhanGSKen
- * @Date 2025/02/14 03:38:31
- * @Describe 守护进程服务
- */
-import android.app.Service;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.ServiceConnection;
-import android.os.IBinder;
-import cc.winboll.studio.appbase.models.MainServiceBean;
-import cc.winboll.studio.appbase.services.AssistantService;
-import cc.winboll.studio.appbase.services.MainService;
-import cc.winboll.studio.libappbase.LogUtils;
-import android.os.Binder;
-
-public class AssistantService extends Service {
-
- public static final String TAG = "AssistantService";
-
- MainServiceBean mMainServiceBean;
- MyServiceConnection mMyServiceConnection;
- MainService mMainService;
- boolean isBound = false;
- volatile boolean isThreadAlive = false;
-
- public synchronized void setIsThreadAlive(boolean isThreadAlive) {
- LogUtils.d(TAG, "setIsThreadAlive(...)");
- LogUtils.d(TAG, String.format("isThreadAlive %s", isThreadAlive));
- this.isThreadAlive = isThreadAlive;
- }
-
- public boolean isThreadAlive() {
- return isThreadAlive;
- }
-
- @Override
- public IBinder onBind(Intent intent) {
- return new MyBinder();
- }
-
- @Override
- public void onCreate() {
- LogUtils.d(TAG, "onCreate");
- super.onCreate();
-
- //mMyBinder = new MyBinder();
- if (mMyServiceConnection == null) {
- mMyServiceConnection = new MyServiceConnection();
- }
- // 设置运行参数
- setIsThreadAlive(false);
- assistantService();
- }
-
- @Override
- public int onStartCommand(Intent intent, int flags, int startId) {
- LogUtils.d(TAG, "call onStartCommand(...)");
- assistantService();
- return START_STICKY;
- }
-
- @Override
- public void onDestroy() {
- //LogUtils.d(TAG, "onDestroy");
- setIsThreadAlive(false);
- // 解除绑定
- if (isBound) {
- unbindService(mMyServiceConnection);
- isBound = false;
- }
- super.onDestroy();
- }
-
- // 运行服务内容
- //
- void assistantService() {
- LogUtils.d(TAG, "assistantService()");
- mMainServiceBean = MainServiceBean.loadBean(this, MainServiceBean.class);
- LogUtils.d(TAG, String.format("mMainServiceBean.isEnable() %s", mMainServiceBean.isEnable()));
- if (mMainServiceBean.isEnable()) {
- LogUtils.d(TAG, String.format("mIsThreadAlive %s", isThreadAlive()));
- if (isThreadAlive() == false) {
- // 设置运行状态
- setIsThreadAlive(true);
- // 唤醒和绑定主进程
- wakeupAndBindMain();
- }
- }
- }
-
- // 唤醒和绑定主进程
- //
- void wakeupAndBindMain() {
- LogUtils.d(TAG, "wakeupAndBindMain()");
- // 绑定服务的Intent
- Intent intent = new Intent(this, MainService.class);
- startService(new Intent(this, MainService.class));
- bindService(intent, mMyServiceConnection, Context.BIND_IMPORTANT);
-
-// startService(new Intent(this, MainService.class));
-// bindService(new Intent(AssistantService.this, MainService.class), mMyServiceConnection, Context.BIND_IMPORTANT);
- }
-
- // 主进程与守护进程连接时需要用到此类
- //
- class MyServiceConnection implements ServiceConnection {
- @Override
- public void onServiceConnected(ComponentName name, IBinder service) {
- LogUtils.d(TAG, "onServiceConnected(...)");
- MainService.MyBinder binder = (MainService.MyBinder) service;
- mMainService = binder.getService();
- isBound = true;
- }
-
- @Override
- public void onServiceDisconnected(ComponentName name) {
- LogUtils.d(TAG, "onServiceDisconnected(...)");
- mMainServiceBean = MainServiceBean.loadBean(AssistantService.this, MainServiceBean.class);
- if (mMainServiceBean.isEnable()) {
- wakeupAndBindMain();
- }
- isBound = false;
- mMainService = null;
- }
- }
-
- // 用于返回服务实例的Binder
- public class MyBinder extends Binder {
- AssistantService getService() {
- LogUtils.d(TAG, "AssistantService MyBinder getService()");
- return AssistantService.this;
- }
- }
-}
diff --git a/appbase/src/main/java/cc/winboll/studio/appbase/services/MainService.java b/appbase/src/main/java/cc/winboll/studio/appbase/services/MainService.java
deleted file mode 100644
index f71bdbb7..00000000
--- a/appbase/src/main/java/cc/winboll/studio/appbase/services/MainService.java
+++ /dev/null
@@ -1,317 +0,0 @@
-package cc.winboll.studio.appbase.services;
-
-/**
- * @Author ZhanGSKen
- * @Date 2025/02/13 06:56:41
- * @Describe 拨号主服务
- * 参考:
- * 进程保活-双进程守护的正确姿势
- * https://blog.csdn.net/sinat_35159441/article/details/75267380
- * Android Service之onStartCommand方法研究
- * https://blog.csdn.net/cyp331203/article/details/38920491
- */
-import android.app.Service;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.ServiceConnection;
-import android.os.Binder;
-import android.os.IBinder;
-import cc.winboll.studio.appbase.MyTileService;
-import cc.winboll.studio.appbase.handlers.MainServiceHandler;
-import cc.winboll.studio.appbase.models.MainServiceBean;
-import cc.winboll.studio.appbase.receivers.MainReceiver;
-import cc.winboll.studio.appbase.services.AssistantService;
-import cc.winboll.studio.appbase.threads.MainServiceThread;
-import cc.winboll.studio.appbase.widgets.APPNewsWidget;
-import cc.winboll.studio.libappbase.LogUtils;
-import cc.winboll.studio.libappbase.models.APPModel;
-import cc.winboll.studio.libappbase.models.WinBoLLModel;
-import java.util.ArrayList;
-
-public class MainService extends Service {
-
- public static final String TAG = "MainService";
-
- public static final int MSG_UPDATE_STATUS = 0;
-
- static MainService _mControlCenterService;
-
- volatile boolean isServiceRunning;
-
- MainServiceBean mMainServiceBean;
- MainServiceThread mMainServiceThread;
- MainServiceHandler mMainServiceHandler;
- MyServiceConnection mMyServiceConnection;
- AssistantService mAssistantService;
- boolean isBound = false;
- MainReceiver mMainReceiver;
- ArrayList mAPPModelConnectionList;
-
- @Override
- public IBinder onBind(Intent intent) {
- return new MyBinder();
- }
-
- public MainServiceThread getRemindThread() {
- return mMainServiceThread;
- }
-
- @Override
- public void onCreate() {
- super.onCreate();
- LogUtils.d(TAG, "onCreate()");
- mAPPModelConnectionList = new ArrayList();
-
- _mControlCenterService = MainService.this;
- isServiceRunning = false;
- mMainServiceBean = MainServiceBean.loadBean(this, MainServiceBean.class);
-
- if (mMyServiceConnection == null) {
- mMyServiceConnection = new MyServiceConnection();
- }
- mMainServiceHandler = new MainServiceHandler(this);
-
- // 运行服务内容
- mainService();
- }
-
- @Override
- public int onStartCommand(Intent intent, int flags, int startId) {
- LogUtils.d(TAG, "onStartCommand(...)");
- // 运行服务内容
- mainService();
- return (mMainServiceBean.isEnable()) ? START_STICKY : super.onStartCommand(intent, flags, startId);
- }
-
- // 运行服务内容
- //
- void mainService() {
- LogUtils.d(TAG, "mainService()");
- mMainServiceBean = MainServiceBean.loadBean(this, MainServiceBean.class);
- if (mMainServiceBean.isEnable() && isServiceRunning == false) {
- LogUtils.d(TAG, "mainService() start running");
- isServiceRunning = true;
- // 唤醒守护进程
- wakeupAndBindAssistant();
-
- if (mMainReceiver == null) {
- // 注册广播接收器
- mMainReceiver = new MainReceiver(this);
- mMainReceiver.registerAction(this);
- }
-
- // 启动小部件
- Intent intentTimeWidget = new Intent(this, APPNewsWidget.class);
- intentTimeWidget.setAction(APPNewsWidget.ACTION_RELOAD_REPORT);
- this.sendBroadcast(intentTimeWidget);
-
- startMainServiceThread();
-
- MyTileService.updateServiceIconStatus(this);
-
- LogUtils.i(TAG, "Main Service Is Start.");
- }
- }
-
- // 唤醒和绑定守护进程
- //
- void wakeupAndBindAssistant() {
- LogUtils.d(TAG, "wakeupAndBindAssistant()");
-
- Intent intent = new Intent(this, AssistantService.class);
- startService(intent);
- // 绑定服务的Intent
- bindService(intent, mMyServiceConnection, Context.BIND_IMPORTANT);
- }
-
- // 开启提醒铃声线程
- //
- public void startMainServiceThread() {
- LogUtils.d(TAG, "startMainServiceThread");
- if (mMainServiceThread == null) {
- mMainServiceThread = new MainServiceThread(this, mMainServiceHandler);
- LogUtils.d(TAG, "new MainServiceThread");
- } else {
- if (mMainServiceThread.isExist() == true) {
- mMainServiceThread = new MainServiceThread(this, mMainServiceHandler);
- LogUtils.d(TAG, "renew MainServiceThread");
- } else {
- // 提醒进程正在进行中就更新状态后退出
- LogUtils.d(TAG, "A mMainServiceThread running.");
- return;
- }
- }
- mMainServiceThread.start();
- }
-
- public void stopRemindThread() {
- if (mMainServiceThread != null) {
- mMainServiceThread.setIsExist(true);
- mMainServiceThread = null;
- }
- }
-
- @Override
- public void onDestroy() {
- //LogUtils.d(TAG, "onDestroy");
- mMainServiceBean = MainServiceBean.loadBean(this, MainServiceBean.class);
- if (mMainServiceBean.isEnable() == false) {
- // 设置运行状态
- isServiceRunning = false;// 解除绑定
- if (isBound) {
- unbindService(mMyServiceConnection);
- isBound = false;
- }
- // 停止守护进程
- Intent intent = new Intent(this, AssistantService.class);
- stopService(intent);
- // 停止Receiver
- if (mMainReceiver != null) {
- unregisterReceiver(mMainReceiver);
- mMainReceiver = null;
- }
- // 停止前台通知栏
- stopForeground(true);
- // 停止消息提醒进程
- stopRemindThread();
-
- MyTileService.updateServiceIconStatus(this);
-
- super.onDestroy();
- //LogUtils.d(TAG, "onDestroy done");
- }
- }
-
- public void bindWinBoLLModelConnection(WinBoLLModel bean) {
- LogUtils.d(TAG, "bindAPPModelConnection(...)");
- // 清理旧的绑定链接
- for (int i = mAPPModelConnectionList.size() - 1; i > -1; i--) {
- APPConnection item = mAPPModelConnectionList.get(i);
- if (item.isBindToAPP(bean)) {
- LogUtils.d(TAG, "Bind Servive exist.");
- unbindService(item);
- mAPPModelConnectionList.remove(i);
- }
- }
-
- // 绑定服务
- APPConnection appConnection = new APPConnection();
- Intent intentService = new Intent();
- intentService.setComponent(new ComponentName(bean.getAppPackageName(), bean.getAppMainServiveName()));
- bindService(intentService, appConnection, Context.BIND_IMPORTANT);
- mAPPModelConnectionList.add(appConnection);
-
- Intent intentWidget = new Intent(this, APPNewsWidget.class);
- intentWidget.setAction(APPNewsWidget.ACTION_WAKEUP_SERVICE);
- WinBoLLModel appSOSBean = new WinBoLLModel(bean.getAppPackageName(), bean.getAppMainServiveName());
- intentWidget.putExtra("APPSOSBean", appSOSBean.toString());
- sendBroadcast(intentWidget);
- }
-
- public class APPConnection implements ServiceConnection {
-
- ComponentName mComponentName;
-
- boolean isBindToAPP(WinBoLLModel bean) {
- return mComponentName != null
- && mComponentName.getClassName().equals(bean.getAppMainServiveName())
- && mComponentName.getPackageName().equals(bean.getAppPackageName());
- }
-
- @Override
- public void onServiceConnected(ComponentName name, IBinder service) {
- LogUtils.d(TAG, "onServiceConnected(...)");
- mComponentName = name;
- LogUtils.d(TAG, String.format("onServiceConnected : \ngetClassName %s\ngetPackageName %s", name.getClassName(), name.getPackageName()));
- }
-
- @Override
- public void onServiceDisconnected(ComponentName name) {
- LogUtils.d(TAG, "onServiceDisconnected(...)");
- LogUtils.d(TAG, String.format("onServiceDisconnected : \ngetClassName %s\ngetPackageName %s", name.getClassName(), name.getPackageName()));
-
- // 尝试无参数启动一下服务
- String appPackage = mComponentName.getPackageName();
- LogUtils.d(TAG, String.format("appPackage %s", appPackage));
- String appMainServiceClassName = mComponentName.getClassName();
- LogUtils.d(TAG, String.format("appMainServiceClassName %s", appMainServiceClassName));
-
- Intent intentService = new Intent();
- intentService.setComponent(new ComponentName(appPackage, appMainServiceClassName));
- startService(intentService);
- }
-
- }
-
- // 主进程与守护进程连接时需要用到此类
- //
- private class MyServiceConnection implements ServiceConnection {
- @Override
- public void onServiceConnected(ComponentName name, IBinder service) {
- LogUtils.d(TAG, "onServiceConnected(...)");
- AssistantService.MyBinder binder = (AssistantService.MyBinder) service;
- mAssistantService = binder.getService();
- isBound = true;
- }
-
- @Override
- public void onServiceDisconnected(ComponentName name) {
- LogUtils.d(TAG, "onServiceDisconnected(...)");
-
- if (mMainServiceBean.isEnable()) {
- // 唤醒守护进程
- wakeupAndBindAssistant();
- }
- isBound = false;
- mAssistantService = null;
- }
-
- }
-
-
- // 用于返回服务实例的Binder
- public class MyBinder extends Binder {
- MainService getService() {
- LogUtils.d(TAG, "MainService MyBinder getService()");
- return MainService.this;
- }
- }
-
-// //
-// // 启动服务
-// //
-// public static void startControlCenterService(Context context) {
-// Intent intent = new Intent(context, MainService.class);
-// context.startForegroundService(intent);
-// }
-//
-// //
-// // 停止服务
-// //
-// public static void stopControlCenterService(Context context) {
-// Intent intent = new Intent(context, MainService.class);
-// context.stopService(intent);
-// }
-
- public void appenMessage(String message) {
- LogUtils.d(TAG, String.format("Message : %s", message));
- }
-
- public static void stopMainService(Context context) {
- LogUtils.d(TAG, "stopMainService");
- MainServiceBean bean = new MainServiceBean();
- bean.setIsEnable(false);
- MainServiceBean.saveBean(context, bean);
- context.stopService(new Intent(context, MainService.class));
- }
-
- public static void startMainService(Context context) {
- LogUtils.d(TAG, "startMainService");
- MainServiceBean bean = new MainServiceBean();
- bean.setIsEnable(true);
- MainServiceBean.saveBean(context, bean);
- context.startService(new Intent(context, MainService.class));
- }
-}
-
diff --git a/appbase/src/main/java/cc/winboll/studio/appbase/services/TestDemoBindService.java b/appbase/src/main/java/cc/winboll/studio/appbase/services/TestDemoBindService.java
deleted file mode 100644
index 7136d3ce..00000000
--- a/appbase/src/main/java/cc/winboll/studio/appbase/services/TestDemoBindService.java
+++ /dev/null
@@ -1,179 +0,0 @@
-package cc.winboll.studio.appbase.services;
-
-/**
- * @Author ZhanGSKen
- * @Date 2025/03/07 12:45:49
- * @Describe 启动时申请绑定到APPBase主服务的服务示例
- */
-import android.app.Service;
-import android.content.Context;
-import android.content.Intent;
-import android.os.Binder;
-import android.os.IBinder;
-import cc.winboll.studio.appbase.App;
-import cc.winboll.studio.appbase.models.TestDemoBindServiceBean;
-import cc.winboll.studio.appbase.services.TestDemoBindService;
-import cc.winboll.studio.libappbase.LogUtils;
-import cc.winboll.studio.libappbase.sos.SOS;
-import cc.winboll.studio.libappbase.winboll.WinBoLL;
-
-public class TestDemoBindService extends Service {
-
- public static final String TAG = "TestDemoBindService";
-
- public static final String ACTION_ENABLE = TestDemoBindService.class.getName() + ".ACTION_ENABLE";
- public static final String ACTION_DISABLE = TestDemoBindService.class.getName() + ".ACTION_DISABLE";
-
- volatile static TestThread _TestThread;
-
- volatile static boolean _IsRunning;
-
- public synchronized static void setIsRunning(boolean isRunning) {
- _IsRunning = isRunning;
- }
-
- public static boolean isRunning() {
- return _IsRunning;
- }
-
- @Override
- public IBinder onBind(Intent intent) {
- return new MyBinder();
- }
-
- public class MyBinder extends Binder {
- public TestDemoBindService getService() {
- return TestDemoBindService.this;
- }
- }
-
- @Override
- public void onCreate() {
- super.onCreate();
- LogUtils.d(TAG, "onCreate()");
-
- run();
- }
-
- @Override
- public int onStartCommand(Intent intent, int flags, int startId) {
- LogUtils.d(TAG, "onStartCommand(...)");
- TestDemoBindServiceBean bean = TestDemoBindServiceBean.loadBean(this, TestDemoBindServiceBean.class);
- if (bean == null) {
- bean = new TestDemoBindServiceBean();
- }
-
- if (intent.getAction() != null) {
- if (intent.getAction().equals(ACTION_ENABLE)) {
- bean.setIsEnable(true);
- LogUtils.d(TAG, "setIsEnable(true);");
- TestDemoBindServiceBean.saveBean(this, bean);
- } else if (intent.getAction().equals(ACTION_DISABLE)) {
- bean.setIsEnable(false);
- LogUtils.d(TAG, "setIsEnable(false);");
- TestDemoBindServiceBean.saveBean(this, bean);
- }
- }
-
- run();
-
- return (bean.isEnable()) ? START_STICKY : super.onStartCommand(intent, flags, startId);
- //return super.onStartCommand(intent, flags, startId);
- }
-
- void run() {
- LogUtils.d(TAG, "run()");
- TestDemoBindServiceBean bean = TestDemoBindServiceBean.loadBean(this, TestDemoBindServiceBean.class);
- if (bean == null) {
- bean = new TestDemoBindServiceBean();
- TestDemoBindServiceBean.saveBean(this, bean);
- }
- if (bean.isEnable()) {
- LogUtils.d(TAG, "run() bean.isEnable()");
- TestThread.getInstance(this).start();
- LogUtils.d(TAG, "_TestThread.start()");
- }
- }
-
-
- @Override
- public void onDestroy() {
- super.onDestroy();
- LogUtils.d(TAG, "onDestroy()");
- TestDemoBindServiceBean bean = TestDemoBindServiceBean.loadBean(this, TestDemoBindServiceBean.class);
- if (bean == null) {
- bean = new TestDemoBindServiceBean();
- }
-
- TestThread.getInstance(this).setIsExit(true);
-
- // 预防 APPBase 应用重启绑定失效。
- // 所以退出时检查本服务是否配置启用,如果启用就发送一个 SOS 信号。
- // 这样 APPBase 就会用组件方式启动本服务。
- if (bean.isEnable()) {
- if (App.isDebuging()) {
- SOS.sosToAppBaseBeta(this, TestDemoBindService.class.getName());
- } else {
- SOS.sosToAppBase(this, TestDemoBindService.class.getName());
- }
- }
-
- _IsRunning = false;
- }
-
- static class TestThread extends Thread {
-
- volatile static TestThread _TestThread;
- Context mContext;
- volatile boolean isStarted = false;
- volatile boolean isExit = false;
-
- TestThread(Context context) {
- super();
- mContext = context;
- }
-
- public static synchronized TestThread getInstance(Context context) {
- if (_TestThread != null) {
- _TestThread.setIsExit(true);
- }
- _TestThread = new TestThread(context);
-
- return _TestThread;
- }
-
- public synchronized void setIsExit(boolean isExit) {
- this.isExit = isExit;
- }
-
- public boolean isExit() {
- return isExit;
- }
-
- @Override
- public void run() {
- if (isStarted == false) {
- isStarted = true;
- super.run();
- LogUtils.d(TAG, "run() start");
- if (App.isDebuging()) {
- WinBoLL.bindToAPPBaseBeta(mContext, TestDemoBindService.class.getName());
- } else {
- WinBoLL.bindToAPPBase(mContext, TestDemoBindService.class.getName());
- }
-
- while (!isExit()) {
- LogUtils.d(TAG, "run()");
-
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
- }
- }
-
- LogUtils.d(TAG, "run() exit");
- }
- }
- }
-}
diff --git a/appbase/src/main/java/cc/winboll/studio/appbase/services/TestDemoService.java b/appbase/src/main/java/cc/winboll/studio/appbase/services/TestDemoService.java
deleted file mode 100644
index ee7de32d..00000000
--- a/appbase/src/main/java/cc/winboll/studio/appbase/services/TestDemoService.java
+++ /dev/null
@@ -1,155 +0,0 @@
-package cc.winboll.studio.appbase.services;
-
-/**
- * @Author ZhanGSKen
- * @Date 2025/03/07 12:39:24
- * @Describe 普通服务示例
- */
-import android.app.Service;
-import android.content.Context;
-import android.content.Intent;
-import android.os.Binder;
-import android.os.IBinder;
-import cc.winboll.studio.appbase.models.TestDemoServiceBean;
-import cc.winboll.studio.libappbase.LogUtils;
-
-public class TestDemoService extends Service {
-
- public static final String TAG = "TestDemoService";
-
- public static final String ACTION_ENABLE = TestDemoService.class.getName() + ".ACTION_ENABLE";
- public static final String ACTION_DISABLE = TestDemoService.class.getName() + ".ACTION_DISABLE";
-
- volatile static TestThread _TestThread;
-
- volatile static boolean _IsRunning;
-
- public synchronized static void setIsRunning(boolean isRunning) {
- _IsRunning = isRunning;
- }
-
- public static boolean isRunning() {
- return _IsRunning;
- }
-
- @Override
- public IBinder onBind(Intent intent) {
- return new MyBinder();
- }
-
- public class MyBinder extends Binder {
- public TestDemoService getService() {
- return TestDemoService.this;
- }
- }
-
- @Override
- public void onCreate() {
- super.onCreate();
- LogUtils.d(TAG, "onCreate()");
-
-
- run();
- }
-
- @Override
- public int onStartCommand(Intent intent, int flags, int startId) {
- LogUtils.d(TAG, "onStartCommand(...)");
- TestDemoServiceBean bean = TestDemoServiceBean.loadBean(this, TestDemoServiceBean.class);
- if (bean == null) {
- bean = new TestDemoServiceBean();
- }
-
- if (intent.getAction() != null) {
- if (intent.getAction().equals(ACTION_ENABLE)) {
- bean.setIsEnable(true);
- LogUtils.d(TAG, "setIsEnable(true);");
- TestDemoServiceBean.saveBean(this, bean);
- } else if (intent.getAction().equals(ACTION_DISABLE)) {
- bean.setIsEnable(false);
- LogUtils.d(TAG, "setIsEnable(false);");
- TestDemoServiceBean.saveBean(this, bean);
- }
- }
-
- run();
-
- return (bean.isEnable()) ? START_STICKY : super.onStartCommand(intent, flags, startId);
- //return super.onStartCommand(intent, flags, startId);
- }
-
- void run() {
- LogUtils.d(TAG, "run()");
- TestDemoServiceBean bean = TestDemoServiceBean.loadBean(this, TestDemoServiceBean.class);
- if (bean == null) {
- bean = new TestDemoServiceBean();
- TestDemoServiceBean.saveBean(this, bean);
- }
- if (bean.isEnable()) {
- LogUtils.d(TAG, "run() bean.isEnable()");
- TestThread.getInstance(this).start();
- LogUtils.d(TAG, "_TestThread.start()");
- }
- }
-
-
- @Override
- public void onDestroy() {
- super.onDestroy();
- LogUtils.d(TAG, "onDestroy()");
- TestThread.getInstance(this).setIsExit(true);
-
- _IsRunning = false;
- }
-
- static class TestThread extends Thread {
-
- volatile static TestThread _TestThread;
- Context mContext;
- volatile boolean isStarted = false;
- volatile boolean isExit = false;
-
- TestThread(Context context) {
- super();
- mContext = context;
- }
-
- public static synchronized TestThread getInstance(Context context) {
- if (_TestThread != null) {
- _TestThread.setIsExit(true);
- }
- _TestThread = new TestThread(context);
-
- return _TestThread;
- }
-
- public synchronized void setIsExit(boolean isExit) {
- this.isExit = isExit;
- }
-
- public boolean isExit() {
- return isExit;
- }
-
- @Override
- public void run() {
- if (isStarted == false) {
- isStarted = true;
- super.run();
- LogUtils.d(TAG, "run() start");
-
- while (!isExit()) {
- LogUtils.d(TAG, "run()");
-
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
- }
- }
-
- LogUtils.d(TAG, "run() exit");
- }
- }
- }
-}
diff --git a/appbase/src/main/java/cc/winboll/studio/appbase/threads/MainServiceThread.java b/appbase/src/main/java/cc/winboll/studio/appbase/threads/MainServiceThread.java
deleted file mode 100644
index c922e84a..00000000
--- a/appbase/src/main/java/cc/winboll/studio/appbase/threads/MainServiceThread.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package cc.winboll.studio.appbase.threads;
-
-/**
- * @Author ZhanGSKen
- * @Date 2025/02/14 03:46:44
- */
-import android.content.Context;
-import cc.winboll.studio.appbase.handlers.MainServiceHandler;
-import cc.winboll.studio.libappbase.LogUtils;
-import java.lang.ref.WeakReference;
-
-public class MainServiceThread extends Thread {
-
- public static final String TAG = "MainServiceThread";
-
- Context mContext;
-
- // 控制线程是否退出的标志
- volatile boolean isExist = false;
-
- // 服务Handler, 用于线程发送消息使用
- WeakReference mwrMainServiceHandler;
-
- public void setIsExist(boolean isExist) {
- this.isExist = isExist;
- }
-
- public boolean isExist() {
- return isExist;
- }
-
- public MainServiceThread(Context context, MainServiceHandler handler) {
- mContext = context;
- mwrMainServiceHandler = new WeakReference(handler);
- }
-
- @Override
- public void run() {
- LogUtils.d(TAG, "run()");
-
- while (!isExist()) {
- //ToastUtils.show("run()");
- //LogUtils.d(TAG, "run()");
-
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
- }
- }
- LogUtils.d(TAG, "run() exit.");
- }
-
-}
diff --git a/appbase/src/main/java/cc/winboll/studio/appbase/widgets/APPNewsWidget.java b/appbase/src/main/java/cc/winboll/studio/appbase/widgets/APPNewsWidget.java
deleted file mode 100644
index 71a5caa1..00000000
--- a/appbase/src/main/java/cc/winboll/studio/appbase/widgets/APPNewsWidget.java
+++ /dev/null
@@ -1,187 +0,0 @@
-package cc.winboll.studio.appbase.widgets;
-/**
- * @Author ZhanGSKen
- * @Date 2025/02/15 14:41:25
- * @Describe TimeWidget
- */
-import android.app.PendingIntent;
-import android.appwidget.AppWidgetManager;
-import android.appwidget.AppWidgetProvider;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.widget.RemoteViews;
-import cc.winboll.studio.appbase.R;
-import cc.winboll.studio.appbase.receivers.APPNewsWidgetClickListener;
-import cc.winboll.studio.libappbase.AppUtils;
-import cc.winboll.studio.libappbase.LogUtils;
-import cc.winboll.studio.libappbase.models.APPModel;
-import cc.winboll.studio.libappbase.models.WinBoLLNewsBean;
-import cc.winboll.studio.libappbase.winboll.WinBoLL;
-import java.io.IOException;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import cc.winboll.studio.libappbase.models.WinBoLLModel;
-
-public class APPNewsWidget extends AppWidgetProvider {
-
- public static final String TAG = "APPNewsWidget";
-
- public static final String ACTION_WAKEUP_SERVICE = APPNewsWidget.class.getName() + ".ACTION_WAKEUP_SERVICE";
- public static final String ACTION_RELOAD_REPORT = APPNewsWidget.class.getName() + ".ACTION_RELOAD_REPORT";
-
-
- volatile static ArrayList _WinBoLLNewsBeanList;
- final static int _MAX_PAGES = 10;
- final static int _OnePageLinesCount = 5;
- volatile static int _CurrentPageIndex = 0;
-
- @Override
- public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
- initWinBoLLNewsBeanList(context);
- for (int appWidgetId : appWidgetIds) {
- updateAppWidget(context, appWidgetManager, appWidgetId);
- }
- }
-
- @Override
- public void onReceive(Context context, Intent intent) {
- super.onReceive(context, intent);
- initWinBoLLNewsBeanList(context);
- if (intent.getAction().equals(ACTION_RELOAD_REPORT)) {
- LogUtils.d(TAG, "ACTION_RELOAD_REPORT");
- AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
- int[] appWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(context, APPNewsWidget.class));
- for (int appWidgetId : appWidgetIds) {
- updateAppWidget(context, appWidgetManager, appWidgetId);
- }
- }else if (intent.getAction().equals(ACTION_WAKEUP_SERVICE)) {
- LogUtils.d(TAG, "ACTION_WAKEUP_SERVICE");
- String szWinBoLLModel = intent.getStringExtra(WinBoLL.EXTRA_WINBOLLMODEL);
- LogUtils.d(TAG, String.format("szWinBoLLModel %s", szWinBoLLModel));
- if (szWinBoLLModel != null && !szWinBoLLModel.equals("")) {
- try {
- WinBoLLModel bean = WinBoLLModel.parseStringToBean(szWinBoLLModel, WinBoLLModel.class);
- if (bean != null) {
- String szAppPackageName = bean.getAppPackageName();
- LogUtils.d(TAG, String.format("szAppPackageName %s", szAppPackageName));
- String szAppMainServiveName = bean.getAppMainServiveName();
- LogUtils.d(TAG, String.format("szAppMainServiveName %s", szAppMainServiveName));
-
-
- String appName = AppUtils.getAppNameByPackageName(context, szAppPackageName);
- LogUtils.d(TAG, String.format("appName %s", appName));
- WinBoLLNewsBean winBollNewsBean = new WinBoLLNewsBean(appName);
- SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
- String currentTime = sdf.format(new Date());
- StringBuilder sbLine = new StringBuilder();
- sbLine.append("[");
- sbLine.append(currentTime);
- sbLine.append("] Wake up ");
- sbLine.append(appName);
- winBollNewsBean.setMessage(sbLine.toString());
-
- addWinBoLLNewsBean(context, winBollNewsBean);
-
- AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
- int[] appWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(context, APPNewsWidget.class));
- for (int appWidgetId : appWidgetIds) {
- updateAppWidget(context, appWidgetManager, appWidgetId);
- }
- }
- } catch (IOException e) {
- LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
- }
- }
- }
- }
-
- //
- // 加入新报告信息
- //
- public synchronized static void addWinBoLLNewsBean(Context context, WinBoLLNewsBean bean) {
- initWinBoLLNewsBeanList(context);
- _WinBoLLNewsBeanList.add(0, bean);
- // 控制记录总数
- while (_WinBoLLNewsBeanList.size() > _MAX_PAGES * _OnePageLinesCount) {
- _WinBoLLNewsBeanList.remove(_WinBoLLNewsBeanList.size() - 1);
- }
- WinBoLLNewsBean.saveBeanList(context, _WinBoLLNewsBeanList, WinBoLLNewsBean.class);
- }
-
- synchronized static void initWinBoLLNewsBeanList(Context context) {
- if (_WinBoLLNewsBeanList == null) {
- _WinBoLLNewsBeanList = new ArrayList();
- WinBoLLNewsBean.loadBeanList(context, _WinBoLLNewsBeanList, WinBoLLNewsBean.class);
- }
- if (_WinBoLLNewsBeanList == null) {
- _WinBoLLNewsBeanList = new ArrayList();
- WinBoLLNewsBean.saveBeanList(context, _WinBoLLNewsBeanList, WinBoLLNewsBean.class);
- }
- }
-
- private void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) {
- LogUtils.d(TAG, "updateAppWidget(...)");
-
- RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_news);
- //设置按钮点击事件
- Intent intentPre = new Intent(context, APPNewsWidgetClickListener.class);
- intentPre.setAction(APPNewsWidgetClickListener.ACTION_PRE);
- PendingIntent pendingIntentPre = PendingIntent.getBroadcast(context, 0, intentPre, PendingIntent.FLAG_UPDATE_CURRENT);
- views.setOnClickPendingIntent(R.id.widget_button_pre, pendingIntentPre);
- Intent intentNext = new Intent(context, APPNewsWidgetClickListener.class);
- intentNext.setAction(APPNewsWidgetClickListener.ACTION_NEXT);
- PendingIntent pendingIntentNext = PendingIntent.getBroadcast(context, 0, intentNext, PendingIntent.FLAG_UPDATE_CURRENT);
- views.setOnClickPendingIntent(R.id.widget_button_next, pendingIntentNext);
-
- views.setTextViewText(R.id.tv_msg, getPageInfo());
- views.setTextViewText(R.id.tv_news, getMessage());
- appWidgetManager.updateAppWidget(appWidgetId, views);
- }
-
- public static String getMessage() {
- ArrayList msgTemp = new ArrayList();
- if (_WinBoLLNewsBeanList != null) {
- int start = _OnePageLinesCount * _CurrentPageIndex;
- start = _WinBoLLNewsBeanList.size() > start ? start : _WinBoLLNewsBeanList.size() - 1;
- for (int i = start, j = 0; i < _WinBoLLNewsBeanList.size() && j < _OnePageLinesCount && start > -1; i++, j++) {
- msgTemp.add(_WinBoLLNewsBeanList.get(i).getMessage());
- }
- String message = String.join("\n", msgTemp);
- return message;
- }
- return "";
- }
-
- public static void prePage(Context context) {
- if (_WinBoLLNewsBeanList != null) {
- if (_CurrentPageIndex > 0) {
- _CurrentPageIndex = _CurrentPageIndex - 1;
- }
- Intent intentWidget = new Intent(context, APPNewsWidget.class);
- intentWidget.setAction(APPNewsWidget.ACTION_RELOAD_REPORT);
- context.sendBroadcast(intentWidget);
- }
- }
-
- public static void nextPage(Context context) {
- if (_WinBoLLNewsBeanList != null) {
- if ((_CurrentPageIndex + 1) * _OnePageLinesCount < _WinBoLLNewsBeanList.size()) {
- _CurrentPageIndex = _CurrentPageIndex + 1;
- }
- Intent intentWidget = new Intent(context, APPNewsWidget.class);
- intentWidget.setAction(APPNewsWidget.ACTION_RELOAD_REPORT);
- context.sendBroadcast(intentWidget);
- }
- }
-
- String getPageInfo() {
- if (_WinBoLLNewsBeanList == null) {
- return "0/0";
- }
- int leftCount = _WinBoLLNewsBeanList.size() % _OnePageLinesCount;
- int currentPageCount = _WinBoLLNewsBeanList.size() / _OnePageLinesCount + (leftCount == 0 ?0: 1);
- return String.format("%d/%d", _CurrentPageIndex + 1, currentPageCount);
- }
-}
diff --git a/appbase/src/main/res/drawable/btn_light_blue.xml b/appbase/src/main/res/drawable/btn_light_blue.xml
new file mode 100644
index 00000000..58415fd4
--- /dev/null
+++ b/appbase/src/main/res/drawable/btn_light_blue.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
diff --git a/appbase/src/main/res/drawable/ic_cloud.xml b/appbase/src/main/res/drawable/ic_cloud.xml
deleted file mode 100644
index 62b99afd..00000000
--- a/appbase/src/main/res/drawable/ic_cloud.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/appbase/src/main/res/drawable/ic_cloud_outline.xml b/appbase/src/main/res/drawable/ic_cloud_outline.xml
deleted file mode 100644
index fb06b79a..00000000
--- a/appbase/src/main/res/drawable/ic_cloud_outline.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/appbase/src/main/res/layout/activity_main.xml b/appbase/src/main/res/layout/activity_main.xml
index 135b8451..9552e3ad 100644
--- a/appbase/src/main/res/layout/activity_main.xml
+++ b/appbase/src/main/res/layout/activity_main.xml
@@ -3,213 +3,45 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
- android:layout_height="match_parent">
+ android:layout_height="match_parent"
+ android:padding="16dp">
-
+ android:layout_weight="1"
+ android:orientation="vertical"
+ android:gravity="center_vertical"
+ android:spacing="12dp">
-
+ android:text="应用崩溃测试"
+ android:textSize="16sp"
+ android:textColor="@android:color/white"
+ android:background="#81C7F5"
+ android:paddingVertical="12dp"
+ android:layout_marginHorizontal="24dp"
+ android:onClick="onCrashTest"/>
-
+
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/appbase/src/main/res/layout/activity_new.xml b/appbase/src/main/res/layout/activity_new.xml
deleted file mode 100644
index b3dd223c..00000000
--- a/appbase/src/main/res/layout/activity_new.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/appbase/src/main/res/layout/activity_new2.xml b/appbase/src/main/res/layout/activity_new2.xml
deleted file mode 100644
index 697e6136..00000000
--- a/appbase/src/main/res/layout/activity_new2.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/appbase/src/main/res/layout/widget_news.xml b/appbase/src/main/res/layout/widget_news.xml
deleted file mode 100644
index e85e3d2e..00000000
--- a/appbase/src/main/res/layout/widget_news.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/appbase/src/main/res/xml/network_security_config.xml b/appbase/src/main/res/xml/network_security_config.xml
deleted file mode 100644
index ef5fd332..00000000
--- a/appbase/src/main/res/xml/network_security_config.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
- winboll.cc
-
-
-
-
- 10.8.0.250
-
-
diff --git a/appbase/src/main/res/xml/widget_provider_info_sos.xml b/appbase/src/main/res/xml/widget_provider_info_sos.xml
deleted file mode 100644
index e03bd34e..00000000
--- a/appbase/src/main/res/xml/widget_provider_info_sos.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
diff --git a/libappbase/build.properties b/libappbase/build.properties
index 7928c981..5cf40492 100644
--- a/libappbase/build.properties
+++ b/libappbase/build.properties
@@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle
-#Mon Sep 15 18:05:08 HKT 2025
-stageCount=6
+#Sun Sep 21 16:44:01 GMT 2025
+stageCount=0
libraryProject=libappbase
-baseVersion=15.9
-publishVersion=15.9.5
-buildCount=46
-baseBetaVersion=15.9.6
+baseVersion=15.10
+publishVersion=15.10.0
+buildCount=6
+baseBetaVersion=15.10.1
diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/models/APPModel.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/APPModel.java
similarity index 97%
rename from libappbase/src/main/java/cc/winboll/studio/libappbase/models/APPModel.java
rename to libappbase/src/main/java/cc/winboll/studio/libappbase/APPModel.java
index a26f8ed7..8d934696 100644
--- a/libappbase/src/main/java/cc/winboll/studio/libappbase/models/APPModel.java
+++ b/libappbase/src/main/java/cc/winboll/studio/libappbase/APPModel.java
@@ -1,4 +1,4 @@
-package cc.winboll.studio.libappbase.models;
+package cc.winboll.studio.libappbase;
/**
* @Author ZhanGSKen
diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/AppUtils.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/AppUtils.java
deleted file mode 100644
index 1d047568..00000000
--- a/libappbase/src/main/java/cc/winboll/studio/libappbase/AppUtils.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package cc.winboll.studio.libappbase;
-
-/**
- * @Author ZhanGSKen
- * @Date 2025/02/15 20:05:03
- * @Describe AppUtils
- */
-import android.content.Context;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageManager;
-import android.content.pm.PackageManager.NameNotFoundException;
-
-public class AppUtils {
-
- public static final String TAG = "AppUtils";
-
- public static String getAppNameByPackageName(Context context, String packageName) {
- PackageManager packageManager = context.getPackageManager();
- try {
- ApplicationInfo applicationInfo = packageManager.getApplicationInfo(packageName, 0);
- return (String) packageManager.getApplicationLabel(applicationInfo);
- } catch (NameNotFoundException e) {
- LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
- return "";
- }
- }
-}
-
diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/GlobalApplication.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/GlobalApplication.java
index 616139e0..2500de20 100644
--- a/libappbase/src/main/java/cc/winboll/studio/libappbase/GlobalApplication.java
+++ b/libappbase/src/main/java/cc/winboll/studio/libappbase/GlobalApplication.java
@@ -10,88 +10,53 @@ import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import cc.winboll.studio.libappbase.GlobalApplication;
-import cc.winboll.studio.libappbase.models.APPModel;
-import cc.winboll.studio.libappbase.utils.ToastUtils;
-import cc.winboll.studio.libappbase.winboll.MyActivityLifecycleCallbacks;
-import cc.winboll.studio.libappbase.winboll.WinBoLLActivityManager;
public class GlobalApplication extends Application {
public static final String TAG = "GlobalApplication";
-
- volatile static GlobalApplication _GlobalApplication;
- // 是否处于调试状态
+
+ // 应用是否处于调试状态
volatile static boolean isDebuging = false;
- MyActivityLifecycleCallbacks mMyActivityLifecycleCallbacks;
-
+
public static void setIsDebuging(boolean isDebuging) {
GlobalApplication.isDebuging = isDebuging;
}
- public static void saveDebugStatus() {
- if (_GlobalApplication != null) {
- APPModel.saveBeanToFile(getAPPModelFilePath(), new APPModel(GlobalApplication.isDebuging));
- }
+ public static void saveDebugStatus(GlobalApplication application) {
+ APPModel.saveBeanToFile(application.getAPPModelFilePath(application), new APPModel(GlobalApplication.isDebuging));
}
-
- public static GlobalApplication getInstance() {
- return _GlobalApplication;
- }
-
- static String getAPPModelFilePath() {
- return _GlobalApplication.getDataDir().getPath() + "/APPModel.json";
+
+ static String getAPPModelFilePath(GlobalApplication application) {
+ return application.getDataDir().getPath() + "/APPModel.json";
}
public static boolean isDebuging() {
return isDebuging;
}
- public static WinBoLLActivityManager getWinBoLLActivityManager() {
- return WinBoLLActivityManager.getInstance();
- }
-
@Override
public void onCreate() {
super.onCreate();
- // 保存初始实例
- _GlobalApplication = this;
-
+
setIsDebuging(true);
// 添加日志模块
LogUtils.init(this);
- //LogUtils.setLogLevel(LogUtils.LOG_LEVEL.Debug);
- //LogUtils.setTAGListEnable(GlobalApplication.TAG, true);
- //LogUtils.setALlTAGListEnable(true);
- //LogUtils.d(TAG, "LogUtils init");
// 设置应用异常处理窗口
CrashHandler.init(this);
// 初始化 Toast 框架
ToastUtils.init(this);
// 应用保存的调试标志
- APPModel appModel = APPModel.loadBeanFromFile(getAPPModelFilePath(), APPModel.class);
+ APPModel appModel = APPModel.loadBeanFromFile(getAPPModelFilePath(this), APPModel.class);
if (appModel == null) {
setIsDebuging(false);
- saveDebugStatus();
+ saveDebugStatus(this);
} else {
setIsDebuging(appModel.isDebuging());
}
-
- getWinBoLLActivityManager().setWinBoLLUI_TYPE(WinBoLLActivityManager.WinBoLLUI_TYPE.Service);
- // 注册窗口回调监听
- mMyActivityLifecycleCallbacks = new MyActivityLifecycleCallbacks();
- registerActivityLifecycleCallbacks(mMyActivityLifecycleCallbacks);
}
-
-
- @Override
- public void onTerminate() {
- super.onTerminate();
- // 注销回调(非必须,但建议释放资源)
- unregisterActivityLifecycleCallbacks(mMyActivityLifecycleCallbacks);
- }
-
- public static String getAppName(Context context) {
+
+ public static String getAppName(Context context) {
PackageManager packageManager = context.getPackageManager();
try {
ApplicationInfo applicationInfo = packageManager.getApplicationInfo(
@@ -102,27 +67,4 @@ public class GlobalApplication extends Application {
}
return null;
}
-//
-// @Override
-// public void helpISOSService(Intent intent) {
-// String szServiceName = intent.getStringExtra(EXTRA_SERVICE);
-// String szPackageName = intent.getStringExtra(EXTRA_PACKAGE);
-// if (szServiceName != null && !szServiceName.equals("")
-// && szPackageName != null && !szPackageName.equals("")) {
-// LogUtils.d(TAG, "szPackageName " + szPackageName);
-// LogUtils.d(TAG, "szServiceName " + szServiceName);
-//
-// // 目标服务的包名和类名
-// //String packageName = this.getPackageName();
-// //String serviceClassName = SimpleOperateSignalCenterService.class.getName();
-//
-// // 构建Intent
-// Intent intentService = new Intent();
-// intentService.setComponent(new ComponentName(szPackageName, szServiceName));
-// intentService.putExtra(ISOSService.EXTRA_ENABLE, true);
-// startService(intentService);
-// LogUtils.d(TAG, "startService(intentService)");
-// }
-// LogUtils.d(TAG, "helpISOSService");
-// }
}
diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/views/HorizontalListView.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/HorizontalListView.java
similarity index 98%
rename from libappbase/src/main/java/cc/winboll/studio/libappbase/views/HorizontalListView.java
rename to libappbase/src/main/java/cc/winboll/studio/libappbase/HorizontalListView.java
index ce7c8ebb..bcd5d1f3 100644
--- a/libappbase/src/main/java/cc/winboll/studio/libappbase/views/HorizontalListView.java
+++ b/libappbase/src/main/java/cc/winboll/studio/libappbase/HorizontalListView.java
@@ -1,4 +1,4 @@
-package cc.winboll.studio.libappbase.views;
+package cc.winboll.studio.libappbase;
/**
* @Author ZhanGSKen
diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/winboll/LogActivity.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/LogActivity.java
similarity index 65%
rename from libappbase/src/main/java/cc/winboll/studio/libappbase/winboll/LogActivity.java
rename to libappbase/src/main/java/cc/winboll/studio/libappbase/LogActivity.java
index 623e73ee..7fde38d5 100644
--- a/libappbase/src/main/java/cc/winboll/studio/libappbase/winboll/LogActivity.java
+++ b/libappbase/src/main/java/cc/winboll/studio/libappbase/LogActivity.java
@@ -1,4 +1,4 @@
-package cc.winboll.studio.libappbase.winboll;
+package cc.winboll.studio.libappbase;
/**
* @Author ZhanGSKen
@@ -6,29 +6,16 @@ package cc.winboll.studio.libappbase.winboll;
* @Describe 应用日志窗口
*/
import android.app.Activity;
-import android.os.Build;
import android.os.Bundle;
-import android.view.WindowManager;
import cc.winboll.studio.libappbase.LogView;
import cc.winboll.studio.libappbase.R;
-import cc.winboll.studio.libappbase.utils.ToastUtils;
-public class LogActivity extends Activity implements IWinBoLLActivity {
+public class LogActivity extends Activity {
public static final String TAG = "LogActivity";
LogView mLogView;
- @Override
- public Activity getActivity() {
- return this;
- }
-
- @Override
- public String getTag() {
- return TAG;
- }
-
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/LogView.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/LogView.java
index 5a104ce0..61dd87b2 100644
--- a/libappbase/src/main/java/cc/winboll/studio/libappbase/LogView.java
+++ b/libappbase/src/main/java/cc/winboll/studio/libappbase/LogView.java
@@ -28,7 +28,6 @@ import android.widget.Spinner;
import android.widget.TextView;
import cc.winboll.studio.libappbase.LogUtils;
import cc.winboll.studio.libappbase.R;
-import cc.winboll.studio.libappbase.views.HorizontalListView;
import java.text.Collator;
import java.util.ArrayList;
import java.util.Collections;
diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/utils/ToastUtils.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/ToastUtils.java
similarity index 94%
rename from libappbase/src/main/java/cc/winboll/studio/libappbase/utils/ToastUtils.java
rename to libappbase/src/main/java/cc/winboll/studio/libappbase/ToastUtils.java
index 05be5005..a22f2639 100644
--- a/libappbase/src/main/java/cc/winboll/studio/libappbase/utils/ToastUtils.java
+++ b/libappbase/src/main/java/cc/winboll/studio/libappbase/ToastUtils.java
@@ -1,11 +1,12 @@
-package cc.winboll.studio.libappbase.utils;
-import android.content.Context;
-import android.widget.Toast;
+package cc.winboll.studio.libappbase;
/**
* @Author ZhanGSKen
* @Date 2025/03/12 12:02:31
*/
+import android.content.Context;
+import android.widget.Toast;
+
public class ToastUtils {
public static final String TAG = "ToastUtils";
diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/activities/LogonActivity.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/activities/LogonActivity.java
deleted file mode 100644
index 029b1eee..00000000
--- a/libappbase/src/main/java/cc/winboll/studio/libappbase/activities/LogonActivity.java
+++ /dev/null
@@ -1,150 +0,0 @@
-package cc.winboll.studio.libappbase.activities;
-
-import android.app.Activity;
-import android.os.Bundle;
-import android.view.View;
-import android.widget.RadioButton;
-import cc.winboll.studio.libappbase.BuildConfig;
-import cc.winboll.studio.libappbase.LogUtils;
-import cc.winboll.studio.libappbase.LogView;
-import cc.winboll.studio.libappbase.R;
-import cc.winboll.studio.libappbase.models.UserInfoModel;
-import cc.winboll.studio.libappbase.utils.RSAUtils;
-import cc.winboll.studio.libappbase.utils.YunUtils;
-import cc.winboll.studio.libappbase.winboll.IWinBoLLActivity;
-import java.security.KeyPair;
-import java.security.PrivateKey;
-import java.security.PublicKey;
-
-/**
- * @Author ZhanGSKen
- * @Date 2025/06/04 13:29
- * @Describe 用户登录框
- */
-public class LogonActivity extends Activity implements IWinBoLLActivity {
-
- public static final String TAG = "LogonActivity";
-
- public static final String DEBUG_HOST = "http://10.8.0.250:456";
- public static final String YUN_HOST = "https://yun.winboll.cc";
-
-
- String mHost = "";
- RadioButton mrbYunHost;
- RadioButton mrbDebugHost;
- LogView mLogView;
-
- @Override
- public Activity getActivity() {
- return this;
- }
-
- @Override
- public String getTag() {
- return TAG;
- }
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_logon);
- mLogView = findViewById(R.id.logview);
- mLogView.start();
-
- mHost = BuildConfig.DEBUG ? DEBUG_HOST: YUN_HOST;
- if (BuildConfig.DEBUG) {
- mrbYunHost = findViewById(R.id.rb_yunhost);
- mrbDebugHost = findViewById(R.id.rb_debughost);
- mrbYunHost.setChecked(!BuildConfig.DEBUG);
- mrbDebugHost.setChecked(BuildConfig.DEBUG);
- } else {
- findViewById(R.id.ll_hostbar).setVisibility(View.GONE);
- }
- }
-
- public void onSwitchHost(View view) {
- if (view.getId() == R.id.rb_yunhost) {
- mrbDebugHost.setChecked(false);
- mHost = YUN_HOST;
- } else if (view.getId() == R.id.rb_debughost) {
- mrbYunHost.setChecked(false);
- mHost = DEBUG_HOST;
- }
- }
-
- @Override
- protected void onResume() {
- super.onResume();
- mLogView.start();
- }
-
- public void onTestLogin(View view) {
- LogUtils.d(TAG, "onTestLogin");
- final YunUtils yunUtils = YunUtils.getInstance(this);
-
- UserInfoModel userInfoModel = new UserInfoModel();
- userInfoModel.setUsername("jian");
- userInfoModel.setPassword("kkiio");
- userInfoModel.setToken("aaa111");
- yunUtils.login(mHost, userInfoModel);
- }
-
- public void onTestRSA(View view) {
- LogUtils.d(TAG, "onTestRSA");
- RSAUtils utils = RSAUtils.getInstance(this);
-
- try {
- // 测试 1:首次生成密钥对
- LogUtils.d(TAG, "==== 首次生成密钥对 ====");
- if (utils.keysExist()) {
- LogUtils.d(TAG, "密钥对已生成");
- } else {
- utils.generateAndSaveKeys();
- LogUtils.d(TAG, "密钥对生成成功。");
- }
-
- // 测试 2:获取密钥对(自动读取已生成的文件)
- KeyPair keyPair = utils.getOrGenerateKeys();
- PublicKey publicKey = keyPair.getPublic();
- PrivateKey privateKey = keyPair.getPrivate();
-
- // 打印密钥信息
- LogUtils.d(TAG, "\n==== 密钥信息 ====");
- LogUtils.d(TAG, "公钥算法:" + publicKey.getAlgorithm());
- LogUtils.d(TAG, "公钥编码长度:" + publicKey.getEncoded().length + "字节");
- LogUtils.d(TAG, "私钥算法:" + privateKey.getAlgorithm());
- LogUtils.d(TAG, "私钥编码长度:" + privateKey.getEncoded().length + "字节");
-
- // 测试 3:重复调用时检查是否复用文件
- LogUtils.d(TAG, "\n==== 二次调用 ====");
- KeyPair reusedPair = utils.getOrGenerateKeys();
- LogUtils.d(TAG, "是否为同一公钥:" + (publicKey.equals(reusedPair.getPublic()))); // true(单例引用)
- LogUtils.d(TAG, "操作完成");
-
- String testMessage = "Hello, RSA Encryption!";
-
- // 1. 获取或生成密钥对
- PublicKey publicKeyReused = reusedPair.getPublic();
- PrivateKey privateKeyReused = reusedPair.getPrivate();
-
- // 2. 公钥加密
- byte[] encryptedData = utils.encryptWithPublicKey(testMessage, publicKeyReused);
- LogUtils.d(TAG, "加密后数据(字节长度):" + encryptedData.length);
-
- // 3. 私钥解密
- String decryptedMessage = utils.decryptWithPrivateKey(encryptedData, privateKeyReused);
- LogUtils.d(TAG, "解密结果: " + decryptedMessage);
-
- // 4. 验证解密是否成功
- if (testMessage.equals(decryptedMessage)) {
- LogUtils.d(TAG, "加密解密测试通过!");
- } else {
- LogUtils.d(TAG, "测试失败:内容不一致");
- }
- } catch (Exception e) {
- LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
- }
- }
-
-
-}
diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/activities/YunActivity.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/activities/YunActivity.java
deleted file mode 100644
index fe929f4c..00000000
--- a/libappbase/src/main/java/cc/winboll/studio/libappbase/activities/YunActivity.java
+++ /dev/null
@@ -1,126 +0,0 @@
-package cc.winboll.studio.libappbase.activities;
-
-import android.app.Activity;
-import android.os.Bundle;
-import android.view.View;
-import cc.winboll.studio.libappbase.BuildConfig;
-import cc.winboll.studio.libappbase.LogUtils;
-import cc.winboll.studio.libappbase.R;
-import cc.winboll.studio.libappbase.winboll.IWinBoLLActivity;
-import java.io.IOException;
-import okhttp3.OkHttpClient;
-import okhttp3.Request;
-import okhttp3.Response;
-import android.widget.RadioButton;
-import cc.winboll.studio.libappbase.LogView;
-
-/**
- * @Author ZhanGSKen
- * @Date 2025/06/04 11:06
- * @Describe 云宝云
- */
-public class YunActivity extends Activity implements IWinBoLLActivity {
-
- public static final String TAG = "YunActivity";
-
- public static final String DEBUG_HOST = "http://10.8.0.250:456";
- public static final String YUN_HOST = "https://yun.winboll.cc";
-
- String mHost = "";
- RadioButton mrbYunHost;
- RadioButton mrbDebugHost;
- LogView mLogView;
-
- @Override
- public Activity getActivity() {
- return this;
- }
-
- @Override
- public String getTag() {
- return TAG;
- }
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_yun);
- mLogView = findViewById(R.id.logview);
- mLogView.start();
-
- mHost = BuildConfig.DEBUG ? DEBUG_HOST: YUN_HOST;
- if (BuildConfig.DEBUG) {
- mrbYunHost = findViewById(R.id.rb_yunhost);
- mrbDebugHost = findViewById(R.id.rb_debughost);
- mrbYunHost.setChecked(!BuildConfig.DEBUG);
- mrbDebugHost.setChecked(BuildConfig.DEBUG);
- } else {
- findViewById(R.id.ll_hostbar).setVisibility(View.GONE);
- }
- }
-
- public void onSwitchHost(View view) {
- if (view.getId() == R.id.rb_yunhost) {
- mrbDebugHost.setChecked(false);
- mHost = YUN_HOST;
- } else if (view.getId() == R.id.rb_debughost) {
- mrbYunHost.setChecked(false);
- mHost = DEBUG_HOST;
- }
- }
-
- @Override
- protected void onResume() {
- super.onResume();
- mLogView.start();
- }
-
- public void onTestYun(View view) {
- LogUtils.d(TAG, "onTestYun");
- (new Thread(new Runnable(){
- @Override
- public void run() {
- testYun();
- }
- })).start();
- }
-
- void testYun() {
- OkHttpClient client = new OkHttpClient();
- Request request = new Request.Builder()
- .url(mHost + "/backups/")
- .build();
-
- Response response = null;
- try {
- response = client.newCall(request).execute();
- if (response.isSuccessful()) {
- String responseBody = "";
- if (response.body() != null) {
- responseBody = response.body().string();
- }
-
- // 正则匹配:任意主机名 -> Test OK(主机名部分匹配非空字符)
- boolean isMatch = responseBody.matches(".+? -> Test OK");
-
- if (isMatch) {
- LogUtils.d(TAG, responseBody);
- } else {
- LogUtils.d(TAG, "响应内容不匹配,内容:" + responseBody);
- }
- } else {
- LogUtils.d(TAG, "请求失败,状态码:" + response.code());
- }
- } catch (IOException e) {
- LogUtils.d(TAG, "读取响应体失败:" + e.getMessage());
- } catch (Exception e) {
- LogUtils.d(TAG, "异常:" + e.getMessage());
- e.printStackTrace(); // Java 7 需显式打印堆栈
- } finally {
- // 手动关闭 Response(Java 7 不支持 try-with-resources)
- if (response != null && response.body() != null) {
- response.body().close();
- }
- }
- }
-}
diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/dialogs/YesNoAlertDialog.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/dialogs/YesNoAlertDialog.java
deleted file mode 100644
index 2971d8a7..00000000
--- a/libappbase/src/main/java/cc/winboll/studio/libappbase/dialogs/YesNoAlertDialog.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package cc.winboll.studio.libappbase.dialogs;
-
-/**
- * @Author ZhanGSKen
- * @Date 2025/03/28 17:40:47
- * @Date 2024/08/12 14:46:25
- * @Describe 询问用户确定与否的选择框
- */
-import android.app.AlertDialog;
-import android.content.Context;
-import android.content.DialogInterface;
-
-public class YesNoAlertDialog {
-
- public static final String TAG = "YesNoAlertDialog";
-
- public static void show(Context context, String szTitle, String szMessage, final OnDialogResultListener listener) {
- AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
- context);
-
- // set title
- alertDialogBuilder.setTitle(szTitle);
-
- // set dialog message
- alertDialogBuilder
- .setMessage(szMessage)
- .setCancelable(true)
- .setOnCancelListener(new DialogInterface.OnCancelListener(){
- @Override
- public void onCancel(DialogInterface dialog) {
- listener.onNo();
- }
- })
- .setPositiveButton("YES", new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int id) {
- // if this button is clicked, close
- // current activity
- listener.onYes();
- }
- })
- .setNegativeButton("NO", new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int id) {
- // if this button is clicked, just close
- // the dialog box and do nothing
- dialog.cancel();
- }
- });
-
- // create alert dialog
- AlertDialog alertDialog = alertDialogBuilder.create();
-
- // show it
- alertDialog.show();
- }
-
- public interface OnDialogResultListener {
- abstract void onYes();
- abstract void onNo();
- }
-}
diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/models/ResponseData.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/models/ResponseData.java
deleted file mode 100644
index 6ec5398a..00000000
--- a/libappbase/src/main/java/cc/winboll/studio/libappbase/models/ResponseData.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package cc.winboll.studio.libappbase.models;
-
-/**
- * @Author ZhanGSKen
- * @Date 2025/06/05 11:26
- */
-
-public class ResponseData {
-
- public static final String STATUS_SUCCESS = "success";
- public static final String STATUS_ERROR = "error";
-
- private String status;
- private String message;
- private UserInfoModel data;
-
- public ResponseData() {
- this.status = "";
- this.message = "";
- this.data = new UserInfoModel();
- }
-
- public ResponseData(String status, String message, UserInfoModel data) {
- this.status = status;
- this.message = message;
- this.data = data;
- }
-
- public void setStatus(String status) {
- this.status = status;
- }
-
- public String getStatus() {
- return status;
- }
-
- public void setMessage(String message) {
- this.message = message;
- }
-
- public String getMessage() {
- return message;
- }
-
- public void setData(UserInfoModel data) {
- this.data = data;
- }
-
- public UserInfoModel getData() {
- return data;
- }
-}
-
diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/models/UserInfoModel.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/models/UserInfoModel.java
deleted file mode 100644
index 4410e0a2..00000000
--- a/libappbase/src/main/java/cc/winboll/studio/libappbase/models/UserInfoModel.java
+++ /dev/null
@@ -1,92 +0,0 @@
-package cc.winboll.studio.libappbase.models;
-
-/**
- * @Author ZhanGSKen
- * @Date 2025/06/04 19:14
- */
-import android.util.JsonReader;
-import android.util.JsonWriter;
-import cc.winboll.studio.libappbase.BaseBean;
-import java.io.IOException;
-
-public class UserInfoModel extends BaseBean {
-
- public static final String TAG = "UserInfoModel";
-
- String username;
- String password;
- String token;
-
- public UserInfoModel() {
- this.username = "";
- this.password = "";
- this.token = "";
- }
-
- public void setUsername(String username) {
- this.username = username;
- }
-
- public String getUsername() {
- return username;
- }
-
- public void setPassword(String password) {
- this.password = password;
- }
-
- public String getPassword() {
- return password;
- }
-
- public void setToken(String token) {
- this.token = token;
- }
-
- public String getToken() {
- return token;
- }
-
- @Override
- public String getName() {
- return UserInfoModel.class.getName();
- }
-
- @Override
- public void writeThisToJsonWriter(JsonWriter jsonWriter) throws IOException {
- super.writeThisToJsonWriter(jsonWriter);
- jsonWriter.name("username").value(getUsername());
- jsonWriter.name("password").value(getPassword());
- jsonWriter.name("token").value(getToken());
- }
-
- @Override
- public boolean initObjectsFromJsonReader(JsonReader jsonReader, String name) throws IOException {
- if (super.initObjectsFromJsonReader(jsonReader, name)) { return true; } else {
- if (name.equals("username")) {
- setUsername(jsonReader.nextString());
- } else if (name.equals("password")) {
- setPassword(jsonReader.nextString());
- } else if (name.equals("token")) {
- setToken(jsonReader.nextString());
- } else {
- return false;
- }
- }
- return true;
- }
-
- @Override
- public BaseBean readBeanFromJsonReader(JsonReader jsonReader) throws IOException {
- jsonReader.beginObject();
- while (jsonReader.hasNext()) {
- String name = jsonReader.nextName();
- if (!initObjectsFromJsonReader(jsonReader, name)) {
- jsonReader.skipValue();
- }
- }
- // 结束 JSON 对象
- jsonReader.endObject();
- return this;
- }
-}
diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/models/WinBoLLModel.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/models/WinBoLLModel.java
deleted file mode 100644
index 5ca52575..00000000
--- a/libappbase/src/main/java/cc/winboll/studio/libappbase/models/WinBoLLModel.java
+++ /dev/null
@@ -1,91 +0,0 @@
-package cc.winboll.studio.libappbase.models;
-
-/**
- * @Author ZhanGSKen
- * @Date 2025/05/10 10:16
- * @Describe WinBoLLModel
- */
-import android.util.JsonReader;
-import android.util.JsonWriter;
-import cc.winboll.studio.libappbase.BaseBean;
-import java.io.IOException;
-
-public class WinBoLLModel extends BaseBean {
-
- public static final String TAG = "WinBoLLModel";
-
- String appPackageName;
- String appMainServiveName;
-
- public WinBoLLModel() {
- this.appPackageName = "";
- this.appMainServiveName = "";
- }
-
- public WinBoLLModel(boolean isDebuging, String appPackageName, String appMainServiveName) {
- this.appPackageName = appPackageName;
- this.appMainServiveName = appMainServiveName;
- }
-
- public WinBoLLModel(String appPackageName, String appMainServiveName) {
- this.appPackageName = appPackageName;
- this.appMainServiveName = appMainServiveName;
- }
-
- public void setAppPackageName(String appPackageName) {
- this.appPackageName = appPackageName;
- }
-
- public String getAppPackageName() {
- return appPackageName;
- }
-
- public void setAppMainServiveName(String appMainServiveName) {
- this.appMainServiveName = appMainServiveName;
- }
-
- public String getAppMainServiveName() {
- return appMainServiveName;
- }
-
- @Override
- public String getName() {
- return APPModel.class.getName();
- }
-
- @Override
- public void writeThisToJsonWriter(JsonWriter jsonWriter) throws IOException {
- super.writeThisToJsonWriter(jsonWriter);
- jsonWriter.name("appPackageName").value(getAppPackageName());
- jsonWriter.name("appMainServiveName").value(getAppMainServiveName());
- }
-
- @Override
- public boolean initObjectsFromJsonReader(JsonReader jsonReader, String name) throws IOException {
- if (super.initObjectsFromJsonReader(jsonReader, name)) { return true; } else {
- if (name.equals("appPackageName")) {
- setAppPackageName(jsonReader.nextString());
- } else if (name.equals("appMainServiveName")) {
- setAppMainServiveName(jsonReader.nextString());
- } else {
- return false;
- }
- }
- return true;
- }
-
- @Override
- public BaseBean readBeanFromJsonReader(JsonReader jsonReader) throws IOException {
- jsonReader.beginObject();
- while (jsonReader.hasNext()) {
- String name = jsonReader.nextName();
- if (!initObjectsFromJsonReader(jsonReader, name)) {
- jsonReader.skipValue();
- }
- }
- // 结束 JSON 对象
- jsonReader.endObject();
- return this;
- }
-}
-
diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/models/WinBoLLNewsBean.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/models/WinBoLLNewsBean.java
deleted file mode 100644
index de2b03d9..00000000
--- a/libappbase/src/main/java/cc/winboll/studio/libappbase/models/WinBoLLNewsBean.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package cc.winboll.studio.libappbase.models;
-import android.util.JsonReader;
-import android.util.JsonWriter;
-import cc.winboll.studio.libappbase.BaseBean;
-import java.io.IOException;
-
-/**
- * @Author ZhanGSKen
- * @Date 2025/05/10 09:36
- * @Describe WinBoLL 应用消息数据模型
- */
-public class WinBoLLNewsBean extends BaseBean {
-
- public static final String TAG = "WinBoLLNewsBean";
-
- String message;
-
- public WinBoLLNewsBean() {
- this.message = "";
- }
-
- public WinBoLLNewsBean(String message) {
- this.message = message;
- }
-
- public void setMessage(String message) {
- this.message = message;
- }
-
- public String getMessage() {
- return message;
- }
-
- @Override
- public String getName() {
- return WinBoLLNewsBean.class.getName();
- }
-
- @Override
- public void writeThisToJsonWriter(JsonWriter jsonWriter) throws IOException {
- super.writeThisToJsonWriter(jsonWriter);
- jsonWriter.name("message").value(getMessage());
- }
-
- @Override
- public boolean initObjectsFromJsonReader(JsonReader jsonReader, String name) throws IOException {
- if (super.initObjectsFromJsonReader(jsonReader, name)) { return true; } else {
- if (name.equals("message")) {
- setMessage(jsonReader.nextString());
- } else {
- return false;
- }
- }
- return true;
- }
-
- @Override
- public BaseBean readBeanFromJsonReader(JsonReader jsonReader) throws IOException {
- jsonReader.beginObject();
- while (jsonReader.hasNext()) {
- String name = jsonReader.nextName();
- if (!initObjectsFromJsonReader(jsonReader, name)) {
- jsonReader.skipValue();
- }
- }
- // 结束 JSON 对象
- jsonReader.endObject();
- return this;
- }
-}
diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/receiver/MyBroadcastReceiver.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/receiver/MyBroadcastReceiver.java
deleted file mode 100644
index bcd970ed..00000000
--- a/libappbase/src/main/java/cc/winboll/studio/libappbase/receiver/MyBroadcastReceiver.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package cc.winboll.studio.libappbase.receiver;
-
-/**
- * @Author ZhanGSKen
- * @Date 2025/02/13 21:19:09
- * @Describe MyBroadcastReceiver
- */
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import cc.winboll.studio.libappbase.LogUtils;
-import cc.winboll.studio.libappbase.R;
-
-public class MyBroadcastReceiver extends BroadcastReceiver {
-
- public static final String TAG = "MyBroadcastReceiver";
-
- @Override
- public void onReceive(Context context, Intent intent) {
- if (context.getString(R.string.action_sos).equals(intent.getAction())) {
- String message = intent.getStringExtra("message");
- String sosPackage = intent.getStringExtra("sosPackage");
-
- // 处理接收到的广播消息
- LogUtils.d(TAG, String.format("MyBroadcastReceiver action %s \n%s\n%s", intent.getAction(), sosPackage, message));
- }
- }
-}
-
diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/sos/SOS.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/sos/SOS.java
deleted file mode 100644
index 6d80d255..00000000
--- a/libappbase/src/main/java/cc/winboll/studio/libappbase/sos/SOS.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package cc.winboll.studio.libappbase.sos;
-
-/**
- * @Author ZhanGSKen
- * @Date 2025/03/02 09:36:29
- * @Describe WinBoLL 应用 SOS 机理保护类
- */
-import android.content.Context;
-import android.content.Intent;
-import cc.winboll.studio.libappbase.LogUtils;
-import java.io.IOException;
-
-public class SOS {
-
- public static final String TAG = "SOS";
-
- public static final String ACTION_SOS = SOS.class.getName() + ".ACTION_SOS";
- public static final String EXTRA_OBJECT = "EXTRA_OBJECT";
-
- public static void sosToAppBase(Context context, String sosService) {
- LogUtils.d(TAG, "sosToAppBase()");
- String szToPackage = "cc.winboll.studio.appbase";
- sos(context, szToPackage, sosService);
-
- }
-
- public static void sosToAppBaseBeta(Context context, String sosService) {
- LogUtils.d(TAG, "sosToAppBaseBeta()");
- String szToPackage = "cc.winboll.studio.appbase.beta";
- sos(context, szToPackage, sosService);
-
- }
-
- static void sos(Context context, String szToPackage, String sosService) {
- LogUtils.d(TAG, "sos(...)");
- Intent intent = new Intent(ACTION_SOS);
- intent.putExtra(EXTRA_OBJECT, genSOSObject(context.getPackageName(), sosService));
- intent.setPackage(szToPackage);
- LogUtils.d(TAG, String.format("ACTION_SOS :\nTo Package : %sSOS Service : %s\n", szToPackage, sosService));
- context.sendBroadcast(intent);
- }
-
- public static SOSObject parseSOSObject(String szSOSObject) {
- try {
- return SOSObject.parseStringToBean(szSOSObject, SOSObject.class);
- } catch (IOException e) {
- LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
- }
- return null;
- }
-
- public static String sosObjectToString(SOSObject object) {
- return object.toString();
- }
-
- public static String genSOSObject(String objectPackageName, String objectServiveName) {
- return (new SOSObject(objectPackageName, objectServiveName)).toString();
- }
-}
diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/sos/SOSCenterService.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/sos/SOSCenterService.java
deleted file mode 100644
index 7c7c1fa7..00000000
--- a/libappbase/src/main/java/cc/winboll/studio/libappbase/sos/SOSCenterService.java
+++ /dev/null
@@ -1,182 +0,0 @@
-package cc.winboll.studio.libappbase.sos;
-
-/**
- * @Author ZhanGSKen
- * @Date 2025/02/27 14:00:21
- * @Describe Simple Operate Signal Service Center.
- * 简单操作信号服务中心
- */
-import android.app.Service;
-import android.content.Context;
-import android.content.Intent;
-import android.os.IBinder;
-import android.os.IInterface;
-import android.os.Parcel;
-import android.os.RemoteException;
-import java.io.FileDescriptor;
-import android.app.Service;
-import android.content.Intent;
-import android.os.IBinder;
-import cc.winboll.studio.libappbase.LogUtils;
-
-public class SOSCenterService extends Service {
-
- public static final String TAG = "SOSCenterService";
-
- private final IBinder binder =(IBinder)new SOSBinder();
-
- SOSCenterServiceModel mSOSCenterServiceModel;
- static MainThread _MainThread;
- public static synchronized MainThread getMainThreadInstance() {
- if (_MainThread == null) {
- _MainThread = new MainThread();
- }
- return _MainThread;
- }
-
- @Override
- public IBinder onBind(Intent intent) {
- return binder;
- }
-
- public class SOSBinder implements IBinder {
-
- @Override
- public void dump(FileDescriptor fileDescriptor, String[] string) throws RemoteException {
- }
-
- @Override
- public void dumpAsync(FileDescriptor fileDescriptor, String[] string) throws RemoteException {
- }
-
- @Override
- public String getInterfaceDescriptor() throws RemoteException {
- return null;
- }
-
- @Override
- public boolean isBinderAlive() {
- return false;
- }
-
- @Override
- public void linkToDeath(IBinder.DeathRecipient deathRecipient, int p) throws RemoteException {
- }
-
- @Override
- public boolean pingBinder() {
- return false;
- }
-
- @Override
- public IInterface queryLocalInterface(String string) {
- return null;
- }
-
- @Override
- public boolean transact(int p, Parcel parcel, Parcel parcel1, int p1) throws RemoteException {
- return false;
- }
-
- @Override
- public boolean unlinkToDeath(IBinder.DeathRecipient deathRecipient, int p) {
- return false;
- }
-
- public static final String TAG = "SOSBinder";
- SOSCenterService getService() {
- return SOSCenterService.this;
- }
- }
-
- @Override
- public void onCreate() {
- super.onCreate();
- LogUtils.d(TAG, "onCreate");
- mSOSCenterServiceModel = SOSCenterServiceModel.loadBean(this, SOSCenterServiceModel.class);
- if(mSOSCenterServiceModel == null) {
- mSOSCenterServiceModel = new SOSCenterServiceModel();
- SOSCenterServiceModel.saveBean(this, mSOSCenterServiceModel);
- }
- runMainThread();
- }
-
- @Override
- public int onStartCommand(Intent intent, int flags, int startId) {
- LogUtils.d(TAG, "onStartCommand");
-
- runMainThread();
-
- return mSOSCenterServiceModel.isEnable() ? Service.START_STICKY: super.onStartCommand(intent, flags, startId);
- }
-
- void runMainThread() {
- mSOSCenterServiceModel = mSOSCenterServiceModel.loadBean(this, SOSCenterServiceModel.class);
- if (mSOSCenterServiceModel.isEnable()
- && _MainThread == null) {
- getMainThreadInstance().start();
- }
- }
-
- @Override
- public void onDestroy() {
- super.onDestroy();
- LogUtils.d(TAG, "onDestroy");
- mSOSCenterServiceModel = SOSCenterServiceModel.loadBean(this, SOSCenterServiceModel.class);
- if (mSOSCenterServiceModel.isEnable()) {
- LogUtils.d(TAG, "mSOSCenterServiceModel.isEnable()");
-// ISOSAPP iSOSAPP = (ISOSAPP)getApplication();
-// iSOSAPP.helpISOSService(getISOSServiceIntentWhichAskForHelp());
- }
- if (_MainThread != null) {
- _MainThread.isExist = true;
- _MainThread = null;
- }
- }
-
- public static void stopISOSService(Context context) {
- LogUtils.d(TAG, "stopISOSService");
- SOSCenterServiceModel bean = new SOSCenterServiceModel();
- bean.setIsEnable(false);
- SOSCenterServiceModel.saveBean(context, bean);
- context.stopService(new Intent(context, SOSCenterServiceModel.class));
- }
-
- public static void startISOSService(Context context) {
- LogUtils.d(TAG, "startISOSService");
- SOSCenterServiceModel bean = new SOSCenterServiceModel();
- bean.setIsEnable(true);
- SOSCenterServiceModel.saveBean(context, bean);
- context.startService(new Intent(context, SOSCenterServiceModel.class));
- }
-
- public String getMessage() {
- return "Hello from SOSCenterServiceModel";
- }
-
- static class MainThread extends Thread {
- volatile boolean isExist = false;
-
- public void setIsExist(boolean isExist) {
- this.isExist = isExist;
- }
-
- public boolean isExist() {
- return isExist;
- }
-
- @Override
- public void run() {
- super.run();
- while (!isExist) {
- LogUtils.d(TAG, "run");
- try {
- sleep(1000);
- } catch (InterruptedException e) {
- LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
- }
- }
- }
-
- }
-}
diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/sos/SOSCenterServiceModel.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/sos/SOSCenterServiceModel.java
deleted file mode 100644
index f2cfc401..00000000
--- a/libappbase/src/main/java/cc/winboll/studio/libappbase/sos/SOSCenterServiceModel.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package cc.winboll.studio.libappbase.sos;
-
-/**
- * @Author ZhanGSKen
- * @Date 2025/03/02 09:49:45
- * @Describe SOSCenterServiceModel
- * Simple Operate Signal Service Model.
- */
-import android.util.JsonReader;
-import android.util.JsonWriter;
-import cc.winboll.studio.libappbase.BaseBean;
-import java.io.IOException;
-
-public class SOSCenterServiceModel extends BaseBean {
-
- public static final String TAG = "SOSCenterServiceModel";
-
- boolean isEnable;
-
- public SOSCenterServiceModel() {
- this.isEnable = false;
- }
-
- public void setIsEnable(boolean isEnable) {
- this.isEnable = isEnable;
- }
-
- public boolean isEnable() {
- return isEnable;
- }
-
- @Override
- public String getName() {
- return SOSCenterServiceModel.class.getName();
- }
-
- @Override
- public void writeThisToJsonWriter(JsonWriter jsonWriter) throws IOException {
- super.writeThisToJsonWriter(jsonWriter);
- jsonWriter.name("isEnable").value(isEnable());
-
- }
-
- @Override
- public boolean initObjectsFromJsonReader(JsonReader jsonReader, String name) throws IOException {
- if (super.initObjectsFromJsonReader(jsonReader, name)) { return true; } else {
- if (name.equals("isEnable")) {
- setIsEnable(jsonReader.nextBoolean());
- } else {
- return false;
- }
- }
- return true;
- }
-
- @Override
- public BaseBean readBeanFromJsonReader(JsonReader jsonReader) throws IOException {
- jsonReader.beginObject();
- while (jsonReader.hasNext()) {
- String name = jsonReader.nextName();
- if (!initObjectsFromJsonReader(jsonReader, name)) {
- jsonReader.skipValue();
- }
- }
- // 结束 JSON 对象
- jsonReader.endObject();
- return this;
- }
-}
diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/sos/SOSCenterServiceReceiver.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/sos/SOSCenterServiceReceiver.java
deleted file mode 100644
index ec3341b1..00000000
--- a/libappbase/src/main/java/cc/winboll/studio/libappbase/sos/SOSCenterServiceReceiver.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package cc.winboll.studio.libappbase.sos;
-
-/**
- * @Author ZhanGSKen
- * @Date 2025/02/27 14:04:35
- * @Describe SOSCenterServiceReceiver
- */
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import cc.winboll.studio.libappbase.LogUtils;
-
-public class SOSCenterServiceReceiver extends BroadcastReceiver {
-
- public static final String TAG = "SOSCenterServiceReceiver";
-
- public static final String ACTION_SOS = SOSCenterServiceReceiver.class.getName() + ".ACTION_SOS";
-
- @Override
- public void onReceive(Context context, Intent intent) {
- String action = intent.getAction();
- if (action.equals(ACTION_SOS)) {
- // 处理接收到的广播消息
- LogUtils.d(TAG, String.format("Action %s \n%s\n%s", action));
- } else {
- LogUtils.d(TAG, String.format("%s", action));
- }
- }
-}
diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/sos/SOSObject.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/sos/SOSObject.java
deleted file mode 100644
index 5f19563a..00000000
--- a/libappbase/src/main/java/cc/winboll/studio/libappbase/sos/SOSObject.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package cc.winboll.studio.libappbase.sos;
-
-/**
- * @Author ZhanGSKen
- * @Date 2025/02/27 14:12:05
- * @Describe SOSBean
- */
-import android.util.JsonReader;
-import android.util.JsonWriter;
-import cc.winboll.studio.libappbase.BaseBean;
-import java.io.IOException;
-
-public class SOSObject extends BaseBean {
-
- public static final String TAG = "SOSObject";
-
- String objectPackageName;
- String objectServiveName;
-
- public SOSObject() {
- this.objectPackageName = "";
- this.objectServiveName = "";
- }
-
- public SOSObject(String objectPackageName, String objectServiveName) {
- this.objectPackageName = objectPackageName;
- this.objectServiveName = objectServiveName;
- }
-
- public void setObjectPackageName(String objectPackageName) {
- this.objectPackageName = objectPackageName;
- }
-
- public String getObjectPackageName() {
- return objectPackageName;
- }
-
- public void setObjectServiveName(String objectServiveName) {
- this.objectServiveName = objectServiveName;
- }
-
- public String getObjectServiveName() {
- return objectServiveName;
- }
-
- @Override
- public String getName() {
- return SOSObject.class.getName();
- }
-
- @Override
- public void writeThisToJsonWriter(JsonWriter jsonWriter) throws IOException {
- super.writeThisToJsonWriter(jsonWriter);
- jsonWriter.name("objectPackageName").value(getObjectPackageName());
- jsonWriter.name("objectServiveName").value(getObjectServiveName());
-
- }
-
- @Override
- public boolean initObjectsFromJsonReader(JsonReader jsonReader, String name) throws IOException {
- if (super.initObjectsFromJsonReader(jsonReader, name)) { return true; } else {
- if (name.equals("objectPackageName")) {
- setObjectPackageName(jsonReader.nextString());
- } else if (name.equals("objectServiveName")) {
- setObjectServiveName(jsonReader.nextString());
- } else {
- return false;
- }
- }
- return true;
- }
-
- @Override
- public BaseBean readBeanFromJsonReader(JsonReader jsonReader) throws IOException {
- jsonReader.beginObject();
- while (jsonReader.hasNext()) {
- String name = jsonReader.nextName();
- if (!initObjectsFromJsonReader(jsonReader, name)) {
- jsonReader.skipValue();
- }
- }
- // 结束 JSON 对象
- jsonReader.endObject();
- return this;
- }
-}
diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/utils/FileUtils.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/utils/FileUtils.java
deleted file mode 100644
index babe0a96..00000000
--- a/libappbase/src/main/java/cc/winboll/studio/libappbase/utils/FileUtils.java
+++ /dev/null
@@ -1,128 +0,0 @@
-package cc.winboll.studio.libappbase.utils;
-
-/**
- * @Author ZhanGSKen
- * @Date 2025/06/04 20:15
- * @Describe 文件操作类
- */
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.ByteArrayOutputStream;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
-
-public class FileUtils {
- public static final String TAG = "FileUtils";
-
- /**
- * 读取文件为字节数组(Java 7 语法)
- */
- public static byte[] readFileToByteArray(String filePath) {
- FileInputStream fis = null;
- ByteArrayOutputStream bos = null;
- try {
- fis = new FileInputStream(filePath);
- bos = new ByteArrayOutputStream();
- byte[] buffer = new byte[4096];
- int bytesRead;
- while ((bytesRead = fis.read(buffer)) != -1) {
- bos.write(buffer, 0, bytesRead);
- }
- return bos.toByteArray();
- } catch (IOException e) {
- e.printStackTrace();
- return null;
- } finally {
- // 手动关闭流(Java 7 不支持 try-with-resources)
- if (fis != null) {
- try {
- fis.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- if (bos != null) {
- try {
- bos.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
-
- /**
- * 写入字节数组到文件(Java 7 语法)
- */
- public static boolean writeByteArrayToFile(byte[] data, String filePath) {
- FileOutputStream fos = null;
- try {
- fos = new FileOutputStream(filePath);
- fos.write(data);
- return true;
- } catch (IOException e) {
- e.printStackTrace();
- return false;
- } finally {
- if (fos != null) {
- try {
- fos.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
-
- // 原字符串读写方法(适配 Java 7)
- public static String readFileToString(String filePath) {
- BufferedReader reader = null;
- try {
- reader = new BufferedReader(new FileReader(filePath));
- StringBuilder content = new StringBuilder();
- String line;
- while ((line = reader.readLine()) != null) {
- content.append(line).append(System.getProperty("line.separator"));
- }
- // 去除最后一个换行符(可选)
- if (content.length() > 0) {
- content.deleteCharAt(content.length() - 1);
- }
- return content.toString();
- } catch (IOException e) {
- e.printStackTrace();
- return null;
- } finally {
- if (reader != null) {
- try {
- reader.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
-
- public static boolean writeStringToFile(String content, String filePath, boolean append) {
- BufferedWriter writer = null;
- try {
- writer = new BufferedWriter(new FileWriter(filePath, append));
- writer.write(content);
- return true;
- } catch (IOException e) {
- e.printStackTrace();
- return false;
- } finally {
- if (writer != null) {
- try {
- writer.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
-}
diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/utils/RSAUtils.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/utils/RSAUtils.java
deleted file mode 100644
index 19e4deb4..00000000
--- a/libappbase/src/main/java/cc/winboll/studio/libappbase/utils/RSAUtils.java
+++ /dev/null
@@ -1,222 +0,0 @@
-package cc.winboll.studio.libappbase.utils;
-
-/**
- * @Author ZhanGSKen
- * @Date 2025/06/04 13:36
- * @Describe RSA加密工具
- */
-import android.content.Context;
-import android.util.Base64;
-import cc.winboll.studio.libappbase.LogUtils;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.security.KeyFactory;
-import java.security.KeyPair;
-import java.security.KeyPairGenerator;
-import java.security.NoSuchAlgorithmException;
-import java.security.PrivateKey;
-import java.security.PublicKey;
-import java.security.spec.InvalidKeySpecException;
-import java.security.spec.PKCS8EncodedKeySpec;
-import java.security.spec.X509EncodedKeySpec;
-import java.util.Objects;
-import javax.crypto.Cipher;
-
-public class RSAUtils {
- private static final String TAG = "RSAUtils";
- private static final int KEY_SIZE = 2048;
- private static final String KEY_ALGORITHM = "RSA";
- private static final String PUBLIC_KEY_FILE = "public.key";
- private static final String PRIVATE_KEY_FILE = "private.key";
- private static final String CIPHER_ALGORITHM = KEY_ALGORITHM + "/ECB/PKCS1Padding"; // 保留原加密方式
-
- private final String keyPath;
- private static volatile RSAUtils INSTANCE;
-
- /**
- * 构造方法:初始化密钥存储路径(内部存储)
- */
- private RSAUtils(Context context) {
- keyPath = context.getFilesDir() + File.separator + "keys" + File.separator; // 修正路径格式
- }
-
- /**
- * 获取单例实例
- */
- public static synchronized RSAUtils getInstance(Context context) {
- if (INSTANCE == null) {
- INSTANCE = new RSAUtils(context);
- }
- return INSTANCE;
- }
-
- /**
- * 检查密钥文件是否存在
- */
- public boolean keysExist() {
- File publicKeyFile = new File(keyPath + PUBLIC_KEY_FILE);
- File privateKeyFile = new File(keyPath + PRIVATE_KEY_FILE);
- return publicKeyFile.exists() && privateKeyFile.exists();
- }
-
- /**
- * 生成密钥对并保存到文件
- */
- public void generateAndSaveKeys() throws Exception {
- LogUtils.d(TAG, "开始生成 RSA 密钥对(2048位)");
- KeyPairGenerator generator = KeyPairGenerator.getInstance(KEY_ALGORITHM);
- generator.initialize(KEY_SIZE);
- KeyPair keyPair = generator.generateKeyPair();
-
- saveKey(PUBLIC_KEY_FILE, keyPair.getPublic().getEncoded());
- saveKey(PRIVATE_KEY_FILE, keyPair.getPrivate().getEncoded());
- LogUtils.d(TAG, "密钥对生成并保存成功");
- }
-
- /**
- * 获取或生成密钥对(线程安全)
- */
- public KeyPair getOrGenerateKeys() throws Exception {
- if (!keysExist()) {
- synchronized (RSAUtils.class) { // 双重检查锁,避免多线程重复生成
- if (!keysExist()) {
- generateAndSaveKeys();
- }
- }
- }
- return readKeysFromFile();
- }
-
- /**
- * 从文件读取密钥对
- */
- private KeyPair readKeysFromFile() throws Exception {
- LogUtils.d(TAG, "读取密钥对文件");
- try {
- byte[] publicKeyBytes = readFileToBytes(keyPath + PUBLIC_KEY_FILE);
- byte[] privateKeyBytes = readFileToBytes(keyPath + PRIVATE_KEY_FILE);
-
- X509EncodedKeySpec publicSpec = new X509EncodedKeySpec(publicKeyBytes);
- PKCS8EncodedKeySpec privateSpec = new PKCS8EncodedKeySpec(privateKeyBytes);
-
- KeyFactory factory = KeyFactory.getInstance(KEY_ALGORITHM);
- PublicKey publicKey = factory.generatePublic(publicSpec);
- PrivateKey privateKey = factory.generatePrivate(privateSpec);
-
- return new KeyPair(publicKey, privateKey);
- } catch (IOException | NoSuchAlgorithmException | InvalidKeySpecException e) {
- LogUtils.e(TAG, "密钥文件读取失败:" + e.getMessage());
- throw new Exception("密钥文件损坏或格式错误", e);
- }
- }
-
- /**
- * 保存密钥到文件(通用方法)
- */
- private void saveKey(String fileName, byte[] keyBytes) throws IOException {
- Objects.requireNonNull(keyBytes, "密钥字节数据不可为空");
- File dir = new File(keyPath);
- if (!dir.exists() && !dir.mkdirs()) {
- throw new IOException("创建密钥目录失败:" + keyPath);
- }
-
- FileOutputStream fos = null;
- try {
- fos = new FileOutputStream(keyPath + fileName);
- fos.write(keyBytes);
- } finally {
- if (fos != null) {
- try {
- fos.close();
- } catch (IOException e) {
- LogUtils.e(TAG, "关闭文件流失败:" + e.getMessage());
- }
- }
- }
- }
-
- /**
- * 读取文件为字节数组(Java 7 兼容)
- */
- private byte[] readFileToBytes(String filePath) throws IOException {
- File file = new File(filePath);
- if (!file.exists() || file.isDirectory()) {
- throw new IOException("文件不存在或为目录:" + filePath);
- }
-
- FileInputStream fis = null;
- try {
- fis = new FileInputStream(file);
- byte[] data = new byte[(int) file.length()];
- int bytesRead = fis.read(data);
- if (bytesRead != data.length) {
- throw new IOException("文件读取不完整");
- }
- return data;
- } finally {
- if (fis != null) {
- try {
- fis.close();
- } catch (IOException e) {
- LogUtils.e(TAG, "关闭文件流失败:" + e.getMessage());
- }
- }
- }
- }
-
- /**
- * 公钥加密(带参数校验)
- */
- public byte[] encryptWithPublicKey(String plainText, PublicKey publicKey) throws Exception {
- Objects.requireNonNull(plainText, "明文不可为空");
- Objects.requireNonNull(publicKey, "公钥不可为空");
-
- Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
- cipher.init(Cipher.ENCRYPT_MODE, publicKey);
-
- // 检查数据长度是否超过 RSA 限制(2048位密钥最大明文为 214字节,PKCS1Padding)
- int maxPlainTextSize = cipher.getBlockSize() - 11; // PKCS1Padding 固定填充长度
- if (plainText.getBytes("UTF-8").length > maxPlainTextSize) {
- throw new IllegalArgumentException("明文过长,最大支持 " + maxPlainTextSize + " 字节");
- }
-
- return cipher.doFinal(plainText.getBytes("UTF-8"));
- }
-
- /**
- * 私钥解密(带参数校验)
- */
- public String decryptWithPrivateKey(byte[] encryptedData, PrivateKey privateKey) throws Exception {
- Objects.requireNonNull(encryptedData, "密文不可为空");
- Objects.requireNonNull(privateKey, "私钥不可为空");
-
- Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
- cipher.init(Cipher.DECRYPT_MODE, privateKey);
- byte[] decryptedBytes = cipher.doFinal(encryptedData);
- return new String(decryptedBytes, "UTF-8");
- }
- /**
- * 将 HTTP 传输的 Base64 字符串还原为加密字节数组(Java 7 兼容)
- * @param httpString Base64 字符串(非 null)
- * @return 加密字节数组
- * @throws IllegalArgumentException 解码失败时抛出
- */
- public byte[] httpStringToEncryptBytes(String httpString) {
- Objects.requireNonNull(httpString, "HTTP 字符串不可为空");
-
- // 计算缺失的填充符数量(Java 7 不支持 repeat(),手动拼接)
- int pad = httpString.length() % 4;
- StringBuilder paddedString = new StringBuilder(httpString);
- if (pad != 0) {
- for (int i = 0; i < pad; i++) {
- paddedString.append('='); // 补全 '='
- }
- }
-
- // 使用 Base64 解码(Android 原生 Base64 类兼容 Java 7)
- return Base64.decode(paddedString.toString(), Base64.URL_SAFE);
- }
-}
-
diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/utils/ServiceUtils.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/utils/ServiceUtils.java
deleted file mode 100644
index 6d1385cc..00000000
--- a/libappbase/src/main/java/cc/winboll/studio/libappbase/utils/ServiceUtils.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package cc.winboll.studio.libappbase.utils;
-
-/**
- * @Author ZhanGSKen
- * @Date 2025/02/17 19:38:20
- * @Describe 服务工具集
- */
-import android.app.ActivityManager;
-import android.content.Context;
-import android.content.Intent;
-import android.os.Build;
-import android.util.Log;
-import cc.winboll.studio.libappbase.LogUtils;
-import java.util.List;
-
-public class ServiceUtils {
-
- public static final String TAG = "ServiceUtils";
-
- /**
- * 检查指定服务是否正在运行
- * @param context 上下文
- * @param serviceClass 服务类
- * @return true 如果服务正在运行,否则返回 false
- */
- public static boolean isServiceRunning(Context context, String serviceClassName) {
- ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
- if (activityManager == null) {
- return false;
- }
- List runningServices;
-// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
-// Intent intent = new Intent(context, serviceClass);
-// runningServices = activityManager.getRunningServices(100, intent);
-// } else {
- runningServices = activityManager.getRunningServices(100);
- //}
- for (ActivityManager.RunningServiceInfo serviceInfo : runningServices) {
- if (serviceClassName.equals(serviceInfo.service.getClassName())) {
- LogUtils.d(TAG, "Service is running: " + serviceInfo.service.getClassName());
- return true;
- }
- }
- LogUtils.d(TAG, "Service is not running: " + serviceClassName);
- return false;
- }
-}
-
diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/utils/YunUtils.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/utils/YunUtils.java
deleted file mode 100644
index 8e609b38..00000000
--- a/libappbase/src/main/java/cc/winboll/studio/libappbase/utils/YunUtils.java
+++ /dev/null
@@ -1,281 +0,0 @@
-package cc.winboll.studio.libappbase.utils;
-
-/**
- * @Author ZhanGSKen
- * @Date 2025/06/04 17:21
- * @Describe 应用登录与接口工具
- */
-import android.content.Context;
-import android.os.Handler;
-import android.os.Looper;
-import cc.winboll.studio.libappbase.LogUtils;
-import cc.winboll.studio.libappbase.models.ResponseData;
-import cc.winboll.studio.libappbase.models.UserInfoModel;
-import com.google.gson.Gson;
-import java.io.File;
-import java.io.IOException;
-import java.net.URLDecoder;
-import java.nio.charset.StandardCharsets;
-import java.security.KeyPair;
-import java.security.PrivateKey;
-import java.security.PublicKey;
-import java.util.concurrent.TimeUnit;
-import okhttp3.Call;
-import okhttp3.Callback;
-import okhttp3.MediaType;
-import okhttp3.OkHttpClient;
-import okhttp3.Request;
-import okhttp3.RequestBody;
-import okhttp3.Response;
-import java.io.UnsupportedEncodingException;
-
-public class YunUtils {
- public static final String TAG = "YunUtils";
- // 私有静态实例,类加载时创建
- private static volatile YunUtils INSTANCE;
- Context mContext;
- UserInfoModel mUserInfoModel;
- String token = "";
- String mDataFolderPath = "";
- String mUserInfoModelPath = "";
-
- private static final int CONNECT_TIMEOUT = 15; // 连接超时时间(秒)
- private static final int READ_TIMEOUT = 20; // 读取超时时间(秒)
- private static volatile YunUtils instance;
- private OkHttpClient okHttpClient;
- private Handler mainHandler; // 主线程 Handler
-
- // 私有构造方法,防止外部实例化
- private YunUtils(Context context) {
- LogUtils.d(TAG, "YunUtils");
- mContext = context;
- mDataFolderPath = mContext.getExternalFilesDir(TAG).toString();
- File fTest = new File(mDataFolderPath);
- if (!fTest.exists()) {
- fTest.mkdirs();
- }
- mUserInfoModelPath = mDataFolderPath + File.separator + "UserInfoModel.rsajson";
-
- okHttpClient = new OkHttpClient.Builder()
- .connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS)
- .readTimeout(READ_TIMEOUT, TimeUnit.SECONDS)
- .build();
- mainHandler = new Handler(Looper.getMainLooper()); // 获取主线程 Looper
- }
-
- // 公共静态方法,返回唯一实例
- public static synchronized YunUtils getInstance(Context context) {
- LogUtils.d(TAG, "getInstance");
- if (INSTANCE == null) {
- INSTANCE = new YunUtils(context);
- }
- return INSTANCE;
- }
-
- public void checkLoginStatus() {
- String token = getLocalToken();
- LogUtils.d(TAG, String.format("checkLoginStatus token is %s", token));
- }
-
- String getLocalToken() {
- UserInfoModel userInfoModel = loadUserInfoModel();
- return (userInfoModel == null) ?"": userInfoModel.getToken();
- }
-
- public void login(String host, UserInfoModel userInfoModel) {
- LogUtils.d(TAG, "login");
-
- // 发送 POST 请求
- String apiUrl = host + "/login/index.php";
- // 序列化对象为JSON
- Gson gson = new Gson();
- String jsonData = gson.toJson(userInfoModel); // 自动生成标准JSON
- //String jsonData = userInfoModel.toString();
- LogUtils.d(TAG, "要发送的数据 : " + jsonData);
-
- sendPostRequest(apiUrl, jsonData, new OnResponseListener() {
- // 成功回调(主线程)
- @Override
- public void onSuccess(String responseBody) {
- LogUtils.d(TAG, "onSuccess");
- LogUtils.d(TAG, String.format("responseBody %s", responseBody));
- Gson gson = new Gson();
- ResponseData result = gson.fromJson(responseBody, ResponseData.class); // 转为 Result 实例
- if(result.getStatus().equals(ResponseData.STATUS_SUCCESS)) {
-
- UserInfoModel userInfoModel = result.getData();
- if (userInfoModel != null) {
- LogUtils.d(TAG, "收到网站 UserInfoModel");
- String token = userInfoModel.getToken();
- saveLocalToken(token);
- checkLoginStatus();
- }
-
- } else if(result.getStatus().equals(ResponseData.STATUS_ERROR)) {
- try {
- String decodedMessage = URLDecoder.decode(result.getMessage(), "UTF-8");
- LogUtils.d(TAG, "服务器返回信息: " + decodedMessage);
- } catch (UnsupportedEncodingException e) {
- LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
- }
- }
- }
-
- // 失败回调(主线程)
- @Override
- public void onFailure(String errorMsg) {
- LogUtils.d(TAG, errorMsg);
- // 处理错误
- }
- });
- }
-
- public void saveLocalToken(String token) {
- UserInfoModel userInfoModel = new UserInfoModel();
- userInfoModel.setToken(token);
- saveUserInfoModel(userInfoModel);
- }
-
- UserInfoModel loadUserInfoModel() {
- LogUtils.d(TAG, "loadUserInfoModel");
- if (new File(mUserInfoModelPath).exists()) {
- try {
- // 加载加密后的模型数据
- byte[] encryptedData = FileUtils.readFileToByteArray(mUserInfoModelPath);
- // 加载 RSA 工具
- RSAUtils utils = RSAUtils.getInstance(mContext);
- KeyPair keyPair = utils.getOrGenerateKeys();
- //PublicKey publicKey = keyPair.getPublic();
- PrivateKey privateKey = keyPair.getPrivate();
- // 私钥解密模型数据
- String szInfo = utils.decryptWithPrivateKey(encryptedData, keyPair.getPrivate());
- LogUtils.d(TAG, String.format("szInfo %s", szInfo));
- mUserInfoModel = UserInfoModel.parseStringToBean(szInfo, UserInfoModel.class);
- if (mUserInfoModel == null) {
- LogUtils.d(TAG, "模型数据解析为空数据。");
- }
- LogUtils.d(TAG, "UserInfoModel 解密加载结束。");
- } catch (Exception e) {
- LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
- }
- } else {
- LogUtils.d(TAG, "云服务登录信息不存在。");
- mUserInfoModel = null;
- }
- return mUserInfoModel;
- }
-
- void saveUserInfoModel(UserInfoModel userInfoModel) {
- LogUtils.d(TAG, "saveUserInfoModel");
- try {
- String szInfo = userInfoModel.toString();
- LogUtils.d(TAG, "原始数据: " + szInfo);
-
- RSAUtils utils = RSAUtils.getInstance(mContext);
- KeyPair keyPair = utils.getOrGenerateKeys();
- PublicKey publicKey = keyPair.getPublic();
-
- // 公钥加密(传入字节数组,避免中间字符串转换)
- byte[] encryptedData = utils.encryptWithPublicKey(szInfo, publicKey);
-
- // 保存加密字节数组到文件(直接操作字节,无需转字符串)
- FileUtils.writeByteArrayToFile(encryptedData, mUserInfoModelPath);
- LogUtils.d(TAG, "加密数据已保存");
-
- // 测试解密(仅调试用)
- String szInfo2 = utils.decryptWithPrivateKey(encryptedData, keyPair.getPrivate());
- LogUtils.d(TAG, "解密结果: " + szInfo2);
-
- mUserInfoModel = UserInfoModel.parseStringToBean(szInfo2, UserInfoModel.class);
- if (mUserInfoModel == null) {
- LogUtils.d(TAG, "模型解析失败");
- }
- } catch (Exception e) {
- LogUtils.d(TAG, "加密/解密失败: " + e.getMessage());
- }
- }
-
- // 发送 POST 请求(JSON 数据)
- public void sendPostRequest(String url, String data, OnResponseListener listener) {
- RequestBody requestBody = RequestBody.create(
- MediaType.parse("application/json; charset=utf-8"), // 关键头信息
- data.getBytes(StandardCharsets.UTF_8)
- );
-
- Request request = new Request.Builder()
- .url(url)
- .post(requestBody)
- .addHeader("Content-Type", "application/json") // 显式添加头
- .build();
-
- executeRequest(request, listener);
- }
-
- // 发送 GET 请求
- public void sendGetRequest(String url, OnResponseListener listener) {
- Request request = new Request.Builder()
- .url(url)
- .get()
- .build();
- executeRequest(request, listener);
- }
-
- // 执行请求(子线程处理)
- private void executeRequest(final Request request, final OnResponseListener listener) {
- okHttpClient.newCall(request).enqueue(new Callback() {
- // 响应成功(子线程)
- @Override
- public void onResponse(Call call, Response response) throws IOException {
- try {
- if (!response.isSuccessful()) {
- postFailure(listener, "响应码错误:" + response.code());
- return;
- }
- String responseBody = response.body().string();
- postSuccess(listener, responseBody);
- } catch (Exception e) {
- postFailure(listener, "解析失败:" + e.getMessage());
- }
- }
-
- // 响应失败(子线程)
- @Override
- public void onFailure(Call call, IOException e) {
- postFailure(listener, "网络失败:" + e.getMessage());
- }
-
- // 主线程回调(使用 Handler)
- private void postSuccess(final OnResponseListener listener, final String msg) {
- mainHandler.post(new Runnable() {
- @Override
- public void run() {
- listener.onSuccess(msg);
- }
- });
- }
-
- private void postFailure(final OnResponseListener listener, final String msg) {
- mainHandler.post(new Runnable() {
- @Override
- public void run() {
- listener.onFailure(msg);
- }
- });
- }
- });
- }
-
- public interface OnResponseListener {
- /**
- * 成功响应(主线程回调)
- * @param responseBody 响应体字符串
- */
- void onSuccess(String responseBody);
-
- /**
- * 失败回调(包含错误信息)
- * @param errorMsg 错误描述
- */
- void onFailure(String errorMsg);
- }
-}
diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/widgets/StatusWidget.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/widgets/StatusWidget.java
deleted file mode 100644
index aa2476b8..00000000
--- a/libappbase/src/main/java/cc/winboll/studio/libappbase/widgets/StatusWidget.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package cc.winboll.studio.libappbase.widgets;
-
-/**
- * @Author ZhanGSKen
- * @Date 2025/02/17 20:32:12
- */
-import android.app.PendingIntent;
-import android.appwidget.AppWidgetManager;
-import android.appwidget.AppWidgetProvider;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.widget.RemoteViews;
-import cc.winboll.studio.libappbase.LogUtils;
-import cc.winboll.studio.libappbase.R;
-import cc.winboll.studio.libappbase.utils.ServiceUtils;
-import android.content.ServiceConnection;
-import android.os.IBinder;
-import cc.winboll.studio.libappbase.utils.ToastUtils;
-
-public class StatusWidget extends AppWidgetProvider {
-
- public static final String TAG = "StatusWidget";
-
- public static final String ACTION_STATUS_UPDATE = "cc.winboll.studio.libappbase.widgets.APPWidget.ACTION_STATUS_UPDATE";
-
- @Override
- public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
- for (int appWidgetId : appWidgetIds) {
- updateAppWidget(context, appWidgetManager, appWidgetId);
- }
- }
-
- @Override
- public void onReceive(Context context, Intent intent) {
- super.onReceive(context, intent);
- if (intent.getAction().equals(ACTION_STATUS_UPDATE)) {
- ToastUtils.show("Test");
- AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
- int[] appWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(context, StatusWidget.class));
- for (int appWidgetId : appWidgetIds) {
- updateAppWidget(context, appWidgetManager, appWidgetId);
- }
- }
- }
-
- private void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) {
- RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_status);
- //设置按钮点击事件
- Intent intentAppButton = new Intent(context, StatusWidgetClickListener.class);
- intentAppButton.setAction(StatusWidgetClickListener.ACTION_IVAPP);
- PendingIntent pendingIntentAppButton = PendingIntent.getBroadcast(context, 0, intentAppButton, PendingIntent.FLAG_UPDATE_CURRENT);
- views.setOnClickPendingIntent(R.id.ivapp, pendingIntentAppButton);
-
-// boolean isActive = ServiceUtils.isServiceRunning(context, TestService.class.getName());
-// if (isActive) {
-// views.setImageViewResource(R.id.ivapp, cc.winboll.studio.libappbase.R.drawable.ic_launcher);
-// } else {
-// views.setImageViewResource(R.id.ivapp, cc.winboll.studio.libappbase.R.drawable.ic_launcher_disable);
-// }
- appWidgetManager.updateAppWidget(appWidgetId, views);
- }
-}
diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/widgets/StatusWidgetClickListener.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/widgets/StatusWidgetClickListener.java
deleted file mode 100644
index 911b1d64..00000000
--- a/libappbase/src/main/java/cc/winboll/studio/libappbase/widgets/StatusWidgetClickListener.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package cc.winboll.studio.libappbase.widgets;
-
-/**
- * @Author ZhanGSKen
- * @Date 2025/02/17 20:33:53
- * @Describe APPWidgetClickListener
- */
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import cc.winboll.studio.libappbase.LogUtils;
-import cc.winboll.studio.libappbase.utils.ToastUtils;
-
-public class StatusWidgetClickListener extends BroadcastReceiver {
-
- public static final String TAG = "APPWidgetClickListener";
-
- public static final String ACTION_IVAPP = "cc.winboll.studio.libappbase.widgets.StatusWidgetClickListener.ACTION_IVAPP";
-
- @Override
- public void onReceive(Context context, Intent intent) {
- String action = intent.getAction();
- if (action == null) {
- LogUtils.d(TAG, String.format("action %s", action));
- return;
- }
- if (action.equals(ACTION_IVAPP)) {
- ToastUtils.show("ACTION_LAUNCHER");
- } else {
- LogUtils.d(TAG, String.format("action %s", action));
- }
- }
-}
diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/winboll/IWinBoLLActivity.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/winboll/IWinBoLLActivity.java
deleted file mode 100644
index 0aaf6fda..00000000
--- a/libappbase/src/main/java/cc/winboll/studio/libappbase/winboll/IWinBoLLActivity.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package cc.winboll.studio.libappbase.winboll;
-import android.app.Activity;
-
-/**
- * @Author ZhanGSKen
- * @Date 2025/05/10 09:34
- * @Describe WinBoLL 窗口操作接口
- */
-public abstract interface IWinBoLLActivity {
-
- public static final String TAG = "IWinBoLLActivity";
-
- public static final String ACTION_BIND = IWinBoLLActivity.class.getName() + ".ACTION_BIND";
-
- public Activity getActivity();
- public String getTag();
-}
diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/winboll/MyActivityLifecycleCallbacks.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/winboll/MyActivityLifecycleCallbacks.java
deleted file mode 100644
index 892f35f7..00000000
--- a/libappbase/src/main/java/cc/winboll/studio/libappbase/winboll/MyActivityLifecycleCallbacks.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package cc.winboll.studio.libappbase.winboll;
-
-/**
- * @Author ZhanGSKen
- * @Date 2025/03/25 04:29:19
- */
-import android.app.Activity;
-import android.app.Application;
-import android.content.Intent;
-import android.os.Bundle;
-import cc.winboll.studio.libappbase.LogUtils;
-import cc.winboll.studio.libappbase.utils.ToastUtils;
-
-public class MyActivityLifecycleCallbacks implements Application.ActivityLifecycleCallbacks {
-
- public static final String TAG = "MyActivityLifecycleCallbacks";
-
- public String mInfo = "";
-
- public MyActivityLifecycleCallbacks() {
-
- }
-
- void createActivityeInfo(Activity activity) {
- StringBuilder sb = new StringBuilder();
- Intent receivedIntent = activity.getIntent();
- sb.append("\nCallingActivity : \n");
- if (activity.getCallingActivity() != null) {
- sb.append(activity.getCallingActivity().getPackageName());
- }
- sb.append("\nReceived Intent Package : \n");
- sb.append(receivedIntent.getPackage());
-
- Bundle extras = receivedIntent.getExtras();
- if (extras != null) {
- for (String key : extras.keySet()) {
- sb.append("\nIntentInfo");
- sb.append("\n键: ");
- sb.append(key);
- sb.append(", 值: ");
- sb.append(extras.get(key));
- //Log.d("IntentInfo", "键: " + key + ", 值: " + extras.get(key));
- }
- }
- mInfo = sb.toString();
- //Log.d("IntentInfo", "发送Intent的应用包名: " + senderPackage);
- }
-
- public void showActivityeInfo() {
- //ToastUtils.show("ActivityeInfo : " + mInfo);
- LogUtils.d(TAG, "ActivityeInfo : " + mInfo);
- }
-
- @Override
- public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
- // 在这里可以做一些初始化相关的操作,例如记录Activity的创建时间等
- //System.out.println(activity.getLocalClassName() + " was created");
- LogUtils.d(TAG, activity.getLocalClassName() + " was created");
- createActivityeInfo(activity);
- }
-
- @Override
- public void onActivityStarted(Activity activity) {
- //System.out.println(activity.getLocalClassName() + " was started");
- LogUtils.d(TAG, activity.getLocalClassName() + " was started");
- //createActivityeInfo(activity);
- }
-
- @Override
- public void onActivityResumed(Activity activity) {
- //System.out.println(activity.getLocalClassName() + " was resumed");
- LogUtils.d(TAG, activity.getLocalClassName() + " was resumed");
- //createActivityeInfo(activity);
- }
-
- @Override
- public void onActivityPaused(Activity activity) {
- //System.out.println(activity.getLocalClassName() + " was paused");
- LogUtils.d(TAG, activity.getLocalClassName() + " was paused");
- }
-
- @Override
- public void onActivityStopped(Activity activity) {
- //System.out.println(activity.getLocalClassName() + " was stopped");
- LogUtils.d(TAG, activity.getLocalClassName() + " was stopped");
- }
-
- @Override
- public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
- // 可以在这里添加保存状态的自定义逻辑
- }
-
- @Override
- public void onActivityDestroyed(Activity activity) {
- //System.out.println(activity.getLocalClassName() + " was destroyed");
- LogUtils.d(TAG, activity.getLocalClassName() + " was destroyed");
- }
-}
diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/winboll/WinBoLL.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/winboll/WinBoLL.java
deleted file mode 100644
index f94db1db..00000000
--- a/libappbase/src/main/java/cc/winboll/studio/libappbase/winboll/WinBoLL.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package cc.winboll.studio.libappbase.winboll;
-
-/**
- * @Author ZhanGSKen
- * @Date 2025/05/10 10:13
- * @Describe WinBoLL 系列应用通用管理类
- */
-import android.content.Context;
-import android.content.Intent;
-import cc.winboll.studio.libappbase.LogUtils;
-import cc.winboll.studio.libappbase.models.WinBoLLModel;
-
-public class WinBoLL {
-
- public static final String TAG = "WinBoLL";
-
- public static final String ACTION_BIND = WinBoLL.class.getName() + ".ACTION_BIND";
- public static final String EXTRA_WINBOLLMODEL = "EXTRA_WINBOLLMODEL";
-
- public static void bindToAPPBase(Context context, String appMainService) {
- LogUtils.d(TAG, "bindToAPPBase(...)");
- String toPackage = "cc.winboll.studio.appbase";
- startBind(context, toPackage, appMainService);
- }
-
- public static void bindToAPPBaseBeta(Context context, String appMainService) {
- LogUtils.d(TAG, "bindToAPPBaseBeta(...)");
- String toPackage = "cc.winboll.studio.appbase.beta";
- startBind(context, toPackage, appMainService);
- }
-
- static void startBind(Context context, String toPackage, String appMainService) {
- Intent intent = new Intent(ACTION_BIND);
- intent.putExtra(EXTRA_WINBOLLMODEL, (new WinBoLLModel(toPackage, appMainService)).toString());
- intent.setPackage(toPackage);
- LogUtils.d(TAG, String.format("ACTION_BIND :\nTo Package : %s\nAPP Main Service : %s", toPackage, appMainService));
- context.sendBroadcast(intent);
- }
-
-}
diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/winboll/WinBoLLActivityManager.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/winboll/WinBoLLActivityManager.java
deleted file mode 100644
index 220294d7..00000000
--- a/libappbase/src/main/java/cc/winboll/studio/libappbase/winboll/WinBoLLActivityManager.java
+++ /dev/null
@@ -1,287 +0,0 @@
-package cc.winboll.studio.libappbase.winboll;
-
-/**
- * @Author ZhanGSKen
- * @Date 2025/05/10 10:02
- * @Describe 应用活动窗口管理器
- * 参考 :
- * android 类似微信小程序多任务窗口 及 设置 TaskDescription 修改 icon 和 label
- * https://blog.csdn.net/qq_29364417/article/details/109379915?app_version=6.4.2&code=app_1562916241&csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22109379915%22%2C%22source%22%3A%22weixin_38986226%22%7D&uLinkId=usr1mkqgl919blen&utm_source=app
- */
-import android.app.Activity;
-import android.app.ActivityManager;
-import android.app.TaskStackBuilder;
-import android.content.Context;
-import android.content.Intent;
-import cc.winboll.studio.libappbase.GlobalApplication;
-import cc.winboll.studio.libappbase.LogUtils;
-import cc.winboll.studio.libappbase.utils.ToastUtils;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-public class WinBoLLActivityManager {
-
- public static final String TAG = "WinBoLLActivityManager";
-
- public static final String EXTRA_TAG = "EXTRA_TAG";
-
-
- public enum WinBoLLUI_TYPE { Aplication, Service }
-
- Context mContext;
- volatile static WinBoLLActivityManager _mIWinBoLLActivityManager;
- Map mActivityListMap;
-
- volatile static WinBoLLUI_TYPE _WinBoLLUI_TYPE = WinBoLLUI_TYPE.Service;
- public static void setWinBoLLUI_TYPE(WinBoLLUI_TYPE winBoLLUI_TYPE) {
- _WinBoLLUI_TYPE = winBoLLUI_TYPE;
- }
-
- public static WinBoLLUI_TYPE getWinBoLLUI_TYPE() {
- return _WinBoLLUI_TYPE;
- }
- WinBoLLActivityManager() {
- mContext = GlobalApplication.getInstance();
- mActivityListMap = new HashMap();
- }
-
- public static synchronized WinBoLLActivityManager getInstance() {
- if (_mIWinBoLLActivityManager == null) {
- _mIWinBoLLActivityManager = new WinBoLLActivityManager();
- }
- return _mIWinBoLLActivityManager;
- }
-
- /**
- * 把Activity添加到管理中
- */
- public void add(T activity) {
- if (isActivityActive(activity.getTag())) {
- LogUtils.d(TAG, String.format("add(...) %s is active.", activity.getTag()));
- } else {
- mActivityListMap.put(activity.getTag(), activity);
- LogUtils.d(TAG, String.format("Add activity : %s\n_mapActivityList.size() : %d", activity.getTag(), mActivityListMap.size()));
- }
- }
-
- //
- // activity: 为 null 时,
- // intent.putExtra 函数 "tag" 参数为 tag
- // activity: 不为 null 时,
- // intent.putExtra 函数 "tag" 参数为 activity.getTag()
- //
- public void startWinBoLLActivity(Context context, Class clazz) {
- // 如果窗口已存在就重启窗口
- if (!resumeActivity(clazz)) {
- // 新建一个任务窗口
- Intent intent = new Intent(context, clazz);
- //打开多任务窗口 flags
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
- intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
- //intent.putExtra("tag", tag);
- context.startActivity(intent);
- }
- }
-
- public void startWinBoLLActivity(Context context, Intent intent, Class clazz) {
- // 如果窗口已存在就重启窗口
- if (!resumeActivity(clazz)) {
- // 新建一个任务窗口
- //Intent intent = new Intent(context, clazz);
- //打开多任务窗口 flags
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
- intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
- //intent.putExtra("tag", tag);
- context.startActivity(intent);
- }
- }
-
- public void startLogActivity(Context context) {
- // 如果窗口已存在就重启窗口
- //if (!resumeActivity(LogActivity.class)) {
- // 新建一个任务窗口
- Intent intent = new Intent(context, LogActivity.class);
- //打开多任务窗口 flags
- // Define the bounds.
-// Rect bounds = new Rect(0, 0, 800, 200);
-// // Set the bounds as an activity option.
-// ActivityOptions options = ActivityOptions.makeBasic();
-// options.setLaunchBounds(bounds);
- intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT);
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
- intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
-
- //intent.putExtra(EXTRA_TAG, tag);
-
- //context.startActivity(intent, options.toBundle());
- context.startActivity(intent);
- //}
- }
-
- //
- // 判断 tag 绑定的 Activity 是否已经创建
- //
- public boolean isActivityActive(String tag) {
- return mActivityListMap.get(tag) != null;
- }
-
- Activity getActivityByTag(String tag) {
- return (mActivityListMap.get(tag) == null) ?null: mActivityListMap.get(tag).getActivity();
- }
-
-
- //
- // 找到tag 绑定的 BaseActivity ,通过 getTaskId() 移动到前台
- //
- public boolean resumeActivity(Class clazz) {
- try {
- Activity activity = getActivityByTag(clazz.newInstance().getTag());
- if (activity != null) {
- return resumeActivity(activity);
- }
- } catch (InstantiationException | IllegalAccessException e) {
- LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
- }
- return false;
- }
-
- //
- // 找到tag 绑定的 BaseActivity ,通过 getTaskId() 移动到前台
- //
- public boolean resumeActivity(String tag) {
- Activity activity = getActivityByTag(tag);
- if (activity != null) {
- return resumeActivity(activity);
- }
- return false;
- }
-
- //
- // 找到tag 绑定的 BaseActivity ,通过 getTaskId() 移动到前台
- //
- public boolean resumeActivity(Activity activity) {
- ActivityManager am = (ActivityManager) activity.getSystemService(Context.ACTIVITY_SERVICE);
- //返回启动它的根任务(home 或者 MainActivity)
- //Intent intent = new Intent(mContext, activity.getClass());
- //TaskStackBuilder stackBuilder = TaskStackBuilder.create(mContext);
- //stackBuilder.addNextIntentWithParentStack(intent);
- //stackBuilder.startActivities();
- am.moveTaskToFront(activity.getTaskId(), ActivityManager.MOVE_TASK_NO_USER_ACTION);
- //ToastUtils.show("resumeActivity");
- return true;
- }
-
-
- /**
- * 结束所有 Activity
- */
- public void finishAll() {
- try {
- //ToastUtils.show(String.format("finishAll() size : %d", _mIWinBoLLActivityList.size()));
- for (int i = mActivityListMap.size() - 1; i > -1; i--) {
- IWinBoLLActivity iWinBoLLActivity = mActivityListMap.get(i);
- ToastUtils.show("finishAll() activity");
- if (iWinBoLLActivity != null && iWinBoLLActivity.getActivity() != null && !iWinBoLLActivity.getActivity().isFinishing() && !iWinBoLLActivity.getActivity().isDestroyed()) {
- //ToastUtils.show("activity != null ...");
- if (GlobalApplication.getWinBoLLActivityManager().getWinBoLLUI_TYPE() == WinBoLLUI_TYPE.Service) {
- // 结束窗口和最近任务栏, 建议前台服务类应用使用,可以方便用户再次调用 UI 操作。
- iWinBoLLActivity.getActivity().finishAndRemoveTask();
- //ToastUtils.show("finishAll() activity.finishAndRemoveTask();");
- } else if (GlobalApplication.getWinBoLLActivityManager().getWinBoLLUI_TYPE() == WinBoLLUI_TYPE.Aplication) {
- // 结束窗口保留最近任务栏,建议前台服务类应用使用,可以保持应用的系统自觉性。
- iWinBoLLActivity.getActivity().finish();
- //ToastUtils.show("finishAll() activity.finish();");
- } else {
- ToastUtils.show("WinBollApplication.WinBollUI_TYPE error.");
- }
- }
- }
- } catch (Exception e) {
- LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
- }
- }
-
- /**
- * 结束指定Activity
- */
- public void finish(T iWinBoLLActivity) {
- try {
- if (iWinBoLLActivity != null && iWinBoLLActivity.getActivity() != null && !iWinBoLLActivity.getActivity().isFinishing() && !iWinBoLLActivity.getActivity().isDestroyed()) {
- //根据tag 移除 MyActivity
- //String tag= activity.getTag();
- //_mIWinBoLLActivityList.remove(tag);
- //ToastUtils.show("remove");
- //ToastUtils.show("_mIWinBoLLActivityArrayMap.size() " + Integer.toString(_mIWinBoLLActivityArrayMap.size()));
-
- // 窗口回调规则:
- // [] 当前窗口位置 >> 调度出的窗口位置
- // ★:[0] 1 2 3 4 >> 1
- // ★:0 1 [2] 3 4 >> 1
- // ★:0 1 2 [3] 4 >> 2
- // ★:0 1 2 3 [4] >> 3
- // ★:[0] >> 直接关闭当前窗口
- Activity preActivity = getPreActivity(iWinBoLLActivity);
- iWinBoLLActivity.getActivity().finish();
- if (preActivity != null) {
- resumeActivity(preActivity);
- }
- }
-
- } catch (Exception e) {
- LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
- }
- }
-
- Activity getPreActivity(IWinBoLLActivity iWinBoLLActivity) {
- try {
- boolean bingo = false;
- IWinBoLLActivity preIWinBoLLActivity = null;
- for (Map.Entry entity : mActivityListMap.entrySet()) {
- if (entity.getKey().equals(iWinBoLLActivity.getTag())) {
- bingo = true;
- LogUtils.d(TAG, "bingo");
- break;
- }
- preIWinBoLLActivity = entity.getValue();
- }
-
- if (bingo) {
- return preIWinBoLLActivity.getActivity();
- }
- } catch (Exception e) {
- LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
- }
-
- return null;
- }
-
- public boolean registeRemove(T iWinBoLLActivity) {
- IWinBoLLActivity iWinBoLLActivityTest = mActivityListMap.get(iWinBoLLActivity.getTag());
- if (iWinBoLLActivityTest != null) {
- mActivityListMap.remove(iWinBoLLActivity.getTag());
- return true;
- }
- return false;
- }
-
- public void printAvtivityListInfo() {
- if (!mActivityListMap.isEmpty()) {
- StringBuilder sb = new StringBuilder("Map entries : " + Integer.toString(mActivityListMap.size()));
- Iterator> iterator = mActivityListMap.entrySet().iterator();
- while (iterator.hasNext()) {
- Map.Entry entry = iterator.next();
- sb.append("\nKey: " + entry.getKey() + ", \nValue: " + entry.getValue().getTag());
- //ToastUtils.show("\nKey: " + entry.getKey() + ", Value: " + entry.getValue().getTag());
- }
- sb.append("\nMap entries end.");
- LogUtils.d(TAG, sb.toString());
- } else {
- LogUtils.d(TAG, "The map is empty.");
- }
- }
-}
-