diff --git a/app/build.gradle b/app/build.gradle index 1319796f..45922053 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -5,7 +5,7 @@ plugins { // 10,00,000 major-minor-build def AppMajorVersion = 1 def AppMinorVersion = 3 -def AppBuildNumber = 175 +def AppBuildNumber = 176 def AppVersionName = AppMajorVersion + "." + AppMinorVersion + "." + AppBuildNumber def AppVersionCode = AppMajorVersion * 100000 + AppMinorVersion * 1000 + AppBuildNumber diff --git a/app/src/main/java/com/xypower/mpapp/MainActivity.java b/app/src/main/java/com/xypower/mpapp/MainActivity.java index 3b49fa16..a6baaffc 100644 --- a/app/src/main/java/com/xypower/mpapp/MainActivity.java +++ b/app/src/main/java/com/xypower/mpapp/MainActivity.java @@ -136,13 +136,15 @@ public class MainActivity extends AppCompatActivity { } else { Intent resIntent = getPackageManager().getLaunchIntentForPackage(MicroPhotoContext.PACKAGE_NAME_MPRES); - resIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); - resIntent.putExtra("initres", 1); - String sn = MicroPhotoService.getSerialNumber(); - if (!TextUtils.isEmpty(sn)) { - resIntent.putExtra("sn", sn); + if (resIntent != null) { + resIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + resIntent.putExtra("initres", 1); + String sn = MicroPhotoService.getSerialNumber(); + if (!TextUtils.isEmpty(sn)) { + resIntent.putExtra("sn", sn); + } + startActivity(resIntent); } - startActivity(resIntent); } } diff --git a/mpmaster/build.gradle b/mpmaster/build.gradle index 2d4c8a74..7771dca5 100644 --- a/mpmaster/build.gradle +++ b/mpmaster/build.gradle @@ -4,7 +4,7 @@ plugins { def AppMajorVersion = 1 def AppMinorVersion = 1 -def AppBuildNumber = 32 +def AppBuildNumber = 33 def AppVersionName = AppMajorVersion + "." + AppMinorVersion + "." + AppBuildNumber def AppVersionCode = AppMajorVersion * 100000 + AppMinorVersion * 1000 + AppBuildNumber diff --git a/mpmaster/src/main/java/com/xypower/mpmaster/MainActivity.java b/mpmaster/src/main/java/com/xypower/mpmaster/MainActivity.java index 490fb3bd..4df5c1e3 100644 --- a/mpmaster/src/main/java/com/xypower/mpmaster/MainActivity.java +++ b/mpmaster/src/main/java/com/xypower/mpmaster/MainActivity.java @@ -22,6 +22,7 @@ import android.view.MenuItem; import android.widget.TextView; import com.dev.devapi.api.SysApi; +import com.xypower.common.FilesUtils; import com.xypower.common.MicroPhotoContext; import java.io.File; @@ -45,9 +46,21 @@ public class MainActivity extends AppCompatActivity { mLaunchTime = System.currentTimeMillis(); // Try to init config - MpMasterService.initMpMasterConfigurations(getApplicationContext()); + // MpMasterService.initMpMasterConfigurations(getApplicationContext()); // MpMasterService.initMpAppConfigurations(getApplicationContext()); + String appPath = MicroPhotoContext.buildMasterAppDir(getApplicationContext()); + File appPathFile = new File(appPath); + File appCfgFile = new File(appPathFile, "data/Master.json"); + if (!appCfgFile.exists()) { + Intent resIntent = getPackageManager().getLaunchIntentForPackage(MicroPhotoContext.PACKAGE_NAME_MPRES); + if (resIntent != null) { + resIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + resIntent.putExtra("initres", 2); + startActivity(resIntent); + } + } + ActionBar actionBar = getSupportActionBar(); mHandler = new Handler(); diff --git a/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java b/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java index 1b39ad49..26e81ed3 100644 --- a/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java +++ b/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java @@ -1417,7 +1417,7 @@ public class MpMasterService extends Service { } } - copyAssetsDir(context, "mpmst", dataPath.getAbsolutePath()); + copyAssetsDir(context, "mpmst/data", dataPath.getAbsolutePath()); return true; } diff --git a/mpres/build.gradle b/mpres/build.gradle index 262fba8c..0e3e2469 100644 --- a/mpres/build.gradle +++ b/mpres/build.gradle @@ -5,7 +5,7 @@ plugins { def AppMajorVersion = 1 def AppMinorVersion = 0 -def AppBuildNumber = 10 +def AppBuildNumber = 11 def ConfigProjectOwner = "HENAN_2024" def AppVersionName = AppMajorVersion + "." + AppMinorVersion + "." + AppBuildNumber diff --git a/mpres/src/main/java/com/xypower/mpres/MainActivity.java b/mpres/src/main/java/com/xypower/mpres/MainActivity.java index c49a5133..c1fdd21e 100644 --- a/mpres/src/main/java/com/xypower/mpres/MainActivity.java +++ b/mpres/src/main/java/com/xypower/mpres/MainActivity.java @@ -1,11 +1,13 @@ package com.xypower.mpres; +import android.app.ActivityManager; import android.content.Context; import android.content.Intent; import android.content.res.AssetManager; import android.os.Bundle; import android.os.Handler; import android.text.TextUtils; +import android.util.Log; import androidx.appcompat.app.AppCompatActivity; import androidx.core.graphics.Insets; @@ -24,35 +26,64 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStreamWriter; +import java.util.List; +import java.util.concurrent.ExecutionException; public class MainActivity extends AppCompatActivity { + private final static String TAG = "MPRES"; + private Handler mHandler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); + mHandler = new Handler(); + Intent intent = getIntent(); int initres = intent.getIntExtra("initres", 0); - if (initres != 0) { - mHandler = new Handler(); + if (initres == 1) { + Log.i(TAG, "Init Config for MpApp"); + final String sn = intent.getStringExtra("sn"); + final Context context = getApplicationContext(); Runnable runnable = new Runnable() { @Override public void run() { - notifyMpApp(); + + try { + restartMpApp(getApplicationContext(), "FIRST Config Init"); + sleep(100); + System.exit(0); + } catch (Exception ex) { + ex.printStackTrace(); + } } }; - initMpAppConfigurations(getApplicationContext(), mHandler, sn, runnable); - } - } + initMpAppConfigurations(context, mHandler, sn, runnable); + } else if (initres == 2) { + Log.i(TAG, "Init Config for MpMaster"); - private void notifyMpApp() { - restartMpApp(getApplicationContext(), "FIRST Config Init"); - sleep(100); - System.exit(0); + final Context context = getApplicationContext(); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + try { + if (initMpMasterConfigurations(context)) { + restartMpMasterApp(context); + } + } catch (Exception ex) { + ex.printStackTrace(); + } + + sleep(1000); + System.exit(0); + } + }, 0); + + } } public static boolean initMpAppConfigurations(final Context context, final Handler handler, final String sn, final Runnable runnable) { @@ -169,7 +200,7 @@ public class MainActivity extends AppCompatActivity { } } - copyAssetsDir(context, "mpmst", dataPath.getAbsolutePath()); + copyAssetsDir(context, "mpmst/data", dataPath.getAbsolutePath()); return true; } @@ -262,7 +293,8 @@ public class MainActivity extends AppCompatActivity { public static void restartMpApp(Context context, String reason) { - SysApi.forceStopApp(context, MicroPhotoContext.PACKAGE_NAME_MPAPP); + // SysApi.forceStopApp(context, MicroPhotoContext.PACKAGE_NAME_MPAPP); + killAppProcess(context, MicroPhotoContext.PACKAGE_NAME_MPAPP); sleep(100); try { @@ -279,4 +311,65 @@ public class MainActivity extends AppCompatActivity { e.printStackTrace(); } } + + public static void restartMpMasterApp(Context context) { + + killAppProcess(context, MicroPhotoContext.PACKAGE_NAME_MPMASTER); + sleep(50); + + try { + Intent intent = context.getPackageManager().getLaunchIntentForPackage(MicroPhotoContext.PACKAGE_NAME_MPMASTER); + if (intent != null) { + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); + context.startActivity(intent); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + private static boolean killAppProcess(final Context context, String packageName) { + boolean killed = false; + try { + ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); + List processes = am.getRunningAppProcesses(); + + for (ActivityManager.RunningAppProcessInfo rapi : processes) { + if (rapi.pkgList == null || rapi.pkgList.length == 0) { + continue; + } + + for (String pkg : rapi.pkgList) { + if (TextUtils.equals(pkg, packageName)) { + killed = true; + android.os.Process.killProcess(rapi.pid); + break; + } + } + + if (killed) { + break; + } + } + } catch (Exception ex) { + ex.printStackTrace(); + } + + return killed; + } + + private boolean killAppByService(final Context context, String packageName, String serviceClassName) { + ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); + List services = am.getRunningServices(Integer.MAX_VALUE); + + boolean isRunning = false; + for (ActivityManager.RunningServiceInfo rsi : services) { + if (packageName.equalsIgnoreCase(rsi.service.getPackageName()) && TextUtils.equals(serviceClassName, rsi.service.getClassName())) { + isRunning = true; + break; + } + } + + return isRunning; + } } \ No newline at end of file