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