diff options
-rw-r--r-- | packages/DynamicSystemInstallationService/src/com/android/dynsystem/BootCompletedReceiver.java | 25 | ||||
-rw-r--r-- | services/core/java/com/android/server/DynamicSystemService.java | 13 |
2 files changed, 27 insertions, 11 deletions
diff --git a/packages/DynamicSystemInstallationService/src/com/android/dynsystem/BootCompletedReceiver.java b/packages/DynamicSystemInstallationService/src/com/android/dynsystem/BootCompletedReceiver.java index ea7b378eb60..06c52942e67 100644 --- a/packages/DynamicSystemInstallationService/src/com/android/dynsystem/BootCompletedReceiver.java +++ b/packages/DynamicSystemInstallationService/src/com/android/dynsystem/BootCompletedReceiver.java @@ -22,8 +22,8 @@ import android.content.Intent; import android.os.SystemProperties; import android.os.UserHandle; import android.os.image.DynamicSystemClient; +import android.os.image.DynamicSystemManager; import android.util.FeatureFlagUtils; -import android.util.Log; /** @@ -37,21 +37,26 @@ public class BootCompletedReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { - if (!featureFlagEnabled()) { + String action = intent.getAction(); + + if (!Intent.ACTION_BOOT_COMPLETED.equals(action)) { return; } - String action = intent.getAction(); - - Log.d(TAG, "Broadcast received: " + action); + DynamicSystemManager dynSystem = + (DynamicSystemManager) context.getSystemService(Context.DYNAMIC_SYSTEM_SERVICE); - if (Intent.ACTION_BOOT_COMPLETED.equals(action)) { - Intent startServiceIntent = new Intent( - context, DynamicSystemInstallationService.class); + boolean isInUse = (dynSystem != null) && dynSystem.isInUse(); - startServiceIntent.setAction(DynamicSystemClient.ACTION_NOTIFY_IF_IN_USE); - context.startServiceAsUser(startServiceIntent, UserHandle.SYSTEM); + if (!isInUse && !featureFlagEnabled()) { + return; } + + Intent startServiceIntent = new Intent( + context, DynamicSystemInstallationService.class); + + startServiceIntent.setAction(DynamicSystemClient.ACTION_NOTIFY_IF_IN_USE); + context.startServiceAsUser(startServiceIntent, UserHandle.SYSTEM); } private boolean featureFlagEnabled() { diff --git a/services/core/java/com/android/server/DynamicSystemService.java b/services/core/java/com/android/server/DynamicSystemService.java index 9d979a6701c..f92d0e0ff6f 100644 --- a/services/core/java/com/android/server/DynamicSystemService.java +++ b/services/core/java/com/android/server/DynamicSystemService.java @@ -152,7 +152,18 @@ public class DynamicSystemService extends IDynamicSystemService.Stub implements @Override public boolean isInUse() throws RemoteException { - return getGsiService().isGsiRunning(); + boolean gsidWasRunning = "running".equals(SystemProperties.get("init.svc.gsid")); + boolean isInUse = false; + + try { + isInUse = getGsiService().isGsiRunning(); + } finally { + if (!gsidWasRunning && !isInUse) { + SystemProperties.set("ctl.stop", "gsid"); + } + } + + return isInUse; } @Override |