diff --git a/appbase/build.properties b/appbase/build.properties
index 54a3e96..374e248 100644
--- a/appbase/build.properties
+++ b/appbase/build.properties
@@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle
-#Mon Feb 17 12:10:03 HKT 2025
+#Tue Feb 18 19:15:30 GMT 2025
stageCount=3
libraryProject=libappbase
baseVersion=1.5
publishVersion=1.5.2
-buildCount=0
+buildCount=58
baseBetaVersion=1.5.3
diff --git a/appbase/src/main/AndroidManifest.xml b/appbase/src/main/AndroidManifest.xml
index cac5b8b..ac115df 100644
--- a/appbase/src/main/AndroidManifest.xml
+++ b/appbase/src/main/AndroidManifest.xml
@@ -61,12 +61,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
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 472ba2d..0fb013f 100644
--- a/appbase/src/main/java/cc/winboll/studio/appbase/MainActivity.java
+++ b/appbase/src/main/java/cc/winboll/studio/appbase/MainActivity.java
@@ -9,15 +9,15 @@ import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import cc.winboll.studio.appbase.R;
import cc.winboll.studio.appbase.services.MainService;
-import cc.winboll.studio.appbase.services.TestService;
import cc.winboll.studio.libappbase.GlobalApplication;
import cc.winboll.studio.libappbase.LogUtils;
import cc.winboll.studio.libappbase.LogView;
import cc.winboll.studio.libappbase.SOS;
import cc.winboll.studio.libappbase.SimpleOperateSignalCenterService;
-import cc.winboll.studio.libappbase.widgets.APPSOSReportWidget;
-import com.hjq.toast.ToastUtils;
import cc.winboll.studio.libappbase.bean.APPSOSBean;
+import cc.winboll.studio.libappbase.services.TestService;
+import cc.winboll.studio.libappbase.widgets.StatusWidget;
+import com.hjq.toast.ToastUtils;
public class MainActivity extends AppCompatActivity {
@@ -41,6 +41,14 @@ public class MainActivity extends AppCompatActivity {
if (GlobalApplication.isDebuging()) { mLogView.start(); }
}
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ Intent intentAPPWidget = new Intent(this, StatusWidget.class);
+ intentAPPWidget.setAction(StatusWidget.ACTION_STATUS_UPDATE);
+ sendBroadcast(intentAPPWidget);
+ }
+
@Override
protected void onResume() {
LogUtils.d(TAG, "onResume");
@@ -83,39 +91,23 @@ public class MainActivity extends AppCompatActivity {
Intent intent = new Intent(this, TestService.class);
stopService(intent);
SOS.sosWinBollService(this, new APPSOSBean(getPackageName(), TestService.class.getName()));
-
-// Intent intentTimeWidget = new Intent(this, TimeWidget.class);
-// intentTimeWidget.setAction(TimeWidget.UPDATE_TIME_ACTION);
-// intentTimeWidget.putExtra("appName", "TestName");
-// sendBroadcast(intentTimeWidget);
-//
}
-// public void sos() {
-// // 创建Intent对象,指定广播的action
-// Intent intent = new Intent(SOSCSBroadcastReceiver.ACTION_SOS);
-// // 目标服务的包名和类名
-// String packageName = this.getPackageName();
-// String serviceClassName = SimpleOperateSignalCenterService.class.getName();
-// intent.putExtra(ISOSAPP.EXTRA_PACKAGE, packageName);
-// intent.putExtra(ISOSAPP.EXTRA_SERVICE, serviceClassName);
-// // 发送广播
-// sendBroadcast(intent);
-// LogUtils.d(TAG, "onSOS");
-// }
-//
-// public void sos2() {
-// // 创建Intent对象,指定广播的action
-// Intent intent = new Intent(SOSCSBroadcastReceiver.ACTION_SOS);
-// // 目标服务的包名和类名
-// String packageName = this.getPackageName();
-// String serviceClassName = SimpleOperateSignalCenterService.class.getName();
-// intent.putExtra(ISOSAPP.EXTRA_PACKAGE, packageName);
-// intent.putExtra(ISOSAPP.EXTRA_SERVICE, serviceClassName);
-// // 发送广播
-// sendBroadcast(intent);
-// LogUtils.d(TAG, "onSOS2");
-// }
+ public void onStartTestService(View view) {
+ Intent intent = new Intent(this, TestService.class);
+ startService(intent);
+ }
+ public void onStopTestService(View view) {
+ Intent intent = new Intent(this, TestService.class);
+ stopService(intent);
+
+ }
+
+ public void onUpdateAPPWidget(View view) {
+ Intent intentAPPWidget = new Intent(this, StatusWidget.class);
+ intentAPPWidget.setAction(StatusWidget.ACTION_STATUS_UPDATE);
+ sendBroadcast(intentAPPWidget);
+ }
}
diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/bean/APPSOSReportBean.java b/appbase/src/main/java/cc/winboll/studio/appbase/beans/SOSReportBean.java
similarity index 88%
rename from libappbase/src/main/java/cc/winboll/studio/libappbase/bean/APPSOSReportBean.java
rename to appbase/src/main/java/cc/winboll/studio/appbase/beans/SOSReportBean.java
index c2911e1..d579482 100644
--- a/libappbase/src/main/java/cc/winboll/studio/libappbase/bean/APPSOSReportBean.java
+++ b/appbase/src/main/java/cc/winboll/studio/appbase/beans/SOSReportBean.java
@@ -1,4 +1,4 @@
-package cc.winboll.studio.libappbase.bean;
+package cc.winboll.studio.appbase.beans;
/**
* @Author ZhanGSKen@AliYun.Com
@@ -10,17 +10,17 @@ import android.util.JsonWriter;
import cc.winboll.studio.libappbase.BaseBean;
import java.io.IOException;
-public class APPSOSReportBean extends BaseBean {
+public class SOSReportBean extends BaseBean {
public static final String TAG = "APPSOSReportBean";
protected String sosReport;
- public APPSOSReportBean() {
+ public SOSReportBean() {
this.sosReport = "";
}
- public APPSOSReportBean(String sosReport) {
+ public SOSReportBean(String sosReport) {
this.sosReport = sosReport;
}
@@ -34,7 +34,7 @@ public class APPSOSReportBean extends BaseBean {
@Override
public String getName() {
- return APPSOSReportBean.class.getName();
+ return SOSReportBean.class.getName();
}
@Override
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
index 17d8791..ce66f5c 100644
--- a/appbase/src/main/java/cc/winboll/studio/appbase/services/MainService.java
+++ b/appbase/src/main/java/cc/winboll/studio/appbase/services/MainService.java
@@ -24,7 +24,7 @@ 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.libappbase.LogUtils;
-import cc.winboll.studio.libappbase.widgets.APPSOSReportWidget;
+import cc.winboll.studio.appbase.widgets.SOSWidget;
public class MainService extends Service {
@@ -96,8 +96,8 @@ public class MainService extends Service {
}
// 启动小部件
- Intent intentTimeWidget = new Intent(this, APPSOSReportWidget.class);
- intentTimeWidget.setAction(APPSOSReportWidget.ACTION_RELOAD_SOS_REPORT);
+ Intent intentTimeWidget = new Intent(this, SOSWidget.class);
+ intentTimeWidget.setAction(SOSWidget.ACTION_RELOAD_REPORT);
this.sendBroadcast(intentTimeWidget);
startMainServiceThread();
diff --git a/appbase/src/main/java/cc/winboll/studio/appbase/services/TestService.java b/appbase/src/main/java/cc/winboll/studio/appbase/services/TestService.java
index d01d4c3..b569aca 100644
--- a/appbase/src/main/java/cc/winboll/studio/appbase/services/TestService.java
+++ b/appbase/src/main/java/cc/winboll/studio/appbase/services/TestService.java
@@ -1,42 +1,3 @@
package cc.winboll.studio.appbase.services;
-import android.app.Service;
-import android.content.Intent;
-import android.os.IBinder;
-import cc.winboll.studio.libappbase.LogUtils;
-/**
- * @Author ZhanGSKen@AliYun.Com
- * @Date 2025/02/15 20:48:36
- * @Describe TestService
- */
-public class TestService extends Service {
-
- public static final String TAG = "TestService";
-
- @Override
- public IBinder onBind(Intent intent) {
-
- return null;
- }
-
- @Override
- public void onCreate() {
- super.onCreate();
- LogUtils.d(TAG, "onCreate()");
- }
-
- @Override
- public int onStartCommand(Intent intent, int flags, int startId) {
- LogUtils.d(TAG, "onStartCommand(...)");
- return super.onStartCommand(intent, flags, startId);
- }
-
- @Override
- public void onDestroy() {
- super.onDestroy();
- LogUtils.d(TAG, "onDestroy()");
- }
-
-
-}
diff --git a/appbase/src/main/java/cc/winboll/studio/appbase/widgets/SOSWidget.java b/appbase/src/main/java/cc/winboll/studio/appbase/widgets/SOSWidget.java
new file mode 100644
index 0000000..b10de45
--- /dev/null
+++ b/appbase/src/main/java/cc/winboll/studio/appbase/widgets/SOSWidget.java
@@ -0,0 +1,192 @@
+package cc.winboll.studio.appbase.widgets;
+/**
+ * @Author ZhanGSKen@AliYun.Com
+ * @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.beans.SOSReportBean;
+import cc.winboll.studio.libappbase.AppUtils;
+import cc.winboll.studio.libappbase.LogUtils;
+import cc.winboll.studio.libappbase.bean.APPSOSBean;
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+
+public class SOSWidget extends AppWidgetProvider {
+
+ public static final String TAG = "SOSWidget";
+
+ public static final String ACTION_SOS = "cc.winboll.studio.appbase.widgets.SOSWidget.ACTION_SOS";
+ public static final String ACTION_RELOAD_REPORT = "cc.winboll.studio.appbase.widgets.SOSWidget.ACTION_RELOAD_REPORT";
+
+
+ volatile static ArrayList _SOSReportBeanList;
+ 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) {
+ initAPPSOSReportBeanList(context);
+ for (int appWidgetId : appWidgetIds) {
+ updateAppWidget(context, appWidgetManager, appWidgetId);
+ }
+ }
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ super.onReceive(context, intent);
+ initAPPSOSReportBeanList(context);
+ if (intent.getAction().equals(ACTION_SOS)) {
+ LogUtils.d(TAG, "ACTION_SOS");
+ LogUtils.d(TAG, String.format("context.getPackageName() %s", context.getPackageName()));
+ LogUtils.d(TAG, String.format("intent.getAction() %s", intent.getAction()));
+ String SOS = intent.getStringExtra("SOS");
+ LogUtils.d(TAG, String.format("SOS %s", SOS));
+ if (SOS != null && SOS.equals("Service")) {
+ String szAPPSOSBean = intent.getStringExtra("APPSOSBean");
+ LogUtils.d(TAG, String.format("szAPPSOSBean %s", szAPPSOSBean));
+ if (szAPPSOSBean != null && !szAPPSOSBean.equals("")) {
+ try {
+ APPSOSBean bean = APPSOSBean.parseStringToBean(szAPPSOSBean, APPSOSBean.class);
+ if (bean != null) {
+ String sosPackage = bean.getSosPackage();
+ LogUtils.d(TAG, String.format("sosPackage %s", sosPackage));
+ String sosClassName = bean.getSosClassName();
+ LogUtils.d(TAG, String.format("sosClassName %s", sosClassName));
+
+ Intent intentService = new Intent();
+ intentService.setComponent(new ComponentName(sosPackage, sosClassName));
+ context.startService(intentService);
+
+ String appName = AppUtils.getAppNameByPackageName(context, sosPackage);
+ LogUtils.d(TAG, String.format("appName %s", appName));
+ SOSReportBean appSOSReportBean = new SOSReportBean(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);
+ appSOSReportBean.setSosReport(sbLine.toString());
+ addAPPSOSReportBean(context, appSOSReportBean);
+
+ AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
+ int[] appWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(context, SOSWidget.class));
+ for (int appWidgetId : appWidgetIds) {
+ updateAppWidget(context, appWidgetManager, appWidgetId);
+ }
+ }
+ } catch (IOException e) {
+ LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
+ }
+ }
+ }
+ } else 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, SOSWidget.class));
+ for (int appWidgetId : appWidgetIds) {
+ updateAppWidget(context, appWidgetManager, appWidgetId);
+ }
+ }
+ }
+
+ //
+ // 加入新报告信息
+ //
+ void addAPPSOSReportBean(Context context, SOSReportBean bean) {
+ initAPPSOSReportBeanList(context);
+ _SOSReportBeanList.add(0, bean);
+ // 控制记录总数
+ while (_SOSReportBeanList.size() > _MAX_PAGES * _OnePageLinesCount) {
+ _SOSReportBeanList.remove(_SOSReportBeanList.size() - 1);
+ }
+ SOSReportBean.saveBeanList(context, _SOSReportBeanList, SOSReportBean.class);
+ }
+
+ void initAPPSOSReportBeanList(Context context) {
+ if (_SOSReportBeanList == null) {
+ _SOSReportBeanList = new ArrayList();
+ SOSReportBean.loadBeanList(context, _SOSReportBeanList, SOSReportBean.class);
+ }
+ if (_SOSReportBeanList == null) {
+ _SOSReportBeanList = new ArrayList();
+ SOSReportBean.saveBeanList(context, _SOSReportBeanList, SOSReportBean.class);
+ }
+ }
+
+ private void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) {
+ LogUtils.d(TAG, "updateAppWidget(...)");
+
+ RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_sos);
+ //设置按钮点击事件
+ Intent intentPre = new Intent(context, SOSWidgetClickListener.class);
+ intentPre.setAction(SOSWidgetClickListener.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, SOSWidgetClickListener.class);
+ intentNext.setAction(SOSWidgetClickListener.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.infoTextView, getPageInfo());
+ views.setTextViewText(R.id.sosReportTextView, getMessage());
+ appWidgetManager.updateAppWidget(appWidgetId, views);
+ }
+
+ public static String getMessage() {
+ ArrayList msgTemp = new ArrayList();
+ if (_SOSReportBeanList != null) {
+ int start = _OnePageLinesCount * _CurrentPageIndex;
+ start = _SOSReportBeanList.size() > start ? start : _SOSReportBeanList.size() - 1;
+ for (int i = start, j = 0; i < _SOSReportBeanList.size() && j < _OnePageLinesCount; i++, j++) {
+ msgTemp.add(_SOSReportBeanList.get(i).getSosReport());
+ }
+ String message = String.join("\n", msgTemp);
+ return message;
+ }
+ return "";
+ }
+
+ public static void prePage(Context context) {
+ if (_SOSReportBeanList != null) {
+ if (_CurrentPageIndex > 0) {
+ _CurrentPageIndex = _CurrentPageIndex - 1;
+ }
+ Intent intentWidget = new Intent(context, SOSWidget.class);
+ intentWidget.setAction(SOSWidget.ACTION_RELOAD_REPORT);
+ context.sendBroadcast(intentWidget);
+ }
+ }
+
+ public static void nextPage(Context context) {
+ if (_SOSReportBeanList != null) {
+ if ((_CurrentPageIndex + 1) * _OnePageLinesCount < _SOSReportBeanList.size()) {
+ _CurrentPageIndex = _CurrentPageIndex + 1;
+ }
+ Intent intentWidget = new Intent(context, SOSWidget.class);
+ intentWidget.setAction(SOSWidget.ACTION_RELOAD_REPORT);
+ context.sendBroadcast(intentWidget);
+ }
+ }
+
+ String getPageInfo() {
+ if (_SOSReportBeanList == null) {
+ return "0/0";
+ }
+ int leftCount = _SOSReportBeanList.size() % _OnePageLinesCount;
+ int currentPageCount = _SOSReportBeanList.size() / _OnePageLinesCount + (leftCount == 0 ?0: 1);
+ return String.format("%d/%d", _CurrentPageIndex + 1, currentPageCount);
+ }
+}
diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/widgets/WidgetButtonClickListener.java b/appbase/src/main/java/cc/winboll/studio/appbase/widgets/SOSWidgetClickListener.java
similarity index 64%
rename from libappbase/src/main/java/cc/winboll/studio/libappbase/widgets/WidgetButtonClickListener.java
rename to appbase/src/main/java/cc/winboll/studio/appbase/widgets/SOSWidgetClickListener.java
index 696238a..42dc31f 100644
--- a/libappbase/src/main/java/cc/winboll/studio/libappbase/widgets/WidgetButtonClickListener.java
+++ b/appbase/src/main/java/cc/winboll/studio/appbase/widgets/SOSWidgetClickListener.java
@@ -1,4 +1,4 @@
-package cc.winboll.studio.libappbase.widgets;
+package cc.winboll.studio.appbase.widgets;
/**
* @Author ZhanGSKen@AliYun.Com
@@ -10,11 +10,11 @@ import android.content.Context;
import android.content.Intent;
import cc.winboll.studio.libappbase.LogUtils;
-public class WidgetButtonClickListener extends BroadcastReceiver {
+public class SOSWidgetClickListener extends BroadcastReceiver {
- public static final String TAG = "WidgetButtonClickListener";
- public static final String ACTION_PRE = "cc.winboll.studio.libappbase.widgets.WidgetButtonClickListener.ACTION_PRE";
- public static final String ACTION_NEXT = "cc.winboll.studio.libappbase.widgets.WidgetButtonClickListener.ACTION_NEXT";
+ public static final String TAG = "SOSWidgetClickListener";
+ public static final String ACTION_PRE = "cc.winboll.studio.appbase.widgets.SOSWidgetClickListener.ACTION_PRE";
+ public static final String ACTION_NEXT = "cc.winboll.studio.appbase.widgets.SOSWidgetClickListener.ACTION_NEXT";
@Override
public void onReceive(Context context, Intent intent) {
@@ -25,10 +25,10 @@ public class WidgetButtonClickListener extends BroadcastReceiver {
}
if (action.equals(ACTION_PRE)) {
LogUtils.d(TAG, "ACTION_PRE");
- APPSOSReportWidget.prePage(context);
+ SOSWidget.prePage(context);
} else if (action.equals(ACTION_NEXT)) {
LogUtils.d(TAG, "ACTION_NEXT");
- APPSOSReportWidget.nextPage(context);
+ SOSWidget.nextPage(context);
} else {
LogUtils.d(TAG, String.format("action %s", action));
}
diff --git a/appbase/src/main/res/layout/activity_main.xml b/appbase/src/main/res/layout/activity_main.xml
index 4603221..56944c4 100644
--- a/appbase/src/main/res/layout/activity_main.xml
+++ b/appbase/src/main/res/layout/activity_main.xml
@@ -47,47 +47,88 @@
-
+ android:layout_height="400dp">
-
+ android:gravity="right">
-
+
-
-
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/libappbase/src/main/res/xml/appwidget_provider_info.xml b/appbase/src/main/res/xml/widget_provider_info_sos.xml
similarity index 82%
rename from libappbase/src/main/res/xml/appwidget_provider_info.xml
rename to appbase/src/main/res/xml/widget_provider_info_sos.xml
index f9f81b9..469927d 100644
--- a/libappbase/src/main/res/xml/appwidget_provider_info.xml
+++ b/appbase/src/main/res/xml/widget_provider_info_sos.xml
@@ -3,5 +3,5 @@
android:minWidth="200dp"
android:minHeight="100dp"
android:updatePeriodMillis="1000"
- android:initialLayout="@layout/widget_layout">
+ android:initialLayout="@layout/widget_sos">
diff --git a/libappbase/build.properties b/libappbase/build.properties
index efcb86c..374e248 100644
--- a/libappbase/build.properties
+++ b/libappbase/build.properties
@@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle
-#Mon Feb 17 12:09:50 HKT 2025
+#Tue Feb 18 19:15:30 GMT 2025
stageCount=3
libraryProject=libappbase
baseVersion=1.5
publishVersion=1.5.2
-buildCount=0
+buildCount=58
baseBetaVersion=1.5.3
diff --git a/libappbase/src/main/AndroidManifest.xml b/libappbase/src/main/AndroidManifest.xml
index dc162c9..4765d9f 100644
--- a/libappbase/src/main/AndroidManifest.xml
+++ b/libappbase/src/main/AndroidManifest.xml
@@ -6,6 +6,9 @@
+
+
+
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
+
-
-
+
-
-
+
+
+
+
+
+
+ android:resource="@xml/widget_provider_info_status"/>
+
-
+
+
+
-
-
+
+
+
+
+
diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/SOS.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/SOS.java
index d9ceb4f..e9524e7 100644
--- a/libappbase/src/main/java/cc/winboll/studio/libappbase/SOS.java
+++ b/libappbase/src/main/java/cc/winboll/studio/libappbase/SOS.java
@@ -12,7 +12,8 @@ import cc.winboll.studio.libappbase.bean.APPSOSBean;
public class SOS {
public static final String TAG = "SOS";
- public static final String ACTION_SOS = "cc.winboll.studio.libappbase.WinBoll.ACTION_SOS";
+
+ public static final String ACTION_SOS = "cc.winboll.studio.appbase.widgets.SOSWidget.ACTION_SOS";
public static void sosWinBollService(Context context, APPSOSBean bean) {
Intent intent = new Intent(ACTION_SOS);
diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/WinBoll.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/WinBoll.java
deleted file mode 100644
index 0cb1b05..0000000
--- a/libappbase/src/main/java/cc/winboll/studio/libappbase/WinBoll.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package cc.winboll.studio.libappbase;
-
-/**
- * @Author ZhanGSKen@AliYun.Com
- * @Date 2025/02/15 12:14:45
- * @Describe WinBoll 类
- */
-public class WinBoll {
-
- public static final String TAG = "WinBoll";
-
- public static final String ACTION_SOS = WinBoll.class.getName() + ".ACTION_SOS";
-
-
-}
diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/receiver/WinBollReceiver.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/receiver/WinBollReceiver.java
deleted file mode 100644
index db5ee64..0000000
--- a/libappbase/src/main/java/cc/winboll/studio/libappbase/receiver/WinBollReceiver.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package cc.winboll.studio.libappbase.receiver;
-
-import android.content.BroadcastReceiver;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import cc.winboll.studio.libappbase.LogUtils;
-import cc.winboll.studio.libappbase.WinBoll;
-import cc.winboll.studio.libappbase.AppUtils;
-import cc.winboll.studio.libappbase.widgets.APPSOSReportWidget;
-import cc.winboll.studio.libappbase.bean.APPSOSBean;
-import java.io.IOException;
-import cc.winboll.studio.libappbase.bean.APPSOSReportBean;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
-/**
- * @Author ZhanGSKen@AliYun.Com
- * @Date 2025/02/15 12:17:32
- * @Describe WinBollReceiver
- */
-public class WinBollReceiver extends BroadcastReceiver {
-
- public static final String TAG = "WinBollReceiver";
-
-
- @Override
- public void onReceive(Context context, Intent intent) {
- String action = intent.getAction();
- if (action.equals(WinBoll.ACTION_SOS)) {
- LogUtils.d(TAG, String.format("context.getPackageName() %s", context.getPackageName()));
- LogUtils.d(TAG, String.format("action %s", action));
- String SOS = intent.getStringExtra("SOS");
- LogUtils.d(TAG, String.format("SOS %s", SOS));
- if (SOS != null && SOS.equals("Service")) {
- String szAPPSOSBean = intent.getStringExtra("APPSOSBean");
- LogUtils.d(TAG, String.format("szAPPSOSBean %s", szAPPSOSBean));
- if (szAPPSOSBean != null && !szAPPSOSBean.equals("")) {
- try {
- APPSOSBean bean = APPSOSBean.parseStringToBean(szAPPSOSBean, APPSOSBean.class);
- if (bean != null) {
- String sosPackage = bean.getSosPackage();
- LogUtils.d(TAG, String.format("sosPackage %s", sosPackage));
- String sosClassName = bean.getSosClassName();
- LogUtils.d(TAG, String.format("sosClassName %s", sosClassName));
-
- Intent intentService = new Intent();
- intentService.setComponent(new ComponentName(sosPackage, sosClassName));
- context.startService(intentService);
-
- String appName = AppUtils.getAppNameByPackageName(context, sosPackage);
- LogUtils.d(TAG, String.format("appName %s", appName));
- APPSOSReportBean appSOSReportBean = new APPSOSReportBean(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);
- appSOSReportBean.setSosReport(sbLine.toString());
-
- Intent intentAPPSOSReportWidget = new Intent(context, APPSOSReportWidget.class);
- intentAPPSOSReportWidget.setAction(APPSOSReportWidget.ACTION_ADD_SOS_REPORT);
- intentAPPSOSReportWidget.putExtra("APPSOSReportBean", appSOSReportBean.toString());
- context.sendBroadcast(intentAPPSOSReportWidget);
- }
- } catch (IOException e) {
- LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
- }
- }
- }
-
- } else {
- LogUtils.d(TAG, String.format("action %s", action));
- }
- }
-
-}
diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/services/TestService.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/services/TestService.java
new file mode 100644
index 0000000..881032f
--- /dev/null
+++ b/libappbase/src/main/java/cc/winboll/studio/libappbase/services/TestService.java
@@ -0,0 +1,93 @@
+package cc.winboll.studio.libappbase.services;
+
+/**
+ * @Author ZhanGSKen@AliYun.Com
+ * @Date 2025/02/15 20:48:36
+ * @Describe TestService
+ */
+import android.app.Service;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Binder;
+import android.os.IBinder;
+import cc.winboll.studio.libappbase.LogUtils;
+import cc.winboll.studio.libappbase.widgets.StatusWidget;
+
+public class TestService extends Service {
+
+ public static final String TAG = "TestService";
+
+ TestThread mTestThread;
+
+ @Override
+ public IBinder onBind(Intent intent) {
+ return new MyBinder();
+ }
+
+ public class MyBinder extends Binder {
+ public TestService getService() {
+ return TestService.this;
+ }
+ }
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ LogUtils.d(TAG, "onCreate()");
+ mTestThread = new TestThread();
+ mTestThread.start();
+ }
+
+ @Override
+ public int onStartCommand(Intent intent, int flags, int startId) {
+ LogUtils.d(TAG, "onStartCommand(...)");
+ return super.onStartCommand(intent, flags, startId);
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ LogUtils.d(TAG, "onDestroy()");
+ mTestThread.setIsExit(true);
+ }
+
+ class TestThread extends Thread {
+ volatile boolean isExit = false;
+
+ public void setIsExit(boolean isExit) {
+ this.isExit = isExit;
+ }
+
+ public boolean isExit() {
+ return isExit;
+ }
+
+ @Override
+ public void run() {
+ super.run();
+
+ LogUtils.d(TAG, "run() start");
+ Intent intentStart = new Intent(TestService.this, StatusWidget.class);
+ intentStart.setAction(StatusWidget.ACTION_STATUS_UPDATE);
+ sendBroadcast(intentStart);
+
+ while (!isExit) {
+ //LogUtils.d(TAG, "run()");
+
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
+ }
+ }
+
+ Intent intentStop = new Intent(TestService.this, StatusWidget.class);
+ intentStop.setAction(StatusWidget.ACTION_STATUS_UPDATE);
+ sendBroadcast(intentStop);
+
+ LogUtils.d(TAG, "run() exit");
+ }
+
+ }
+
+}
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
new file mode 100644
index 0000000..047ec8a
--- /dev/null
+++ b/libappbase/src/main/java/cc/winboll/studio/libappbase/utils/ServiceUtils.java
@@ -0,0 +1,48 @@
+package cc.winboll.studio.libappbase.utils;
+
+/**
+ * @Author ZhanGSKen@AliYun.Com
+ * @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/widgets/APPSOSReportWidget.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/widgets/APPSOSReportWidget.java
deleted file mode 100644
index cfa28d3..0000000
--- a/libappbase/src/main/java/cc/winboll/studio/libappbase/widgets/APPSOSReportWidget.java
+++ /dev/null
@@ -1,163 +0,0 @@
-package cc.winboll.studio.libappbase.widgets;
-/**
- * @Author ZhanGSKen@AliYun.Com
- * @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.libappbase.LogUtils;
-import cc.winboll.studio.libappbase.R;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import cc.winboll.studio.libappbase.bean.APPSOSReportBean;
-import java.io.IOException;
-
-public class APPSOSReportWidget extends AppWidgetProvider {
-
- public static final String TAG = "APPSOSReportWidget";
-
- public static final String ACTION_ADD_SOS_REPORT = "cc.winboll.studio.libappbase.widgets.APPSOSReportWidget.ACTION_ADD_SOS_REPORT";
- public static final String ACTION_RELOAD_SOS_REPORT = "cc.winboll.studio.libappbase.widgets.APPSOSReportWidget.ACTION_RELOAD_SOS_REPORT";
-
- volatile static ArrayList _APPSOSReportBeanList;
- 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) {
- initAPPSOSReportBeanList(context);
- for (int appWidgetId : appWidgetIds) {
- updateAppWidget(context, appWidgetManager, appWidgetId);
- }
- }
-
- @Override
- public void onReceive(Context context, Intent intent) {
- super.onReceive(context, intent);
- initAPPSOSReportBeanList(context);
- if (intent.getAction().equals(ACTION_ADD_SOS_REPORT)) {
- LogUtils.d(TAG, "ACTION_ADD_SOS_REPORT");
- String szAPPSOSReportBean = intent.getStringExtra("APPSOSReportBean");
- LogUtils.d(TAG, String.format("szAPPSOSBean %s", szAPPSOSReportBean));
- if (szAPPSOSReportBean != null && !szAPPSOSReportBean.equals("")) {
- try {
- APPSOSReportBean bean = APPSOSReportBean.parseStringToBean(szAPPSOSReportBean, APPSOSReportBean.class);
- if (bean != null) {
- addAPPSOSReportBean(context, bean);
- AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
- int[] appWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(context, APPSOSReportWidget.class));
- for (int appWidgetId : appWidgetIds) {
- updateAppWidget(context, appWidgetManager, appWidgetId);
- }
- }
- } catch (IOException e) {
- LogUtils.d(TAG, e, Thread.currentThread().getStackTrace());
- }
- }
- } else if (intent.getAction().equals(ACTION_RELOAD_SOS_REPORT)) {
- LogUtils.d(TAG, "ACTION_RELOAD_SOS_REPORT");
- AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
- int[] appWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(context, APPSOSReportWidget.class));
- for (int appWidgetId : appWidgetIds) {
- updateAppWidget(context, appWidgetManager, appWidgetId);
- }
- }
-
- }
-
- //
- // 加入新报告信息
- //
- void addAPPSOSReportBean(Context context, APPSOSReportBean bean) {
- initAPPSOSReportBeanList(context);
- _APPSOSReportBeanList.add(0, bean);
- // 控制记录总数
- while (_APPSOSReportBeanList.size() > _MAX_PAGES * _OnePageLinesCount) {
- _APPSOSReportBeanList.remove(_APPSOSReportBeanList.size() - 1);
- }
- APPSOSReportBean.saveBeanList(context, _APPSOSReportBeanList, APPSOSReportBean.class);
- }
-
- void initAPPSOSReportBeanList(Context context) {
- if (_APPSOSReportBeanList == null) {
- _APPSOSReportBeanList = new ArrayList();
- APPSOSReportBean.loadBeanList(context, _APPSOSReportBeanList, APPSOSReportBean.class);
- }
- if (_APPSOSReportBeanList == null) {
- _APPSOSReportBeanList = new ArrayList();
- APPSOSReportBean.saveBeanList(context, _APPSOSReportBeanList, APPSOSReportBean.class);
- }
- }
-
- private void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) {
- LogUtils.d(TAG, "updateAppWidget(...)");
-
- RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
- //设置按钮点击事件
- Intent intentPre = new Intent(context, WidgetButtonClickListener.class);
- intentPre.setAction(WidgetButtonClickListener.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, WidgetButtonClickListener.class);
- intentNext.setAction(WidgetButtonClickListener.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.infoTextView, getPageInfo());
- views.setTextViewText(R.id.sosReportTextView, getMessage());
- appWidgetManager.updateAppWidget(appWidgetId, views);
- }
-
- public static String getMessage() {
- ArrayList msgTemp = new ArrayList();
- if (_APPSOSReportBeanList != null) {
- int start = _OnePageLinesCount * _CurrentPageIndex;
- start = _APPSOSReportBeanList.size() > start ? start : _APPSOSReportBeanList.size() - 1;
- for (int i = start, j = 0; i < _APPSOSReportBeanList.size() && j < _OnePageLinesCount; i++, j++) {
- msgTemp.add(_APPSOSReportBeanList.get(i).getSosReport());
- }
- String message = String.join("\n", msgTemp);
- return message;
- }
- return "";
- }
-
- public static void prePage(Context context) {
- if (_APPSOSReportBeanList != null) {
- if (_CurrentPageIndex > 0) {
- _CurrentPageIndex = _CurrentPageIndex - 1;
- }
- Intent intentAPPSOSReportWidget = new Intent(context, APPSOSReportWidget.class);
- intentAPPSOSReportWidget.setAction(APPSOSReportWidget.ACTION_RELOAD_SOS_REPORT);
- context.sendBroadcast(intentAPPSOSReportWidget);
- }
- }
-
- public static void nextPage(Context context) {
- if (_APPSOSReportBeanList != null) {
- if ((_CurrentPageIndex + 1) * _OnePageLinesCount < _APPSOSReportBeanList.size()) {
- _CurrentPageIndex = _CurrentPageIndex + 1;
- }
- Intent intentAPPSOSReportWidget = new Intent(context, APPSOSReportWidget.class);
- intentAPPSOSReportWidget.setAction(APPSOSReportWidget.ACTION_RELOAD_SOS_REPORT);
- context.sendBroadcast(intentAPPSOSReportWidget);
- }
- }
-
- String getPageInfo() {
- if (_APPSOSReportBeanList == null) {
- return "0/0";
- }
- int leftCount = _APPSOSReportBeanList.size() % _OnePageLinesCount;
- int currentPageCount = _APPSOSReportBeanList.size() / _OnePageLinesCount + (leftCount == 0 ?0: 1);
- return String.format("%d/%d", _CurrentPageIndex + 1, currentPageCount);
- }
-}
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
new file mode 100644
index 0000000..a4a2eee
--- /dev/null
+++ b/libappbase/src/main/java/cc/winboll/studio/libappbase/widgets/StatusWidget.java
@@ -0,0 +1,63 @@
+package cc.winboll.studio.libappbase.widgets;
+
+/**
+ * @Author ZhanGSKen@AliYun.Com
+ * @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 com.hjq.toast.ToastUtils;
+import android.content.ServiceConnection;
+import android.os.IBinder;
+import cc.winboll.studio.libappbase.services.TestService;
+
+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)) {
+ 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
new file mode 100644
index 0000000..afbf9cf
--- /dev/null
+++ b/libappbase/src/main/java/cc/winboll/studio/libappbase/widgets/StatusWidgetClickListener.java
@@ -0,0 +1,33 @@
+package cc.winboll.studio.libappbase.widgets;
+
+/**
+ * @Author ZhanGSKen@AliYun.Com
+ * @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 com.hjq.toast.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/res/drawable/ic_launcher.xml b/libappbase/src/main/res/drawable/ic_launcher.xml
index 0380101..568f996 100644
--- a/libappbase/src/main/res/drawable/ic_launcher.xml
+++ b/libappbase/src/main/res/drawable/ic_launcher.xml
@@ -1,11 +1,13 @@
-
-
-
-
\ No newline at end of file
+
+
+
+
diff --git a/libappbase/src/main/res/drawable/ic_launcher_background.xml b/libappbase/src/main/res/drawable/ic_launcher_background.xml
new file mode 100644
index 0000000..f63ec09
--- /dev/null
+++ b/libappbase/src/main/res/drawable/ic_launcher_background.xml
@@ -0,0 +1,170 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/libappbase/src/main/res/drawable/ic_launcher_disable.xml b/libappbase/src/main/res/drawable/ic_launcher_disable.xml
new file mode 100644
index 0000000..174f475
--- /dev/null
+++ b/libappbase/src/main/res/drawable/ic_launcher_disable.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/libappbase/src/main/res/drawable/ic_launcher_foreground.xml b/libappbase/src/main/res/drawable/ic_launcher_foreground.xml
new file mode 100644
index 0000000..872b04e
--- /dev/null
+++ b/libappbase/src/main/res/drawable/ic_launcher_foreground.xml
@@ -0,0 +1,10 @@
+
+
+
+
diff --git a/libappbase/src/main/res/drawable/ic_launcher_foreground_disable.xml b/libappbase/src/main/res/drawable/ic_launcher_foreground_disable.xml
new file mode 100644
index 0000000..4622116
--- /dev/null
+++ b/libappbase/src/main/res/drawable/ic_launcher_foreground_disable.xml
@@ -0,0 +1,10 @@
+
+
+
+
diff --git a/libappbase/src/main/res/layout/widget_status.xml b/libappbase/src/main/res/layout/widget_status.xml
new file mode 100644
index 0000000..b115a06
--- /dev/null
+++ b/libappbase/src/main/res/layout/widget_status.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/libappbase/src/main/res/values/attrs.xml b/libappbase/src/main/res/values/attrs.xml
index 5a4ca3c..f2ced61 100644
--- a/libappbase/src/main/res/values/attrs.xml
+++ b/libappbase/src/main/res/values/attrs.xml
@@ -1,5 +1,7 @@
+
+
diff --git a/libappbase/src/main/res/values/colors.xml b/libappbase/src/main/res/values/colors.xml
index 7d93b9d..87d3836 100644
--- a/libappbase/src/main/res/values/colors.xml
+++ b/libappbase/src/main/res/values/colors.xml
@@ -1,7 +1,7 @@
- #FFFFE200
- #FFFFE200
- #FFFFE200
- #FFFFE200
+ #FF00B322
+ #FF005C12
+ #FF8DFFA2
+ #FFFFFB8D
diff --git a/libappbase/src/main/res/xml/widget_provider_info_status.xml b/libappbase/src/main/res/xml/widget_provider_info_status.xml
new file mode 100644
index 0000000..5e19984
--- /dev/null
+++ b/libappbase/src/main/res/xml/widget_provider_info_status.xml
@@ -0,0 +1,8 @@
+
+
+