Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4167b42f authored by Po-Chien Hsueh's avatar Po-Chien Hsueh
Browse files

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
parent c5b6931f
Loading
Loading
Loading
Loading
+17 −0
Original line number Original line Diff line number Diff line
@@ -35,6 +35,8 @@ import android.os.Message;
import android.os.Messenger;
import android.os.Messenger;
import android.os.ParcelableException;
import android.os.ParcelableException;
import android.os.RemoteException;
import android.os.RemoteException;
import android.os.SystemProperties;
import android.util.FeatureFlagUtils;
import android.util.Slog;
import android.util.Slog;


import java.lang.annotation.Retention;
import java.lang.annotation.Retention;
@@ -315,6 +317,11 @@ public class DynamicSystemClient {
     */
     */
    @RequiresPermission(android.Manifest.permission.INSTALL_DYNAMIC_SYSTEM)
    @RequiresPermission(android.Manifest.permission.INSTALL_DYNAMIC_SYSTEM)
    public void bind() {
    public void bind() {
        if (!featureFlagEnabled()) {
            Slog.w(TAG, FeatureFlagUtils.DYNAMIC_SYSTEM + " not enabled; bind() aborted.");
            return;
        }

        Intent intent = new Intent();
        Intent intent = new Intent();
        intent.setClassName("com.android.dynsystem",
        intent.setClassName("com.android.dynsystem",
                "com.android.dynsystem.DynamicSystemInstallationService");
                "com.android.dynsystem.DynamicSystemInstallationService");
@@ -381,6 +388,11 @@ public class DynamicSystemClient {
    @RequiresPermission(android.Manifest.permission.INSTALL_DYNAMIC_SYSTEM)
    @RequiresPermission(android.Manifest.permission.INSTALL_DYNAMIC_SYSTEM)
    public void start(@NonNull Uri systemUrl, @BytesLong long systemSize,
    public void start(@NonNull Uri systemUrl, @BytesLong long systemSize,
            @BytesLong long userdataSize) {
            @BytesLong long userdataSize) {
        if (!featureFlagEnabled()) {
            Slog.w(TAG, FeatureFlagUtils.DYNAMIC_SYSTEM + " not enabled; start() aborted.");
            return;
        }

        Intent intent = new Intent();
        Intent intent = new Intent();


        intent.setClassName("com.android.dynsystem",
        intent.setClassName("com.android.dynsystem",
@@ -395,6 +407,11 @@ public class DynamicSystemClient {
        mContext.startActivity(intent);
        mContext.startActivity(intent);
    }
    }


    private boolean featureFlagEnabled() {
        return SystemProperties.getBoolean(
                FeatureFlagUtils.PERSIST_PREFIX + FeatureFlagUtils.DYNAMIC_SYSTEM, false);
    }

    private void handleMessage(Message msg) {
    private void handleMessage(Message msg) {
        switch (msg.what) {
        switch (msg.what) {
            case MSG_POST_STATUS:
            case MSG_POST_STATUS:
+11 −0
Original line number Original line Diff line number Diff line
@@ -19,8 +19,10 @@ package com.android.dynsystem;
import android.content.BroadcastReceiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Context;
import android.content.Intent;
import android.content.Intent;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.UserHandle;
import android.os.image.DynamicSystemClient;
import android.os.image.DynamicSystemClient;
import android.util.FeatureFlagUtils;
import android.util.Log;
import android.util.Log;




@@ -35,6 +37,10 @@ public class BootCompletedReceiver extends BroadcastReceiver {


    @Override
    @Override
    public void onReceive(Context context, Intent intent) {
    public void onReceive(Context context, Intent intent) {
        if (!featureFlagEnabled()) {
            return;
        }

        String action = intent.getAction();
        String action = intent.getAction();


        Log.d(TAG, "Broadcast received: " + action);
        Log.d(TAG, "Broadcast received: " + action);
@@ -47,4 +53,9 @@ public class BootCompletedReceiver extends BroadcastReceiver {
            context.startServiceAsUser(startServiceIntent, UserHandle.SYSTEM);
            context.startServiceAsUser(startServiceIntent, UserHandle.SYSTEM);
        }
        }
    }
    }

    private boolean featureFlagEnabled() {
        return SystemProperties.getBoolean(
                FeatureFlagUtils.PERSIST_PREFIX + FeatureFlagUtils.DYNAMIC_SYSTEM, false);
    }
}
}
+13 −0
Original line number Original line Diff line number Diff line
@@ -25,8 +25,10 @@ import android.content.Context;
import android.content.Intent;
import android.content.Intent;
import android.net.Uri;
import android.net.Uri;
import android.os.Bundle;
import android.os.Bundle;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.UserHandle;
import android.os.image.DynamicSystemClient;
import android.os.image.DynamicSystemClient;
import android.util.FeatureFlagUtils;
import android.util.Log;
import android.util.Log;




@@ -49,6 +51,12 @@ public class VerificationActivity extends Activity {
    protected void onCreate(Bundle savedInstanceState) {
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(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);
        KeyguardManager km = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);


        if (km != null) {
        if (km != null) {
@@ -98,6 +106,11 @@ public class VerificationActivity extends Activity {
        startServiceAsUser(intent, UserHandle.SYSTEM);
        startServiceAsUser(intent, UserHandle.SYSTEM);
    }
    }


    private boolean featureFlagEnabled() {
        return SystemProperties.getBoolean(
                FeatureFlagUtils.PERSIST_PREFIX + FeatureFlagUtils.DYNAMIC_SYSTEM, false);
    }

    static boolean isVerified(String url) {
    static boolean isVerified(String url) {
        return sVerifiedUrl != null && sVerifiedUrl.equals(url);
        return sVerifiedUrl != null && sVerifiedUrl.equals(url);
    }
    }