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
This commit is contained in:
Jaewan Kim
2024-12-20 10:55:49 +09:00
parent 51769c2ed4
commit 614074e5c7
4 changed files with 32 additions and 5 deletions

View File

@@ -126,6 +126,7 @@ android_library {
}, },
libs: [ libs: [
"framework-virtualization.stubs.system",
"telephony-common", "telephony-common",
"ims-common", "ims-common",
], ],

View File

@@ -16,10 +16,13 @@
package com.android.settings.development.linuxterminal; package com.android.settings.development.linuxterminal;
import static android.system.virtualmachine.VirtualMachineManager.CAPABILITY_NON_PROTECTED_VM;
import android.content.Context; import android.content.Context;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.os.Process; import android.os.Process;
import android.os.storage.StorageManager; import android.os.storage.StorageManager;
import android.system.virtualmachine.VirtualMachineManager;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.DataUnit; import android.util.DataUnit;
@@ -58,9 +61,13 @@ public class LinuxTerminalPreferenceController extends DeveloperOptionsPreferenc
StorageManager storageManager = StorageManager storageManager =
Objects.requireNonNull(context.getSystemService(StorageManager.class)); Objects.requireNonNull(context.getSystemService(StorageManager.class));
VirtualMachineManager virtualMachineManager =
Objects.requireNonNull(context.getSystemService(VirtualMachineManager.class));
mIsDeviceCapable = mIsDeviceCapable =
getTotalMemory() >= MEMORY_MIN_BYTES 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(). // Avoid lazy initialization because this may be called before displayPreference().

View File

@@ -80,6 +80,7 @@ android_robolectric_test {
libs: [ libs: [
"android.test.mock.impl", "android.test.mock.impl",
"framework-virtualization.stubs.system",
"ims-common", "ims-common",
], ],

View File

@@ -16,6 +16,8 @@
package com.android.settings.development.linuxterminal; 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.MEMORY_MIN_BYTES;
import static com.android.settings.development.linuxterminal.LinuxTerminalPreferenceController.STORAGE_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; 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;
import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PackageManager.NameNotFoundException;
import android.os.storage.StorageManager; import android.os.storage.StorageManager;
import android.system.virtualmachine.VirtualMachineManager;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@@ -43,27 +46,33 @@ import org.robolectric.RobolectricTestRunner;
/** Tests {@link LinuxTerminalPreferenceController} */ /** Tests {@link LinuxTerminalPreferenceController} */
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
public class LinuxTerminalPreferenceControllerTest { public class LinuxTerminalPreferenceControllerTest {
private static final String TERMINAL_PACKAGE_NAME = "com.android.virtualization.terminal";
@Mock private Context mContext; @Mock private Context mContext;
@Mock private PackageManager mPackageManager; @Mock private PackageManager mPackageManager;
@Mock private StorageManager mStorageManager; @Mock private StorageManager mStorageManager;
@Mock private VirtualMachineManager mVirtualMachineManager;
@Mock private PackageInfo mPackageInfo; @Mock private PackageInfo mPackageInfo;
private String mTerminalPackageName = "com.android.virtualization.terminal";
private LinuxTerminalPreferenceController mController; private LinuxTerminalPreferenceController mController;
@Before @Before
public void setup() throws Exception { public void setup() throws Exception {
MockitoAnnotations.initMocks(this); 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(mPackageManager).when(mContext).getPackageManager();
doReturn(mPackageInfo) doReturn(mPackageInfo)
.when(mPackageManager) .when(mPackageManager)
.getPackageInfo(eq(mTerminalPackageName), anyInt()); .getPackageInfo(eq(TERMINAL_PACKAGE_NAME), anyInt());
doReturn(mStorageManager).when(mContext).getSystemService(StorageManager.class); doReturn(mStorageManager).when(mContext).getSystemService(StorageManager.class);
doReturn(STORAGE_MIN_BYTES).when(mStorageManager).getPrimaryStorageSize(); doReturn(STORAGE_MIN_BYTES).when(mStorageManager).getPrimaryStorageSize();
doReturn(mVirtualMachineManager)
.when(mContext)
.getSystemService(VirtualMachineManager.class);
doReturn(CAPABILITY_NON_PROTECTED_VM).when(mVirtualMachineManager).getCapabilities();
} }
@Test @Test
@@ -82,6 +91,15 @@ public class LinuxTerminalPreferenceControllerTest {
assertThat(mController.isAvailable()).isFalse(); assertThat(mController.isAvailable()).isFalse();
} }
@Test
public void isAvailable_whenVmNotSupported_returnFalse() {
doReturn(0).when(mVirtualMachineManager).getCapabilities();
mController = createController(mContext);
assertThat(mController.isAvailable()).isFalse();
}
@Test @Test
public void isAvailable_whenPackageExists_returnsTrue() { public void isAvailable_whenPackageExists_returnsTrue() {
mController = createController(mContext); mController = createController(mContext);
@@ -102,7 +120,7 @@ public class LinuxTerminalPreferenceControllerTest {
public void isAvailable_whenAppDoesNotExist_returnsFalse() throws Exception { public void isAvailable_whenAppDoesNotExist_returnsFalse() throws Exception {
doThrow(new NameNotFoundException()) doThrow(new NameNotFoundException())
.when(mPackageManager) .when(mPackageManager)
.getPackageInfo(eq(mTerminalPackageName), anyInt()); .getPackageInfo(eq(TERMINAL_PACKAGE_NAME), anyInt());
mController = createController(mContext); mController = createController(mContext);