diff --git a/appbase/build.gradle b/appbase/build.gradle index 6193aa5..cf07e1d 100644 --- a/appbase/build.gradle +++ b/appbase/build.gradle @@ -29,7 +29,7 @@ android { // versionName 更新后需要手动设置 // .winboll/winbollBuildProps.properties 文件的 stageCount=0 // Gradle编译环境下合起来的 versionName 就是 "${versionName}.0" - versionName "2.0" + versionName "2.1" if(true) { versionName = genVersionName("${versionName}") } @@ -45,5 +45,26 @@ android { dependencies { api project(':libappbase') - api fileTree(dir: 'libs', include: ['*.jar']) + api fileTree(dir: 'libs', include: ['*.jar']) + + // SSH + implementation 'com.jcraft:jsch:0.1.55' + // Html 解析 + implementation 'org.jsoup:jsoup:1.13.1' + // 二维码类库 + implementation 'com.google.zxing:core:3.4.1' + implementation 'com.journeyapps:zxing-android-embedded:3.6.0' + // 应用介绍页类库 + implementation 'io.github.medyo:android-about-page:2.0.0' + // 吐司类库 + implementation 'com.github.getActivity:ToastUtils:10.5' + // 网络连接类库 + implementation 'com.squareup.okhttp3:okhttp:4.4.1' + // Android 类库 + implementation 'androidx.appcompat:appcompat:1.1.0' + implementation 'androidx.viewpager:viewpager:1.0.0' + implementation 'androidx.vectordrawable:vectordrawable:1.1.0' + implementation 'androidx.vectordrawable:vectordrawable-animated:1.1.0' + implementation 'androidx.fragment:fragment:1.1.0' + implementation 'com.google.android.material:material:1.4.0' } diff --git a/appbase/build.properties b/appbase/build.properties index 9e59591..2fdff2f 100644 --- a/appbase/build.properties +++ b/appbase/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Tue Feb 25 16:51:17 HKT 2025 -stageCount=3 +#Sun Mar 09 09:15:39 HKT 2025 +stageCount=6 libraryProject=libappbase -baseVersion=2.0 -publishVersion=2.0.2 +baseVersion=2.1 +publishVersion=2.1.5 buildCount=0 -baseBetaVersion=2.0.3 +baseBetaVersion=2.1.6 diff --git a/appbase/src/main/AndroidManifest.xml b/appbase/src/main/AndroidManifest.xml index ed6e233..4fdc630 100644 --- a/appbase/src/main/AndroidManifest.xml +++ b/appbase/src/main/AndroidManifest.xml @@ -54,19 +54,25 @@ + + - - + + + + + + - + - + - + @@ -91,6 +97,11 @@ android:name="android.max_aspect" android:value="4.0"/> + + + 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 84d0424..f2098d7 100644 --- a/appbase/src/main/java/cc/winboll/studio/appbase/App.java +++ b/appbase/src/main/java/cc/winboll/studio/appbase/App.java @@ -6,22 +6,23 @@ package cc.winboll.studio.appbase; * @Describe APPbase 应用类 */ import cc.winboll.studio.libappbase.GlobalApplication; -import cc.winboll.studio.libappbase.SOSCSBroadcastReceiver; import android.content.IntentFilter; +import cc.winboll.studio.libappbase.sos.SOSCenterServiceReceiver; +import cc.winboll.studio.libappbase.sos.SOS; public class App extends GlobalApplication { public static final String TAG = "App"; - SOSCSBroadcastReceiver mSOSCSBroadcastReceiver; + SOSCenterServiceReceiver mSOSCenterServiceReceiver; @Override public void onCreate() { super.onCreate(); GlobalApplication.setIsDebuging(this, BuildConfig.DEBUG); - mSOSCSBroadcastReceiver = new SOSCSBroadcastReceiver(); + mSOSCenterServiceReceiver = new SOSCenterServiceReceiver(); IntentFilter intentFilter = new IntentFilter(); - intentFilter.addAction(SOSCSBroadcastReceiver.ACTION_SOS); - registerReceiver(mSOSCSBroadcastReceiver, 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 3e4cac0..32d7431 100644 --- a/appbase/src/main/java/cc/winboll/studio/appbase/MainActivity.java +++ b/appbase/src/main/java/cc/winboll/studio/appbase/MainActivity.java @@ -1,6 +1,5 @@ package cc.winboll.studio.appbase; -import android.content.ComponentName; import android.content.Intent; import android.os.Bundle; import android.view.View; @@ -9,15 +8,16 @@ 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.TestDemoBindService; +import cc.winboll.studio.appbase.services.TestDemoService; 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.bean.APPSOSBean; -import cc.winboll.studio.libappbase.services.TestService; import cc.winboll.studio.libappbase.widgets.StatusWidget; import com.hjq.toast.ToastUtils; +import android.content.ComponentName; +import cc.winboll.studio.libappbase.sos.SOS; +import cc.winboll.studio.libappbase.sos.SOSObject; public class MainActivity extends AppCompatActivity { @@ -68,17 +68,17 @@ public class MainActivity extends AppCompatActivity { MainService.stopMainService(this); } - public void onTestStopWithoutSettingEnable(View view) { - LogUtils.d(TAG, "onTestStopWithoutSettingEnable"); - stopService(new Intent(this, SimpleOperateSignalCenterService.class)); + public void onTestStopMainServiceWithoutSettingEnable(View view) { + LogUtils.d(TAG, "onTestStopMainServiceWithoutSettingEnable"); + stopService(new Intent(this, MainService.class)); } - public void onTestStartWithString(View view) { - LogUtils.d(TAG, "onTestStartWithString"); + public void onTestUseComponentStartService(View view) { + LogUtils.d(TAG, "onTestUseComponentStartService"); // 目标服务的包名和类名 String packageName = this.getPackageName(); - String serviceClassName = SimpleOperateSignalCenterService.class.getName(); + String serviceClassName = TestDemoService.class.getName(); // 构建Intent Intent intentService = new Intent(); @@ -87,30 +87,55 @@ public class MainActivity extends AppCompatActivity { startService(intentService); } - public void onSOS(View view) { - Intent intent = new Intent(this, TestService.class); + public void onTestSOS(View view) { + Intent intent = new Intent(this, TestDemoService.class); stopService(intent); - SOS.sosWinBollService(this, new APPSOSBean(getPackageName(), TestService.class.getName())); + if(App.isDebuging()) { + SOS.sosToAppBaseBeta(this, TestDemoService.class.getName()); + } else { + SOS.sosToAppBase(this, TestDemoService.class.getName()); + } } - public void onStartTestService(View view) { - Intent intent = new Intent(this, TestService.class); - intent.setAction(SOS.ACTION_SERVICE_ENABLE); + public void onSartTestDemoService(View view) { + Intent intent = new Intent(this, TestDemoService.class); + intent.setAction(TestDemoService.ACTION_ENABLE); startService(intent); } - public void onStopTestService(View view) { - Intent intent = new Intent(this, TestService.class); - intent.setAction(SOS.ACTION_SERVICE_DISABLE); + public void onStopTestDemoService(View view) { + Intent intent = new Intent(this, TestDemoService.class); + intent.setAction(TestDemoService.ACTION_DISABLE); startService(intent); - Intent intentStop = new Intent(this, TestService.class); + Intent intentStop = new Intent(this, TestDemoService.class); stopService(intentStop); } - public void onStopTestServiceNoSettings(View view) { - Intent intent = new Intent(this, TestService.class); + 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); } } diff --git a/appbase/src/main/java/cc/winboll/studio/appbase/beans/MainServiceBean.java b/appbase/src/main/java/cc/winboll/studio/appbase/beans/MainServiceBean.java index 81a3a7a..580b6e5 100644 --- a/appbase/src/main/java/cc/winboll/studio/appbase/beans/MainServiceBean.java +++ b/appbase/src/main/java/cc/winboll/studio/appbase/beans/MainServiceBean.java @@ -35,8 +35,7 @@ public class MainServiceBean extends BaseBean { @Override public void writeThisToJsonWriter(JsonWriter jsonWriter) throws IOException { super.writeThisToJsonWriter(jsonWriter); - MainServiceBean bean = this; - jsonWriter.name("isEnable").value(bean.isEnable()); + jsonWriter.name("isEnable").value(isEnable()); } diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/bean/TestServiceBean.java b/appbase/src/main/java/cc/winboll/studio/appbase/beans/TestDemoBindServiceBean.java similarity index 87% rename from libappbase/src/main/java/cc/winboll/studio/libappbase/bean/TestServiceBean.java rename to appbase/src/main/java/cc/winboll/studio/appbase/beans/TestDemoBindServiceBean.java index 30d8cfe..59649a6 100644 --- a/libappbase/src/main/java/cc/winboll/studio/libappbase/bean/TestServiceBean.java +++ b/appbase/src/main/java/cc/winboll/studio/appbase/beans/TestDemoBindServiceBean.java @@ -1,8 +1,8 @@ -package cc.winboll.studio.libappbase.bean; +package cc.winboll.studio.appbase.beans; /** * @Author ZhanGSKen@AliYun.Com - * @Date 2025/02/19 13:34:52 + * @Date 2025/03/07 12:47:22 * @Describe TestServiceBean */ import android.util.JsonReader; @@ -10,13 +10,13 @@ import android.util.JsonWriter; import cc.winboll.studio.libappbase.BaseBean; import java.io.IOException; -public class TestServiceBean extends BaseBean { +public class TestDemoBindServiceBean extends BaseBean { public static final String TAG = "TestServiceBean"; boolean isEnable; - public TestServiceBean() { + public TestDemoBindServiceBean() { this.isEnable = false; } @@ -30,7 +30,7 @@ public class TestServiceBean extends BaseBean { @Override public String getName() { - return TestServiceBean.class.getName(); + return TestDemoBindServiceBean.class.getName(); } @Override diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/bean/SimpleOperateSignalCenterServiceBean.java b/appbase/src/main/java/cc/winboll/studio/appbase/beans/TestDemoServiceBean.java similarity index 81% rename from libappbase/src/main/java/cc/winboll/studio/libappbase/bean/SimpleOperateSignalCenterServiceBean.java rename to appbase/src/main/java/cc/winboll/studio/appbase/beans/TestDemoServiceBean.java index d6d3f00..680d2e4 100644 --- a/libappbase/src/main/java/cc/winboll/studio/libappbase/bean/SimpleOperateSignalCenterServiceBean.java +++ b/appbase/src/main/java/cc/winboll/studio/appbase/beans/TestDemoServiceBean.java @@ -1,20 +1,22 @@ -package cc.winboll.studio.libappbase.bean; +package cc.winboll.studio.appbase.beans; + +/** + * @Author ZhanGSKen@AliYun.Com + * @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; -/** - * @Author ZhanGSKen@AliYun.Com - * @Date 2025/02/13 04:27:42 - */ -public class SimpleOperateSignalCenterServiceBean extends BaseBean { +public class TestDemoServiceBean extends BaseBean { - public static final String TAG = "SimpleOperateSignalCenterServiceBean"; + public static final String TAG = "TestDemoServiceBean"; boolean isEnable; - - public SimpleOperateSignalCenterServiceBean() { + + public TestDemoServiceBean() { this.isEnable = false; } @@ -28,7 +30,7 @@ public class SimpleOperateSignalCenterServiceBean extends BaseBean { @Override public String getName() { - return SimpleOperateSignalCenterServiceBean.class.getName(); + return TestDemoServiceBean.class.getName(); } @Override diff --git a/appbase/src/main/java/cc/winboll/studio/appbase/beans/SOSReportBean.java b/appbase/src/main/java/cc/winboll/studio/appbase/beans/WinBollNewsBean.java similarity index 67% rename from appbase/src/main/java/cc/winboll/studio/appbase/beans/SOSReportBean.java rename to appbase/src/main/java/cc/winboll/studio/appbase/beans/WinBollNewsBean.java index d579482..713cc82 100644 --- a/appbase/src/main/java/cc/winboll/studio/appbase/beans/SOSReportBean.java +++ b/appbase/src/main/java/cc/winboll/studio/appbase/beans/WinBollNewsBean.java @@ -10,45 +10,45 @@ import android.util.JsonWriter; import cc.winboll.studio.libappbase.BaseBean; import java.io.IOException; -public class SOSReportBean extends BaseBean { +public class WinBollNewsBean extends BaseBean { - public static final String TAG = "APPSOSReportBean"; + public static final String TAG = "WinBollNewsBean"; - protected String sosReport; + protected String message; - public SOSReportBean() { - this.sosReport = ""; + public WinBollNewsBean() { + this.message = ""; } - public SOSReportBean(String sosReport) { - this.sosReport = sosReport; + public WinBollNewsBean(String message) { + this.message = message; } - public void setSosReport(String sosReport) { - this.sosReport = sosReport; + public void setMessage(String message) { + this.message = message; } - public String getSosReport() { - return sosReport; + public String getMessage() { + return message; } @Override public String getName() { - return SOSReportBean.class.getName(); + return WinBollNewsBean.class.getName(); } @Override public void writeThisToJsonWriter(JsonWriter jsonWriter) throws IOException { super.writeThisToJsonWriter(jsonWriter); - jsonWriter.name("sosReport").value(getSosReport()); + 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("sosReport")) { - setSosReport(jsonReader.nextString()); + if (name.equals("message")) { + setMessage(jsonReader.nextString()); } else { return false; } 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 index 36b12ed..4b82474 100644 --- a/appbase/src/main/java/cc/winboll/studio/appbase/receivers/MainReceiver.java +++ b/appbase/src/main/java/cc/winboll/studio/appbase/receivers/MainReceiver.java @@ -11,28 +11,28 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; -import cc.winboll.studio.appbase.beans.SOSReportBean; +import cc.winboll.studio.appbase.beans.WinBollNewsBean; import cc.winboll.studio.appbase.services.MainService; -import cc.winboll.studio.appbase.widgets.SOSWidget; +import cc.winboll.studio.appbase.widgets.APPNewsWidget; import cc.winboll.studio.libappbase.AppUtils; import cc.winboll.studio.libappbase.LogUtils; -import cc.winboll.studio.libappbase.SOS; -import cc.winboll.studio.libappbase.bean.APPSOSBean; import com.hjq.toast.ToastUtils; import java.io.IOException; import java.lang.ref.WeakReference; import java.text.SimpleDateFormat; import java.util.Date; +import cc.winboll.studio.libappbase.sos.WinBoll; +import cc.winboll.studio.libappbase.sos.APPModel; +import cc.winboll.studio.libappbase.sos.SOS; +import cc.winboll.studio.libappbase.sos.SOSObject; 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; - // 存储电量指示值, - // 用于校验电量消息时的电量变化 - static volatile int _mnTheQuantityOfElectricityOld = -1; - static volatile boolean _mIsCharging = false; public MainReceiver(MainService service) { mwrService = new WeakReference(service); @@ -43,74 +43,62 @@ public class MainReceiver extends BroadcastReceiver { String szAction = intent.getAction(); if (szAction.equals(ACTION_BOOT_COMPLETED)) { ToastUtils.show("ACTION_BOOT_COMPLETED"); - } else if (szAction.equals(SOS.ACTION_BIND)) { + } else if (szAction.equals(WinBoll.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 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)); - mwrService.get().bindSOSConnection(bean); - } - } catch (IOException e) { - LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); + String szAPPModel = intent.getStringExtra(WinBoll.EXTRA_APPMODEL); + LogUtils.d(TAG, String.format("szAPPModel %s", szAPPModel)); + if (szAPPModel != null && !szAPPModel.equals("")) { + try { + APPModel bean = APPModel.parseStringToBean(szAPPModel, APPModel.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().bindAPPModelConnection(bean); } + } catch (IOException e) { + LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); } } } else if (intent.getAction().equals(SOS.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)); + 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(sosPackage, sosClassName)); - context.startService(intentService); + Intent intentService = new Intent(); + intentService.setComponent(new ComponentName(szObjectPackageName, szObjectServiveName)); + 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()); + 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()); - SOSWidget.addAPPSOSReportBean(context, appSOSReportBean); - - Intent intentWidget = new Intent(context, SOSWidget.class); - intentWidget.setAction(SOSWidget.ACTION_RELOAD_REPORT); - context.sendBroadcast(intentWidget); - } - } catch (IOException e) { - LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); - } + APPNewsWidget.addWinBollNewsBean(context, appWinBollNewsBean); + + Intent intentWidget = new Intent(context, APPNewsWidget.class); + intentWidget.setAction(APPNewsWidget.ACTION_RELOAD_REPORT); + context.sendBroadcast(intentWidget); } + + } } else { ToastUtils.show(szAction); @@ -123,9 +111,7 @@ public class MainReceiver extends BroadcastReceiver { IntentFilter filter=new IntentFilter(); filter.addAction(ACTION_BOOT_COMPLETED); filter.addAction(SOS.ACTION_SOS); - filter.addAction(SOS.ACTION_BIND); - filter.addAction(SOS.ACTION_SERVICE_ENABLE); - filter.addAction(SOS.ACTION_SERVICE_DISABLE); + 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/MainService.java b/appbase/src/main/java/cc/winboll/studio/appbase/services/MainService.java index 93e41b7..41949ef 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 @@ -23,10 +23,10 @@ import cc.winboll.studio.appbase.handlers.MainServiceHandler; 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.SOSWidget; +import cc.winboll.studio.appbase.widgets.APPNewsWidget; import cc.winboll.studio.libappbase.LogUtils; -import cc.winboll.studio.libappbase.bean.APPSOSBean; import java.util.ArrayList; +import cc.winboll.studio.libappbase.sos.APPModel; public class MainService extends Service { @@ -45,7 +45,7 @@ public class MainService extends Service { AssistantService mAssistantService; boolean isBound = false; MainReceiver mMainReceiver; - ArrayList mSOSConnectionList; + ArrayList mAPPModelConnectionList; @Override public IBinder onBind(Intent intent) { @@ -60,7 +60,7 @@ public class MainService extends Service { public void onCreate() { super.onCreate(); LogUtils.d(TAG, "onCreate()"); - mSOSConnectionList = new ArrayList(); + mAPPModelConnectionList = new ArrayList(); _mControlCenterService = MainService.this; isServiceRunning = false; @@ -101,8 +101,8 @@ public class MainService extends Service { } // 启动小部件 - Intent intentTimeWidget = new Intent(this, SOSWidget.class); - intentTimeWidget.setAction(SOSWidget.ACTION_RELOAD_REPORT); + Intent intentTimeWidget = new Intent(this, APPNewsWidget.class); + intentTimeWidget.setAction(APPNewsWidget.ACTION_RELOAD_REPORT); this.sendBroadcast(intentTimeWidget); startMainServiceThread(); @@ -117,21 +117,11 @@ public class MainService extends Service { // void wakeupAndBindAssistant() { LogUtils.d(TAG, "wakeupAndBindAssistant()"); -// if (ServiceUtils.isServiceAlive(getApplicationContext(), AssistantService.class.getName()) == false) { -// startService(new Intent(MainService.this, AssistantService.class)); -// //LogUtils.d(TAG, "call wakeupAndBindAssistant() : Binding... AssistantService"); -// bindService(new Intent(MainService.this, AssistantService.class), mMyServiceConnection, Context.BIND_IMPORTANT); -// } + Intent intent = new Intent(this, AssistantService.class); startService(intent); // 绑定服务的Intent - //Intent intent = new Intent(this, AssistantService.class); bindService(intent, mMyServiceConnection, Context.BIND_IMPORTANT); - -// Intent intent = new Intent(this, AssistantService.class); -// startService(intent); -// LogUtils.d(TAG, "startService(intent)"); -// bindService(new Intent(this, AssistantService.class), mMyServiceConnection, Context.BIND_IMPORTANT); } // 开启提醒铃声线程 @@ -192,40 +182,40 @@ public class MainService extends Service { } } - public void bindSOSConnection(APPSOSBean bean) { - LogUtils.d(TAG, "bindSOSConnection(...)"); + public void bindAPPModelConnection(APPModel bean) { + LogUtils.d(TAG, "bindAPPModelConnection(...)"); // 清理旧的绑定链接 - for (int i = mSOSConnectionList.size() - 1; i > -1; i--) { - SOSConnection item = mSOSConnectionList.get(i); - if (item.isBindToAPPSOSBean(bean)) { + 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); - mSOSConnectionList.remove(i); + mAPPModelConnectionList.remove(i); } } // 绑定服务 - SOSConnection sosConnection = new SOSConnection(); + APPConnection appConnection = new APPConnection(); Intent intentService = new Intent(); - intentService.setComponent(new ComponentName(bean.getSosPackage(), bean.getSosClassName())); - bindService(intentService, sosConnection, Context.BIND_IMPORTANT); - mSOSConnectionList.add(sosConnection); + intentService.setComponent(new ComponentName(bean.getAppPackageName(), bean.getAppMainServiveName())); + bindService(intentService, appConnection, Context.BIND_IMPORTANT); + mAPPModelConnectionList.add(appConnection); - Intent intentWidget = new Intent(this, SOSWidget.class); - intentWidget.setAction(SOSWidget.ACTION_WAKEUP_SERVICE); - APPSOSBean appSOSBean = new APPSOSBean(bean.getSosPackage(), bean.getSosClassName()); + Intent intentWidget = new Intent(this, APPNewsWidget.class); + intentWidget.setAction(APPNewsWidget.ACTION_WAKEUP_SERVICE); + APPModel appSOSBean = new APPModel(bean.getAppPackageName(), bean.getAppMainServiveName()); intentWidget.putExtra("APPSOSBean", appSOSBean.toString()); sendBroadcast(intentWidget); } - public class SOSConnection implements ServiceConnection { + public class APPConnection implements ServiceConnection { ComponentName mComponentName; - boolean isBindToAPPSOSBean(APPSOSBean bean) { + boolean isBindToAPP(APPModel bean) { return mComponentName != null - && mComponentName.getClassName().equals(bean.getSosClassName()) - && mComponentName.getPackageName().equals(bean.getSosPackage()); + && mComponentName.getClassName().equals(bean.getAppMainServiveName()) + && mComponentName.getPackageName().equals(bean.getAppPackageName()); } @Override @@ -241,13 +231,13 @@ public class MainService extends Service { LogUtils.d(TAG, String.format("onServiceDisconnected : \ngetClassName %s\ngetPackageName %s", name.getClassName(), name.getPackageName())); // 尝试无参数启动一下服务 - String sosPackage = mComponentName.getPackageName(); - LogUtils.d(TAG, String.format("sosPackage %s", sosPackage)); - String sosClassName = mComponentName.getClassName(); - LogUtils.d(TAG, String.format("sosClassName %s", sosClassName)); + 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(sosPackage, sosClassName)); + intentService.setComponent(new ComponentName(appPackage, appMainServiceClassName)); startService(intentService); } 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 new file mode 100644 index 0000000..a957afa --- /dev/null +++ b/appbase/src/main/java/cc/winboll/studio/appbase/services/TestDemoBindService.java @@ -0,0 +1,178 @@ +package cc.winboll.studio.appbase.services; + +/** + * @Author ZhanGSKen@AliYun.Com + * @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.beans.TestDemoBindServiceBean; +import cc.winboll.studio.libappbase.LogUtils; +import cc.winboll.studio.libappbase.sos.WinBoll; +import cc.winboll.studio.appbase.App; +import cc.winboll.studio.libappbase.sos.SOS; + +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/libappbase/src/main/java/cc/winboll/studio/libappbase/services/TestService.java b/appbase/src/main/java/cc/winboll/studio/appbase/services/TestDemoService.java similarity index 67% rename from libappbase/src/main/java/cc/winboll/studio/libappbase/services/TestService.java rename to appbase/src/main/java/cc/winboll/studio/appbase/services/TestDemoService.java index fc86253..4739f9c 100644 --- a/libappbase/src/main/java/cc/winboll/studio/libappbase/services/TestService.java +++ b/appbase/src/main/java/cc/winboll/studio/appbase/services/TestDemoService.java @@ -1,23 +1,25 @@ -package cc.winboll.studio.libappbase.services; +package cc.winboll.studio.appbase.services; /** * @Author ZhanGSKen@AliYun.Com - * @Date 2025/02/15 20:48:36 - * @Describe TestService + * @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.beans.TestDemoServiceBean; import cc.winboll.studio.libappbase.LogUtils; -import cc.winboll.studio.libappbase.SOS; -import cc.winboll.studio.libappbase.bean.APPSOSBean; -import cc.winboll.studio.libappbase.bean.TestServiceBean; +import cc.winboll.studio.libappbase.sos.WinBoll; -public class TestService extends Service { +public class TestDemoService extends Service { - public static final String TAG = "TestService"; + 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; @@ -37,8 +39,8 @@ public class TestService extends Service { } public class MyBinder extends Binder { - public TestService getService() { - return TestService.this; + public TestDemoService getService() { + return TestDemoService.this; } } @@ -54,29 +56,35 @@ public class TestService extends Service { @Override public int onStartCommand(Intent intent, int flags, int startId) { LogUtils.d(TAG, "onStartCommand(...)"); - TestServiceBean bean = TestServiceBean.loadBean(this, TestServiceBean.class); + TestDemoServiceBean bean = TestDemoServiceBean.loadBean(this, TestDemoServiceBean.class); if (bean == null) { - bean = new TestServiceBean(); + bean = new TestDemoServiceBean(); } - if (intent.getAction() != null && intent.getAction().equals(SOS.ACTION_SERVICE_ENABLE)) { - bean.setIsEnable(true); - TestServiceBean.saveBean(this, bean); - run(); - } else if (intent.getAction() != null && intent.getAction().equals(SOS.ACTION_SERVICE_DISABLE)) { - bean.setIsEnable(false); - TestServiceBean.saveBean(this, bean); + + 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); + } } - LogUtils.d(TAG, String.format("TestServiceBean.saveBean setIsEnable %s", bean.isEnable())); + + run(); + return (bean.isEnable()) ? START_STICKY : super.onStartCommand(intent, flags, startId); //return super.onStartCommand(intent, flags, startId); } void run() { LogUtils.d(TAG, "run()"); - TestServiceBean bean = TestServiceBean.loadBean(this, TestServiceBean.class); + TestDemoServiceBean bean = TestDemoServiceBean.loadBean(this, TestDemoServiceBean.class); if (bean == null) { - bean = new TestServiceBean(); - TestServiceBean.saveBean(this, bean); + bean = new TestDemoServiceBean(); + TestDemoServiceBean.saveBean(this, bean); } if (bean.isEnable()) { LogUtils.d(TAG, "run() bean.isEnable()"); @@ -91,7 +99,7 @@ public class TestService extends Service { super.onDestroy(); LogUtils.d(TAG, "onDestroy()"); TestThread.getInstance(this).setIsExit(true); - + _IsRunning = false; } @@ -130,7 +138,6 @@ public class TestService extends Service { isStarted = true; super.run(); LogUtils.d(TAG, "run() start"); - SOS.bindToAPPService(mContext, new APPSOSBean(mContext.getPackageName(), TestService.class.getName())); while (!isExit()) { LogUtils.d(TAG, "run()"); diff --git a/appbase/src/main/java/cc/winboll/studio/appbase/widgets/SOSWidget.java b/appbase/src/main/java/cc/winboll/studio/appbase/widgets/APPNewsWidget.java similarity index 53% rename from appbase/src/main/java/cc/winboll/studio/appbase/widgets/SOSWidget.java rename to appbase/src/main/java/cc/winboll/studio/appbase/widgets/APPNewsWidget.java index b614da9..fa3da6e 100644 --- a/appbase/src/main/java/cc/winboll/studio/appbase/widgets/SOSWidget.java +++ b/appbase/src/main/java/cc/winboll/studio/appbase/widgets/APPNewsWidget.java @@ -12,31 +12,32 @@ 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.appbase.beans.WinBollNewsBean; 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; +import cc.winboll.studio.libappbase.sos.APPModel; +import cc.winboll.studio.libappbase.sos.WinBoll; -public class SOSWidget extends AppWidgetProvider { +public class APPNewsWidget extends AppWidgetProvider { - public static final String TAG = "SOSWidget"; + public static final String TAG = "APPNewsWidget"; - public static final String ACTION_WAKEUP_SERVICE = "cc.winboll.studio.appbase.widgets.SOSWidget.ACTION_WAKEUP_SERVICE"; - public static final String ACTION_RELOAD_REPORT = "cc.winboll.studio.appbase.widgets.SOSWidget.ACTION_RELOAD_REPORT"; + 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 _SOSReportBeanList; + 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) { - initAPPSOSReportBeanList(context); + initWinBollNewsBeanList(context); for (int appWidgetId : appWidgetIds) { updateAppWidget(context, appWidgetManager, appWidgetId); } @@ -45,31 +46,31 @@ public class SOSWidget extends AppWidgetProvider { @Override public void onReceive(Context context, Intent intent) { super.onReceive(context, intent); - initAPPSOSReportBeanList(context); + 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, SOSWidget.class)); + 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 szAPPSOSBean = intent.getStringExtra("APPSOSBean"); - LogUtils.d(TAG, String.format("szAPPSOSBean %s", szAPPSOSBean)); - if (szAPPSOSBean != null && !szAPPSOSBean.equals("")) { + String szAPPModel = intent.getStringExtra(WinBoll.EXTRA_APPMODEL); + LogUtils.d(TAG, String.format("szAPPModel %s", szAPPModel)); + if (szAPPModel != null && !szAPPModel.equals("")) { try { - APPSOSBean bean = APPSOSBean.parseStringToBean(szAPPSOSBean, APPSOSBean.class); + APPModel bean = APPModel.parseStringToBean(szAPPModel, APPModel.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)); + 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, sosPackage); + String appName = AppUtils.getAppNameByPackageName(context, szAppPackageName); LogUtils.d(TAG, String.format("appName %s", appName)); - SOSReportBean appSOSReportBean = new SOSReportBean(appName); + WinBollNewsBean winBollNewsBean = new WinBollNewsBean(appName); SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); String currentTime = sdf.format(new Date()); StringBuilder sbLine = new StringBuilder(); @@ -77,12 +78,12 @@ public class SOSWidget extends AppWidgetProvider { sbLine.append(currentTime); sbLine.append("] Wake up "); sbLine.append(appName); - appSOSReportBean.setSosReport(sbLine.toString()); + winBollNewsBean.setMessage(sbLine.toString()); - addAPPSOSReportBean(context, appSOSReportBean); + addWinBollNewsBean(context, winBollNewsBean); AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); - int[] appWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(context, SOSWidget.class)); + int[] appWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(context, APPNewsWidget.class)); for (int appWidgetId : appWidgetIds) { updateAppWidget(context, appWidgetManager, appWidgetId); } @@ -97,53 +98,53 @@ public class SOSWidget extends AppWidgetProvider { // // 加入新报告信息 // - public synchronized static void addAPPSOSReportBean(Context context, SOSReportBean bean) { - initAPPSOSReportBeanList(context); - _SOSReportBeanList.add(0, bean); + public synchronized static void addWinBollNewsBean(Context context, WinBollNewsBean bean) { + initWinBollNewsBeanList(context); + _WinBollNewsBeanList.add(0, bean); // 控制记录总数 - while (_SOSReportBeanList.size() > _MAX_PAGES * _OnePageLinesCount) { - _SOSReportBeanList.remove(_SOSReportBeanList.size() - 1); + while (_WinBollNewsBeanList.size() > _MAX_PAGES * _OnePageLinesCount) { + _WinBollNewsBeanList.remove(_WinBollNewsBeanList.size() - 1); } - SOSReportBean.saveBeanList(context, _SOSReportBeanList, SOSReportBean.class); + WinBollNewsBean.saveBeanList(context, _WinBollNewsBeanList, WinBollNewsBean.class); } - synchronized static void initAPPSOSReportBeanList(Context context) { - if (_SOSReportBeanList == null) { - _SOSReportBeanList = new ArrayList(); - SOSReportBean.loadBeanList(context, _SOSReportBeanList, SOSReportBean.class); + synchronized static void initWinBollNewsBeanList(Context context) { + if (_WinBollNewsBeanList == null) { + _WinBollNewsBeanList = new ArrayList(); + WinBollNewsBean.loadBeanList(context, _WinBollNewsBeanList, WinBollNewsBean.class); } - if (_SOSReportBeanList == null) { - _SOSReportBeanList = new ArrayList(); - SOSReportBean.saveBeanList(context, _SOSReportBeanList, SOSReportBean.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_sos); + RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_news); //设置按钮点击事件 - Intent intentPre = new Intent(context, SOSWidgetClickListener.class); - intentPre.setAction(SOSWidgetClickListener.ACTION_PRE); + 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, SOSWidgetClickListener.class); - intentNext.setAction(SOSWidgetClickListener.ACTION_NEXT); + 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.infoTextView, getPageInfo()); - views.setTextViewText(R.id.sosReportTextView, getMessage()); + 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 (_SOSReportBeanList != null) { + if (_WinBollNewsBeanList != null) { int start = _OnePageLinesCount * _CurrentPageIndex; - start = _SOSReportBeanList.size() > start ? start : _SOSReportBeanList.size() - 1; - for (int i = start, j = 0; i < _SOSReportBeanList.size() && j < _OnePageLinesCount && start > -1; i++, j++) { - msgTemp.add(_SOSReportBeanList.get(i).getSosReport()); + 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; @@ -152,33 +153,33 @@ public class SOSWidget extends AppWidgetProvider { } public static void prePage(Context context) { - if (_SOSReportBeanList != null) { + if (_WinBollNewsBeanList != null) { if (_CurrentPageIndex > 0) { _CurrentPageIndex = _CurrentPageIndex - 1; } - Intent intentWidget = new Intent(context, SOSWidget.class); - intentWidget.setAction(SOSWidget.ACTION_RELOAD_REPORT); + Intent intentWidget = new Intent(context, APPNewsWidget.class); + intentWidget.setAction(APPNewsWidget.ACTION_RELOAD_REPORT); context.sendBroadcast(intentWidget); } } public static void nextPage(Context context) { - if (_SOSReportBeanList != null) { - if ((_CurrentPageIndex + 1) * _OnePageLinesCount < _SOSReportBeanList.size()) { + if (_WinBollNewsBeanList != null) { + if ((_CurrentPageIndex + 1) * _OnePageLinesCount < _WinBollNewsBeanList.size()) { _CurrentPageIndex = _CurrentPageIndex + 1; } - Intent intentWidget = new Intent(context, SOSWidget.class); - intentWidget.setAction(SOSWidget.ACTION_RELOAD_REPORT); + Intent intentWidget = new Intent(context, APPNewsWidget.class); + intentWidget.setAction(APPNewsWidget.ACTION_RELOAD_REPORT); context.sendBroadcast(intentWidget); } } String getPageInfo() { - if (_SOSReportBeanList == null) { + if (_WinBollNewsBeanList == null) { return "0/0"; } - int leftCount = _SOSReportBeanList.size() % _OnePageLinesCount; - int currentPageCount = _SOSReportBeanList.size() / _OnePageLinesCount + (leftCount == 0 ?0: 1); + 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/java/cc/winboll/studio/appbase/widgets/SOSWidgetClickListener.java b/appbase/src/main/java/cc/winboll/studio/appbase/widgets/APPNewsWidgetClickListener.java similarity index 65% rename from appbase/src/main/java/cc/winboll/studio/appbase/widgets/SOSWidgetClickListener.java rename to appbase/src/main/java/cc/winboll/studio/appbase/widgets/APPNewsWidgetClickListener.java index 42dc31f..bfe263f 100644 --- a/appbase/src/main/java/cc/winboll/studio/appbase/widgets/SOSWidgetClickListener.java +++ b/appbase/src/main/java/cc/winboll/studio/appbase/widgets/APPNewsWidgetClickListener.java @@ -10,11 +10,11 @@ import android.content.Context; import android.content.Intent; import cc.winboll.studio.libappbase.LogUtils; -public class SOSWidgetClickListener extends BroadcastReceiver { +public class APPNewsWidgetClickListener extends BroadcastReceiver { - 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"; + 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) { @@ -25,10 +25,10 @@ public class SOSWidgetClickListener extends BroadcastReceiver { } if (action.equals(ACTION_PRE)) { LogUtils.d(TAG, "ACTION_PRE"); - SOSWidget.prePage(context); + APPNewsWidget.prePage(context); } else if (action.equals(ACTION_NEXT)) { LogUtils.d(TAG, "ACTION_NEXT"); - SOSWidget.nextPage(context); + APPNewsWidget.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 a17706a..3cca484 100644 --- a/appbase/src/main/res/layout/activity_main.xml +++ b/appbase/src/main/res/layout/activity_main.xml @@ -1,149 +1,194 @@ + android:layout_width="match_parent" + android:layout_height="match_parent"> - - - - - + android:layout_weight="1.0"> - - - -