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

Commit 614074e5 authored by Jaewan Kim's avatar Jaewan Kim
Browse files

Hide Linux terminal if VM isn't supported

Bug: 385216798
Test: atest
Flag: Build.RELEASE_AVF_SUPPORT_CUSTOM_VM_WITH_PARAVIRTUALIZED_DEVICES
Change-Id: I06fe52cf877deb3cd9ebc61af1579931b97d7766
parent 51769c2e
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -126,6 +126,7 @@ android_library {
    },

    libs: [
        "framework-virtualization.stubs.system",
        "telephony-common",
        "ims-common",
    ],
+8 −1
Original line number Diff line number Diff line
@@ -16,10 +16,13 @@

package com.android.settings.development.linuxterminal;

import static android.system.virtualmachine.VirtualMachineManager.CAPABILITY_NON_PROTECTED_VM;

import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Process;
import android.os.storage.StorageManager;
import android.system.virtualmachine.VirtualMachineManager;
import android.text.TextUtils;
import android.util.DataUnit;

@@ -58,9 +61,13 @@ public class LinuxTerminalPreferenceController extends DeveloperOptionsPreferenc

        StorageManager storageManager =
                Objects.requireNonNull(context.getSystemService(StorageManager.class));
        VirtualMachineManager virtualMachineManager =
                Objects.requireNonNull(context.getSystemService(VirtualMachineManager.class));
        mIsDeviceCapable =
                getTotalMemory() >= MEMORY_MIN_BYTES
                        && storageManager.getPrimaryStorageSize() >= STORAGE_MIN_BYTES;
                        && storageManager.getPrimaryStorageSize() >= STORAGE_MIN_BYTES
                        && ((virtualMachineManager.getCapabilities() & CAPABILITY_NON_PROTECTED_VM)
                                != 0);
    }

    // Avoid lazy initialization because this may be called before displayPreference().
+1 −0
Original line number Diff line number Diff line
@@ -80,6 +80,7 @@ android_robolectric_test {

    libs: [
        "android.test.mock.impl",
        "framework-virtualization.stubs.system",
        "ims-common",
    ],

+22 −4
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.settings.development.linuxterminal;

import static android.system.virtualmachine.VirtualMachineManager.CAPABILITY_NON_PROTECTED_VM;

import static com.android.settings.development.linuxterminal.LinuxTerminalPreferenceController.MEMORY_MIN_BYTES;
import static com.android.settings.development.linuxterminal.LinuxTerminalPreferenceController.STORAGE_MIN_BYTES;
import static com.android.settings.development.linuxterminal.LinuxTerminalPreferenceController.TERMINAL_PACKAGE_NAME_RESID;
@@ -32,6 +34,7 @@ import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.storage.StorageManager;
import android.system.virtualmachine.VirtualMachineManager;

import org.junit.Before;
import org.junit.Test;
@@ -43,27 +46,33 @@ import org.robolectric.RobolectricTestRunner;
/** Tests {@link LinuxTerminalPreferenceController} */
@RunWith(RobolectricTestRunner.class)
public class LinuxTerminalPreferenceControllerTest {
    private static final String TERMINAL_PACKAGE_NAME = "com.android.virtualization.terminal";

    @Mock private Context mContext;
    @Mock private PackageManager mPackageManager;
    @Mock private StorageManager mStorageManager;
    @Mock private VirtualMachineManager mVirtualMachineManager;
    @Mock private PackageInfo mPackageInfo;

    private String mTerminalPackageName = "com.android.virtualization.terminal";
    private LinuxTerminalPreferenceController mController;

    @Before
    public void setup() throws Exception {
        MockitoAnnotations.initMocks(this);
        doReturn(mTerminalPackageName).when(mContext).getString(TERMINAL_PACKAGE_NAME_RESID);
        doReturn(TERMINAL_PACKAGE_NAME).when(mContext).getString(TERMINAL_PACKAGE_NAME_RESID);

        doReturn(mPackageManager).when(mContext).getPackageManager();
        doReturn(mPackageInfo)
                .when(mPackageManager)
                .getPackageInfo(eq(mTerminalPackageName), anyInt());
                .getPackageInfo(eq(TERMINAL_PACKAGE_NAME), anyInt());

        doReturn(mStorageManager).when(mContext).getSystemService(StorageManager.class);
        doReturn(STORAGE_MIN_BYTES).when(mStorageManager).getPrimaryStorageSize();

        doReturn(mVirtualMachineManager)
                .when(mContext)
                .getSystemService(VirtualMachineManager.class);
        doReturn(CAPABILITY_NON_PROTECTED_VM).when(mVirtualMachineManager).getCapabilities();
    }

    @Test
@@ -82,6 +91,15 @@ public class LinuxTerminalPreferenceControllerTest {
        assertThat(mController.isAvailable()).isFalse();
    }

    @Test
    public void isAvailable_whenVmNotSupported_returnFalse() {
        doReturn(0).when(mVirtualMachineManager).getCapabilities();

        mController = createController(mContext);

        assertThat(mController.isAvailable()).isFalse();
    }

    @Test
    public void isAvailable_whenPackageExists_returnsTrue() {
        mController = createController(mContext);
@@ -102,7 +120,7 @@ public class LinuxTerminalPreferenceControllerTest {
    public void isAvailable_whenAppDoesNotExist_returnsFalse() throws Exception {
        doThrow(new NameNotFoundException())
                .when(mPackageManager)
                .getPackageInfo(eq(mTerminalPackageName), anyInt());
                .getPackageInfo(eq(TERMINAL_PACKAGE_NAME), anyInt());

        mController = createController(mContext);