summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPo-Chien Hsueh <pchsueh@google.com>2019-04-01 11:26:18 +0800
committerPo-Chien Hsueh <pchsueh@google.com>2019-04-03 10:29:31 +0800
commit4167b42f891232882637db2f2a606586770bf215 (patch)
tree3731abc7af76a612ff6bd1d8b2b90c6c27b379c5
parentc5b6931f27380bd312b74e98fc01288c2239d36f (diff)
downloadframeworks_base-4167b42f891232882637db2f2a606586770bf215.tar.gz
frameworks_base-4167b42f891232882637db2f2a606586770bf215.tar.bz2
frameworks_base-4167b42f891232882637db2f2a606586770bf215.zip
Use FeatureFlagPersistent to guard DynamicSystem
Check persistent feature flag 'settings_dynamic_system' before invoking the installation service. User can still use gsi_tool if the device is unlocked. Bug: 119647479 Test: Verified with 'adb shell am' and test app. Change-Id: If2265d877bc7eedf9b7a107bba04d2e95cf1b89a
-rw-r--r--core/java/android/os/image/DynamicSystemClient.java17
-rw-r--r--packages/DynamicSystemInstallationService/src/com/android/dynandroid/BootCompletedReceiver.java11
-rw-r--r--packages/DynamicSystemInstallationService/src/com/android/dynandroid/VerificationActivity.java13
3 files changed, 41 insertions, 0 deletions
diff --git a/core/java/android/os/image/DynamicSystemClient.java b/core/java/android/os/image/DynamicSystemClient.java
index fa2c480aaf4..8f68723e1b7 100644
--- a/core/java/android/os/image/DynamicSystemClient.java
+++ b/core/java/android/os/image/DynamicSystemClient.java
@@ -35,6 +35,8 @@ import android.os.Message;
import android.os.Messenger;
import android.os.ParcelableException;
import android.os.RemoteException;
+import android.os.SystemProperties;
+import android.util.FeatureFlagUtils;
import android.util.Slog;
import java.lang.annotation.Retention;
@@ -315,6 +317,11 @@ public class DynamicSystemClient {
*/
@RequiresPermission(android.Manifest.permission.INSTALL_DYNAMIC_SYSTEM)
public void bind() {
+ if (!featureFlagEnabled()) {
+ Slog.w(TAG, FeatureFlagUtils.DYNAMIC_SYSTEM + " not enabled; bind() aborted.");
+ return;
+ }
+
Intent intent = new Intent();
intent.setClassName("com.android.dynsystem",
"com.android.dynsystem.DynamicSystemInstallationService");
@@ -381,6 +388,11 @@ public class DynamicSystemClient {
@RequiresPermission(android.Manifest.permission.INSTALL_DYNAMIC_SYSTEM)
public void start(@NonNull Uri systemUrl, @BytesLong long systemSize,
@BytesLong long userdataSize) {
+ if (!featureFlagEnabled()) {
+ Slog.w(TAG, FeatureFlagUtils.DYNAMIC_SYSTEM + " not enabled; start() aborted.");
+ return;
+ }
+
Intent intent = new Intent();
intent.setClassName("com.android.dynsystem",
@@ -395,6 +407,11 @@ public class DynamicSystemClient {
mContext.startActivity(intent);
}
+ private boolean featureFlagEnabled() {
+ return SystemProperties.getBoolean(
+ FeatureFlagUtils.PERSIST_PREFIX + FeatureFlagUtils.DYNAMIC_SYSTEM, false);
+ }
+
private void handleMessage(Message msg) {
switch (msg.what) {
case MSG_POST_STATUS:
diff --git a/packages/DynamicSystemInstallationService/src/com/android/dynandroid/BootCompletedReceiver.java b/packages/DynamicSystemInstallationService/src/com/android/dynandroid/BootCompletedReceiver.java
index 38576ee4728..ea7b378eb60 100644
--- a/packages/DynamicSystemInstallationService/src/com/android/dynandroid/BootCompletedReceiver.java
+++ b/packages/DynamicSystemInstallationService/src/com/android/dynandroid/BootCompletedReceiver.java
@@ -19,8 +19,10 @@ package com.android.dynsystem;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
+import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.image.DynamicSystemClient;
+import android.util.FeatureFlagUtils;
import android.util.Log;
@@ -35,6 +37,10 @@ public class BootCompletedReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
+ if (!featureFlagEnabled()) {
+ return;
+ }
+
String action = intent.getAction();
Log.d(TAG, "Broadcast received: " + action);
@@ -47,4 +53,9 @@ public class BootCompletedReceiver extends BroadcastReceiver {
context.startServiceAsUser(startServiceIntent, UserHandle.SYSTEM);
}
}
+
+ private boolean featureFlagEnabled() {
+ return SystemProperties.getBoolean(
+ FeatureFlagUtils.PERSIST_PREFIX + FeatureFlagUtils.DYNAMIC_SYSTEM, false);
+ }
}
diff --git a/packages/DynamicSystemInstallationService/src/com/android/dynandroid/VerificationActivity.java b/packages/DynamicSystemInstallationService/src/com/android/dynandroid/VerificationActivity.java
index 269645d8016..b1c09381823 100644
--- a/packages/DynamicSystemInstallationService/src/com/android/dynandroid/VerificationActivity.java
+++ b/packages/DynamicSystemInstallationService/src/com/android/dynandroid/VerificationActivity.java
@@ -25,8 +25,10 @@ import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
+import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.image.DynamicSystemClient;
+import android.util.FeatureFlagUtils;
import android.util.Log;
@@ -49,6 +51,12 @@ public class VerificationActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ if (!featureFlagEnabled()) {
+ Log.w(TAG, FeatureFlagUtils.DYNAMIC_SYSTEM + " not enabled; activity aborted.");
+ finish();
+ return;
+ }
+
KeyguardManager km = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
if (km != null) {
@@ -98,6 +106,11 @@ public class VerificationActivity extends Activity {
startServiceAsUser(intent, UserHandle.SYSTEM);
}
+ private boolean featureFlagEnabled() {
+ return SystemProperties.getBoolean(
+ FeatureFlagUtils.PERSIST_PREFIX + FeatureFlagUtils.DYNAMIC_SYSTEM, false);
+ }
+
static boolean isVerified(String url) {
return sVerifiedUrl != null && sVerifiedUrl.equals(url);
}