From 63b1d2deced6f8baba9c52e54ffc561c593348c6 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Tue, 15 Apr 2025 10:57:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=A3=81=E8=B4=B4=E5=B7=A5?= =?UTF-8?q?=E5=85=B7...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- autoinstaller/build.properties | 4 +- autoinstaller/src/main/AndroidManifest.xml | 15 ++++ .../autoinstaller/AppBaseTileService.java | 83 +++++++++++++++++++ .../studio/autoinstaller/MainActivity.java | 68 ++++++++++++--- .../autoinstaller/models/AppConfigs.java | 31 +++++-- .../autoinstaller/models/MainServiceBean.java | 67 +++++++++++++++ .../autoinstaller/receivers/MainReceiver.java | 2 +- .../services/AssistantService.java | 6 +- .../autoinstaller/services/MainService.java | 15 ++-- .../src/main/res/drawable/ic_cloud.xml | 11 +++ .../main/res/drawable/ic_cloud_outline.xml | 11 +++ autoinstaller/src/main/res/values/strings.xml | 1 + 12 files changed, 284 insertions(+), 30 deletions(-) create mode 100644 autoinstaller/src/main/java/cc/winboll/studio/autoinstaller/AppBaseTileService.java create mode 100644 autoinstaller/src/main/java/cc/winboll/studio/autoinstaller/models/MainServiceBean.java create mode 100644 autoinstaller/src/main/res/drawable/ic_cloud.xml create mode 100644 autoinstaller/src/main/res/drawable/ic_cloud_outline.xml diff --git a/autoinstaller/build.properties b/autoinstaller/build.properties index b632046..1bda88a 100644 --- a/autoinstaller/build.properties +++ b/autoinstaller/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Wed Apr 02 21:25:51 HKT 2025 +#Tue Apr 15 02:52:13 GMT 2025 stageCount=1 libraryProject= baseVersion=15.2 publishVersion=15.2.0 -buildCount=0 +buildCount=12 baseBetaVersion=15.2.1 diff --git a/autoinstaller/src/main/AndroidManifest.xml b/autoinstaller/src/main/AndroidManifest.xml index 506ea85..89a2c07 100644 --- a/autoinstaller/src/main/AndroidManifest.xml +++ b/autoinstaller/src/main/AndroidManifest.xml @@ -54,6 +54,21 @@ + + + + + + + + + + _APKModelList = new ArrayList(); LogView mLogView; TextClock mTextClock; @@ -61,6 +67,7 @@ public class MainActivity extends Activity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); + _MainActivity = this; initView(); if (getIntent().getAction().equals(ACTION_NEW_INSTALLTASK)) { @@ -77,11 +84,7 @@ public class MainActivity extends Activity { mLogView = findViewById(R.id.logview); mLogView.start(); - AppConfigs appConfigs = AppConfigs.loadAppConfigs(this); - if (appConfigs == null) { - appConfigs = new AppConfigs(); - AppConfigs.saveAppConfigs(this, appConfigs); - } + AppConfigs appConfigs = AppConfigs.getInstance(this).loadAppConfigs(this); if (appConfigs.getSetupMode() == AppConfigs.SetupMode.WATCHOUTPUTINSTALLER) { ((RadioButton)findViewById(R.id.activitymainRadioButton1)).setChecked(true); @@ -196,10 +199,15 @@ public class MainActivity extends Activity { } public void onLockPath(View view) { - AppConfigs appConfigs = AppConfigs.loadAppConfigs(this); - Switch sw = (Switch)view; - if (sw.isChecked()) { + setMainServiceStatus(sw.isChecked()); + } + + public void setMainServiceStatus(boolean isEnable) { + AppConfigs appConfigs = AppConfigs.getInstance(this).loadAppConfigs(this); + + Switch sw = (Switch)findViewById(R.id.activitymainSwitch1); + if (isEnable) { String szFilePath = mEditText.getText().toString(); // 设置空路径时退出 @@ -247,7 +255,7 @@ public class MainActivity extends Activity { stopWatchingFile(); } - AppConfigs.saveAppConfigs(this, appConfigs); + AppConfigs.getInstance(this).saveAppConfigs(this, appConfigs); } void stopWatchingFile() { @@ -307,7 +315,7 @@ public class MainActivity extends Activity { }*/ public void onChangeSetupMode(View view) { - AppConfigs appConfigs = AppConfigs.loadAppConfigs(this); + AppConfigs appConfigs = AppConfigs.getInstance(this).loadAppConfigs(this); if (view.getId() == R.id.activitymainRadioButton1) { appConfigs.setSetupMode(AppConfigs.SetupMode.WATCHOUTPUTINSTALLER); @@ -316,6 +324,42 @@ public class MainActivity extends Activity { appConfigs.setSetupMode(AppConfigs.SetupMode.NEWAPKINFONEWAPKINFO); ((RadioButton)findViewById(R.id.activitymainRadioButton1)).setChecked(false); } - AppConfigs.saveAppConfigs(this, appConfigs); + AppConfigs.getInstance(this).saveAppConfigs(this, appConfigs); + } + + // 定义Handler + static Handler _Handler = new Handler() { + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + if (msg.what == MSG_UPDATE_STATUS) { + if (_MainActivity != null) { + boolean isEnableMainService = (boolean)msg.obj; + // 处理消息,这里更新 MainService 的状态 + _MainActivity.setMainServiceStatus(isEnableMainService); + } + } + } + }; + + static void updateMainServiceStatus(boolean isEnable) { + if (_Handler != null) { + Message msg = new Message(); + msg.obj = isEnable; + msg.what = MSG_UPDATE_STATUS; + _Handler.sendMessage(msg); + } + } + + public static void stopMainService() { + if (_MainActivity != null && _Handler != null) { + updateMainServiceStatus(false); + } + } + + public static void startMainService() { + if (_MainActivity != null && _Handler != null) { + updateMainServiceStatus(true); + } } } diff --git a/autoinstaller/src/main/java/cc/winboll/studio/autoinstaller/models/AppConfigs.java b/autoinstaller/src/main/java/cc/winboll/studio/autoinstaller/models/AppConfigs.java index 19bcc05..ccacfd1 100644 --- a/autoinstaller/src/main/java/cc/winboll/studio/autoinstaller/models/AppConfigs.java +++ b/autoinstaller/src/main/java/cc/winboll/studio/autoinstaller/models/AppConfigs.java @@ -15,6 +15,8 @@ import java.io.IOException; import java.io.Serializable; import java.io.StringReader; import java.io.StringWriter; +import android.drm.DrmConvertedStatus; +import com.hjq.toast.ToastUtils; public class AppConfigs implements Serializable { @@ -26,6 +28,20 @@ public class AppConfigs implements Serializable { NEWAPKINFONEWAPKINFO // 调用[应用信息查看器]打开应用包 }; + static volatile AppConfigs _AppConfigs; + Context mContext; + + AppConfigs(Context context) { + mContext = context; + } + + public static synchronized AppConfigs getInstance(Context context) { + if (_AppConfigs == null) { + _AppConfigs = new AppConfigs(context); + } + return _AppConfigs; + } + // 监控文件路径 private String watchingFilePath = ""; @@ -85,8 +101,8 @@ public class AppConfigs implements Serializable { return ""; } - public static AppConfigs parseAppConfigs(String szAppConfigs) { - AppConfigs appConfigs = new AppConfigs(); + public AppConfigs parseAppConfigs(String szAppConfigs) { + AppConfigs appConfigs = new AppConfigs(mContext); // 创建 JsonWriter 对象 StringReader stringReader = new StringReader(szAppConfigs); JsonReader jsonReader = new @@ -122,19 +138,20 @@ public class AppConfigs implements Serializable { return context.getExternalFilesDir(TAG) + "/" + TAG + ".json"; } - public static AppConfigs loadAppConfigs(Context context) { + public AppConfigs loadAppConfigs(Context context) { AppConfigs appConfigs = null; try { String szJson = FileUtil.readFile(getDataPath(context)); - appConfigs = AppConfigs.parseAppConfigs(szJson); + appConfigs = AppConfigs.getInstance(mContext).parseAppConfigs(szJson); } catch (IOException e) { LogUtils.d(TAG, e.getMessage(), Thread.currentThread().getStackTrace()); } return appConfigs; } - public static void saveAppConfigs(Context context, AppConfigs appConfigs) { + public void saveAppConfigs(Context context, AppConfigs appConfigs) { try { + ToastUtils.show(String.format("AppConfigs set enable service to %s", appConfigs.isEnableService())); //LogUtils.d(TAG, "appConfigs is : " + appConfigs.toString()); String szJson = appConfigs.toString(); FileUtil.writeFile(getDataPath(context), szJson); @@ -142,4 +159,8 @@ public class AppConfigs implements Serializable { LogUtils.d(TAG, e.getMessage(), Thread.currentThread().getStackTrace()); } } + + public void saveAppConfigs() { + saveAppConfigs(mContext, this); + } } diff --git a/autoinstaller/src/main/java/cc/winboll/studio/autoinstaller/models/MainServiceBean.java b/autoinstaller/src/main/java/cc/winboll/studio/autoinstaller/models/MainServiceBean.java new file mode 100644 index 0000000..f3c484a --- /dev/null +++ b/autoinstaller/src/main/java/cc/winboll/studio/autoinstaller/models/MainServiceBean.java @@ -0,0 +1,67 @@ +package cc.winboll.studio.autoinstaller.models; +import android.util.JsonReader; +import android.util.JsonWriter; +import cc.winboll.studio.libappbase.BaseBean; +import java.io.IOException; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/04/15 09:27:39 + * @Describe MainServiceBean + */ +public class MainServiceBean extends BaseBean { + + public static final String TAG = "MainServiceBean"; + + boolean isEnable; + + public MainServiceBean() { + this.isEnable = false; + } + + public void setIsEnable(boolean isEnable) { + this.isEnable = isEnable; + } + + public boolean isEnable() { + return isEnable; + } + + @Override + public String getName() { + return MainServiceBean.class.getName(); + } + + @Override + public void writeThisToJsonWriter(JsonWriter jsonWriter) throws IOException { + super.writeThisToJsonWriter(jsonWriter); + jsonWriter.name("isEnable").value(isEnable()); + + } + + @Override + public boolean initObjectsFromJsonReader(JsonReader jsonReader, String name) throws IOException { + if (super.initObjectsFromJsonReader(jsonReader, name)) { return true; } else { + if (name.equals("isEnable")) { + setIsEnable(jsonReader.nextBoolean()); + } else { + return false; + } + } + return true; + } + + @Override + public BaseBean readBeanFromJsonReader(JsonReader jsonReader) throws IOException { + jsonReader.beginObject(); + while (jsonReader.hasNext()) { + String name = jsonReader.nextName(); + if (!initObjectsFromJsonReader(jsonReader, name)) { + jsonReader.skipValue(); + } + } + // 结束 JSON 对象 + jsonReader.endObject(); + return this; + } +} diff --git a/autoinstaller/src/main/java/cc/winboll/studio/autoinstaller/receivers/MainReceiver.java b/autoinstaller/src/main/java/cc/winboll/studio/autoinstaller/receivers/MainReceiver.java index 0c592c8..a226fe0 100644 --- a/autoinstaller/src/main/java/cc/winboll/studio/autoinstaller/receivers/MainReceiver.java +++ b/autoinstaller/src/main/java/cc/winboll/studio/autoinstaller/receivers/MainReceiver.java @@ -23,7 +23,7 @@ public class MainReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { String szAction = intent.getAction(); if (szAction.equals(ACTION_BOOT_COMPLETED)) { - AppConfigs appConfigs = AppConfigs.loadAppConfigs(context); + AppConfigs appConfigs = AppConfigs.getInstance(context).loadAppConfigs(context); if (appConfigs.isEnableService()) { Intent intentService = new Intent(context, MainService.class); //intentService.putExtra(MainService.EXTRA_APKFILEPATH, appConfigs.getWatchingFilePath()); diff --git a/autoinstaller/src/main/java/cc/winboll/studio/autoinstaller/services/AssistantService.java b/autoinstaller/src/main/java/cc/winboll/studio/autoinstaller/services/AssistantService.java index 30f0eba..c91a811 100644 --- a/autoinstaller/src/main/java/cc/winboll/studio/autoinstaller/services/AssistantService.java +++ b/autoinstaller/src/main/java/cc/winboll/studio/autoinstaller/services/AssistantService.java @@ -46,7 +46,7 @@ public class AssistantService extends Service { public int onStartCommand(Intent intent, int flags, int startId) { //LogUtils.d(TAG, "call onStartCommand(...)"); run(); - AppConfigs appConfigs = AppConfigs.loadAppConfigs(AssistantService.this); + AppConfigs appConfigs = AppConfigs.getInstance(AssistantService.this).loadAppConfigs(AssistantService.this); return appConfigs.isEnableService() ? Service.START_STICKY: super.onStartCommand(intent, flags, startId); } @@ -68,7 +68,7 @@ public class AssistantService extends Service { // void run() { //LogUtils.d(TAG, "call run()"); - AppConfigs appConfigs = AppConfigs.loadAppConfigs(AssistantService.this); + AppConfigs appConfigs = AppConfigs.getInstance(AssistantService.this).loadAppConfigs(AssistantService.this); if (appConfigs.isEnableService()) { if (mIsThreadAlive == false) { // 设置运行状态 @@ -101,7 +101,7 @@ public class AssistantService extends Service { @Override public void onServiceDisconnected(ComponentName name) { //LogUtils.d(TAG, "call onServiceDisconnected(...)"); - AppConfigs appConfigs = AppConfigs.loadAppConfigs(AssistantService.this); + AppConfigs appConfigs = AppConfigs.getInstance(AssistantService.this).loadAppConfigs(AssistantService.this); if (appConfigs.isEnableService()) { wakeupAndBindMain(); } diff --git a/autoinstaller/src/main/java/cc/winboll/studio/autoinstaller/services/MainService.java b/autoinstaller/src/main/java/cc/winboll/studio/autoinstaller/services/MainService.java index 5370b69..d7bfd3e 100644 --- a/autoinstaller/src/main/java/cc/winboll/studio/autoinstaller/services/MainService.java +++ b/autoinstaller/src/main/java/cc/winboll/studio/autoinstaller/services/MainService.java @@ -26,6 +26,7 @@ import com.hjq.toast.ToastUtils; import java.io.File; import java.lang.ref.WeakReference; import java.util.ArrayList; +import cc.winboll.studio.autoinstaller.models.MainServiceBean; public class MainService extends Service { @@ -62,7 +63,7 @@ public class MainService extends Service { private void run() { - AppConfigs appConfigs = AppConfigs.loadAppConfigs(MainService.this); + AppConfigs appConfigs = AppConfigs.getInstance(MainService.this).loadAppConfigs(MainService.this); if (appConfigs.isEnableService()) { if (_mIsServiceAlive == false) { // 设置运行状态 @@ -77,8 +78,8 @@ public class MainService extends Service { startWatchingFile(appConfigs.getWatchingFilePath()); - LogUtils.d(TAG, "running..."); - ToastUtils.show("running..."); + //LogUtils.d(TAG, "running..."); + //ToastUtils.show("running..."); } else { LogUtils.d(TAG, "_mIsServiceAlive is " + Boolean.toString(_mIsServiceAlive)); @@ -105,7 +106,7 @@ public class MainService extends Service { LogUtils.d(TAG, "onStartCommand"); run(); - AppConfigs appConfigs = AppConfigs.loadAppConfigs(MainService.this); + AppConfigs appConfigs = AppConfigs.getInstance(MainService.this).loadAppConfigs(MainService.this); return appConfigs.isEnableService() ? Service.START_STICKY: super.onStartCommand(intent, flags, startId); } @@ -122,7 +123,7 @@ public class MainService extends Service { @Override public void onServiceDisconnected(ComponentName name) { //LogUtils.d(TAG, "call onServiceConnected(...)"); - AppConfigs appConfigs = AppConfigs.loadAppConfigs(MainService.this); + AppConfigs appConfigs = AppConfigs.getInstance(MainService.this).loadAppConfigs(MainService.this); if (appConfigs.isEnableService()) { // 唤醒守护进程 wakeupAndBindAssistant(); @@ -164,7 +165,7 @@ public class MainService extends Service { }); mFileListener.startWatching(); - ToastUtils.show("Start watching."); + //ToastUtils.show("Start watching."); } else { // 父级文件夹不存在,就提示用户 Toast.makeText(getApplication(), fParentDir.toString() + " no exist.", Toast.LENGTH_SHORT).show(); @@ -247,7 +248,7 @@ public class MainService extends Service { switch (message.what) { case MSG_INSTALL_APK: { - AppConfigs appConfigs = AppConfigs.loadAppConfigs(theActivity); + AppConfigs appConfigs = AppConfigs.getInstance(theActivity).loadAppConfigs(theActivity); if (appConfigs.getSetupMode() == AppConfigs.SetupMode.WATCHOUTPUTINSTALLER) { theActivity.installAPK2((String)message.obj); } else if (appConfigs.getSetupMode() == AppConfigs.SetupMode.NEWAPKINFONEWAPKINFO) { diff --git a/autoinstaller/src/main/res/drawable/ic_cloud.xml b/autoinstaller/src/main/res/drawable/ic_cloud.xml new file mode 100644 index 0000000..c116648 --- /dev/null +++ b/autoinstaller/src/main/res/drawable/ic_cloud.xml @@ -0,0 +1,11 @@ + + + + + diff --git a/autoinstaller/src/main/res/drawable/ic_cloud_outline.xml b/autoinstaller/src/main/res/drawable/ic_cloud_outline.xml new file mode 100644 index 0000000..a8ed00c --- /dev/null +++ b/autoinstaller/src/main/res/drawable/ic_cloud_outline.xml @@ -0,0 +1,11 @@ + + + + + diff --git a/autoinstaller/src/main/res/values/strings.xml b/autoinstaller/src/main/res/values/strings.xml index e1ebb98..2786107 100644 --- a/autoinstaller/src/main/res/values/strings.xml +++ b/autoinstaller/src/main/res/values/strings.xml @@ -1,3 +1,4 @@ AutoInstaller + AutoInstaller