From 7b05d613e42a21ec6aa934ff343c6af4cc90a966 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Sun, 16 Feb 2025 20:54:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=B0=8F=E9=83=A8=E4=BB=B6?= =?UTF-8?q?=E5=88=86=E9=A1=B5=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- appbase/build.properties | 4 +- .../winboll/studio/appbase/MainActivity.java | 2 +- .../appbase/threads/MainServiceThread.java | 6 +- libappbase/build.properties | 4 +- libappbase/src/main/AndroidManifest.xml | 11 +- .../libappbase/receiver/WinBollReceiver.java | 10 +- .../widgets/APPSOSReportWidget.java | 144 ++++++++++++++++++ .../studio/libappbase/widgets/TimeWidget.java | 83 ---------- .../widgets/WidgetButtonClickListener.java | 31 ++-- .../src/main/res/layout/widget_layout.xml | 50 +++--- 10 files changed, 213 insertions(+), 132 deletions(-) create mode 100644 libappbase/src/main/java/cc/winboll/studio/libappbase/widgets/APPSOSReportWidget.java delete mode 100644 libappbase/src/main/java/cc/winboll/studio/libappbase/widgets/TimeWidget.java diff --git a/appbase/build.properties b/appbase/build.properties index 46e9d50..3d75e04 100644 --- a/appbase/build.properties +++ b/appbase/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Sat Feb 15 13:33:01 GMT 2025 +#Sun Feb 16 12:53:20 GMT 2025 stageCount=2 libraryProject=libappbase baseVersion=1.5 publishVersion=1.5.1 -buildCount=147 +buildCount=168 baseBetaVersion=1.5.2 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 a428b11..2fd1b0b 100644 --- a/appbase/src/main/java/cc/winboll/studio/appbase/MainActivity.java +++ b/appbase/src/main/java/cc/winboll/studio/appbase/MainActivity.java @@ -15,7 +15,7 @@ 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.TimeWidget; +import cc.winboll.studio.libappbase.widgets.APPSOSReportWidget; import com.hjq.toast.ToastUtils; public class MainActivity extends AppCompatActivity { 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 index 5cd1677..14e94d2 100644 --- a/appbase/src/main/java/cc/winboll/studio/appbase/threads/MainServiceThread.java +++ b/appbase/src/main/java/cc/winboll/studio/appbase/threads/MainServiceThread.java @@ -8,7 +8,7 @@ import android.content.Context; import android.content.Intent; import cc.winboll.studio.appbase.handlers.MainServiceHandler; import cc.winboll.studio.libappbase.LogUtils; -import cc.winboll.studio.libappbase.widgets.TimeWidget; +import cc.winboll.studio.libappbase.widgets.APPSOSReportWidget; import java.lang.ref.WeakReference; public class MainServiceThread extends Thread { @@ -43,8 +43,8 @@ public class MainServiceThread extends Thread { while (!isExist()) { //ToastUtils.show("run()"); LogUtils.d(TAG, "run()"); - Intent intentTimeWidget = new Intent(mContext, TimeWidget.class); - intentTimeWidget.setAction(TimeWidget.UPDATE_TIME_ACTION); + Intent intentTimeWidget = new Intent(mContext, APPSOSReportWidget.class); + intentTimeWidget.setAction(APPSOSReportWidget.ACTION_ADD_SOS_REPORT); intentTimeWidget.putExtra("appName", "TestName"); mContext.sendBroadcast(intentTimeWidget); diff --git a/libappbase/build.properties b/libappbase/build.properties index 46e9d50..3d75e04 100644 --- a/libappbase/build.properties +++ b/libappbase/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Sat Feb 15 13:33:01 GMT 2025 +#Sun Feb 16 12:53:20 GMT 2025 stageCount=2 libraryProject=libappbase baseVersion=1.5 publishVersion=1.5.1 -buildCount=147 +buildCount=168 baseBetaVersion=1.5.2 diff --git a/libappbase/src/main/AndroidManifest.xml b/libappbase/src/main/AndroidManifest.xml index cb1eb9c..dc162c9 100644 --- a/libappbase/src/main/AndroidManifest.xml +++ b/libappbase/src/main/AndroidManifest.xml @@ -41,17 +41,22 @@ - - + - + + + + + + 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 index e3748a6..612c0b4 100644 --- a/libappbase/src/main/java/cc/winboll/studio/libappbase/receiver/WinBollReceiver.java +++ b/libappbase/src/main/java/cc/winboll/studio/libappbase/receiver/WinBollReceiver.java @@ -7,7 +7,7 @@ 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.TimeWidget; +import cc.winboll.studio.libappbase.widgets.APPSOSReportWidget; /** * @Author ZhanGSKen@AliYun.Com @@ -44,10 +44,10 @@ public class WinBollReceiver extends BroadcastReceiver { String appName = AppUtils.getAppNameByPackageName(context, sosPackage); LogUtils.d(TAG, String.format("appName %s", appName)); - Intent intentTimeWidget = new Intent(context, TimeWidget.class); - intentTimeWidget.setAction(TimeWidget.UPDATE_TIME_ACTION); - intentTimeWidget.putExtra("appName", appName); - context.sendBroadcast(intentTimeWidget); + Intent intentAPPSOSReportWidget = new Intent(context, APPSOSReportWidget.class); + intentAPPSOSReportWidget.setAction(APPSOSReportWidget.ACTION_ADD_SOS_REPORT); + intentAPPSOSReportWidget.putExtra("appName", appName); + context.sendBroadcast(intentAPPSOSReportWidget); } } 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 new file mode 100644 index 0000000..76de981 --- /dev/null +++ b/libappbase/src/main/java/cc/winboll/studio/libappbase/widgets/APPSOSReportWidget.java @@ -0,0 +1,144 @@ +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; + +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 _Message; + 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) { + 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_ADD_SOS_REPORT)) { + LogUtils.d(TAG, "ACTION_ADD_SOS_REPORT"); + String sosAppName = intent.getStringExtra("appName"); + LogUtils.d(TAG, String.format("sosAppName %s", sosAppName)); + + AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); + int[] appWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(context, APPSOSReportWidget.class)); + for (int appWidgetId : appWidgetIds) { + updateAppWidget(context, appWidgetManager, appWidgetId, sosAppName); + } + } 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, ""); + } + } + + } + + private void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId, String sosAppName) { + 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); + + // 加入新消息 + if (sosAppName != null && !sosAppName.equals("")) { + if (_Message == null) { + _Message = new ArrayList(); + } + // 获取当前时间并设置到TextView + 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(sosAppName); + _Message.add(0, sbLine.toString()); + while (_Message.size() > _MAX_PAGES * _OnePageLinesCount) { // 控制显示在6行 + _Message.remove(_Message.size() - 1); + } + } + 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 (_Message != null) { + int start = _OnePageLinesCount * _CurrentPageIndex; + start = _Message.size() > start ? start : _Message.size() - 1; + for (int i = start, j = 0; i < _Message.size() && j < _OnePageLinesCount; i++, j++) { + msgTemp.add(_Message.get(i)); + } + String message = String.join("\n", msgTemp); + return message; + } + return ""; + } + + public static void prePage(Context context) { + if (_Message != 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 (_Message != null) { + if ((_CurrentPageIndex + 1) * _OnePageLinesCount < _Message.size()) { + _CurrentPageIndex = _CurrentPageIndex + 1; + } + Intent intentAPPSOSReportWidget = new Intent(context, APPSOSReportWidget.class); + intentAPPSOSReportWidget.setAction(APPSOSReportWidget.ACTION_RELOAD_SOS_REPORT); + context.sendBroadcast(intentAPPSOSReportWidget); + } + } + + String getPageInfo() { + if (_Message == null) { + return "0/0"; + } + int leftCount = _Message.size() % _OnePageLinesCount; + int currentPageCount = _Message.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/TimeWidget.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/widgets/TimeWidget.java deleted file mode 100644 index 0b56e39..0000000 --- a/libappbase/src/main/java/cc/winboll/studio/libappbase/widgets/TimeWidget.java +++ /dev/null @@ -1,83 +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; - -public class TimeWidget extends AppWidgetProvider { - - public static final String TAG = "TimeWidget"; - - public static final String UPDATE_TIME_ACTION = "com.example.android.UPDATE_TIME"; - - volatile static ArrayList _Message; - - @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(UPDATE_TIME_ACTION)) { - - String sosAppName = intent.getStringExtra("appName"); - LogUtils.d(TAG, String.format("sosAppName %s", sosAppName)); - - AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); - int[] appWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(context, TimeWidget.class)); - for (int appWidgetId : appWidgetIds) { - updateAppWidget(context, appWidgetManager, appWidgetId, sosAppName); - } - } - } - - private void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId, String sosAppName) { - - LogUtils.d(TAG, "updateAppWidget(...)"); - - RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout); - //设置按钮点击事件 - Intent intent = new Intent(context, WidgetButtonClickListener.class); - PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); - views.setOnClickPendingIntent(R.id.widget_button, pendingIntent); - if (_Message == null) { - _Message = new ArrayList(); - } - // 获取当前时间并设置到TextView - 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(sosAppName); - _Message.add(0, sbLine.toString()); - while (_Message.size() > 6) { // 控制显示在6行 - _Message.remove(_Message.size() - 1); - } - if (_Message != null) { - String message = String.join("\n", _Message); - views.setTextViewText(R.id.timeTextView, message); - } - appWidgetManager.updateAppWidget(appWidgetId, views); - } - - -} diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/widgets/WidgetButtonClickListener.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/widgets/WidgetButtonClickListener.java index 3dd83df..696238a 100644 --- a/libappbase/src/main/java/cc/winboll/studio/libappbase/widgets/WidgetButtonClickListener.java +++ b/libappbase/src/main/java/cc/winboll/studio/libappbase/widgets/WidgetButtonClickListener.java @@ -5,29 +5,32 @@ package cc.winboll.studio.libappbase.widgets; * @Date 2025/02/15 17:20:46 * @Describe WidgetButtonClickListener */ -import android.appwidget.AppWidgetManager; import android.content.BroadcastReceiver; -import android.content.ComponentName; import android.content.Context; import android.content.Intent; -import android.widget.RemoteViews; -import android.widget.Toast; -import cc.winboll.studio.libappbase.R; +import cc.winboll.studio.libappbase.LogUtils; public class WidgetButtonClickListener 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"; + @Override public void onReceive(Context context, Intent intent) { - AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); - int[] appWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(context, TimeWidget.class)); - - for (int appWidgetId : appWidgetIds) { - RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout); - views.setTextViewText(R.id.timeTextView, "文本已更新"); - appWidgetManager.updateAppWidget(appWidgetId, views); + 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"); + APPSOSReportWidget.prePage(context); + } else if (action.equals(ACTION_NEXT)) { + LogUtils.d(TAG, "ACTION_NEXT"); + APPSOSReportWidget.nextPage(context); + } else { + LogUtils.d(TAG, String.format("action %s", action)); } - - Toast.makeText(context, "按钮被点击", Toast.LENGTH_SHORT).show(); } } diff --git a/libappbase/src/main/res/layout/widget_layout.xml b/libappbase/src/main/res/layout/widget_layout.xml index befd01d..994313b 100644 --- a/libappbase/src/main/res/layout/widget_layout.xml +++ b/libappbase/src/main/res/layout/widget_layout.xml @@ -1,30 +1,42 @@ + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical" + android:background="#FFFFFFFF"> - + + +