Search in sources :

Example 1 with HardwareProperties

use of com.android.sdklib.internal.avd.HardwareProperties in project android by JetBrains.

the class AvdOptionsModel method handleFinished.

@Override
protected void handleFinished() {
    // By this point we should have both a Device and a SystemImage
    Device device = myDevice.getValue();
    SystemImageDescription systemImage = mySystemImage.getValue();
    Map<String, String> hardwareProperties = DeviceManager.getHardwareProperties(device);
    Map<String, Object> userEditedProperties = generateUserEditedPropertiesMap();
    // Remove the SD card setting that we're not using
    String sdCard = null;
    boolean useExisting = myUseExternalSdCard.get();
    if (!useExisting) {
        if (sdCardStorage().get().isPresent() && myOriginalSdCard != null && sdCardStorage().getValue().equals(myOriginalSdCard.get())) {
            // unchanged, use existing card
            useExisting = true;
        }
    }
    boolean hasSdCard = false;
    if (!useExisting) {
        userEditedProperties.remove(AvdWizardUtils.EXISTING_SD_LOCATION);
        Storage storage = null;
        myOriginalSdCard = new ObjectValueProperty<>(mySdCardStorage.getValue());
        if (mySdCardStorage.get().isPresent()) {
            storage = mySdCardStorage.getValue();
            sdCard = toIniString(storage, false);
        }
        hasSdCard = storage != null && storage.getSize() > 0;
    } else if (!Strings.isNullOrEmpty(existingSdLocation.get())) {
        sdCard = existingSdLocation.get();
        userEditedProperties.remove(AvdWizardUtils.SD_CARD_STORAGE_KEY);
        hasSdCard = true;
    }
    hardwareProperties.put(HardwareProperties.HW_SDCARD, toIniString(hasSdCard));
    // Remove any internal keys from the map
    userEditedProperties = Maps.filterEntries(userEditedProperties, input -> !input.getKey().startsWith(AvdWizardUtils.WIZARD_ONLY) && input.getValue() != null);
    // Call toIniString() on all remaining values
    hardwareProperties.putAll(Maps.transformEntries(userEditedProperties, (key, value) -> {
        if (value instanceof Storage) {
            if (key.equals(AvdWizardUtils.RAM_STORAGE_KEY) || key.equals(AvdWizardUtils.VM_HEAP_STORAGE_KEY)) {
                return toIniString((Storage) value, true);
            } else {
                return toIniString((Storage) value, false);
            }
        } else if (value instanceof Boolean) {
            return toIniString((Boolean) value);
        } else if (value instanceof File) {
            return toIniString((File) value);
        } else if (value instanceof Double) {
            return toIniString((Double) value);
        } else if (value instanceof GpuMode) {
            return ((GpuMode) value).getGpuSetting();
        } else {
            return value.toString();
        }
    }));
    File skinFile = (myAvdDeviceData.customSkinFile().get().isPresent()) ? myAvdDeviceData.customSkinFile().getValue() : AvdWizardUtils.resolveSkinPath(device.getDefaultHardware().getSkinFile(), systemImage, FileOpUtils.create());
    if (myBackupSkinFile.get().isPresent()) {
        hardwareProperties.put(AvdManager.AVD_INI_BACKUP_SKIN_PATH, myBackupSkinFile.getValue().getPath());
    }
    // Add defaults if they aren't already set differently
    if (!hardwareProperties.containsKey(AvdManager.AVD_INI_SKIN_DYNAMIC)) {
        hardwareProperties.put(AvdManager.AVD_INI_SKIN_DYNAMIC, toIniString(true));
    }
    if (!hardwareProperties.containsKey(HardwareProperties.HW_KEYBOARD)) {
        hardwareProperties.put(HardwareProperties.HW_KEYBOARD, toIniString(false));
    }
    boolean isCircular = myAvdDeviceData.isScreenRound().get();
    String tempAvdName = myAvdId.get();
    final String avdName = tempAvdName.isEmpty() ? calculateAvdName(myAvdInfo, hardwareProperties, device) : tempAvdName;
    // If we're editing an AVD and we downgrade a system image, wipe the user data with confirmation
    if (myAvdInfo != null) {
        ISystemImage image = myAvdInfo.getSystemImage();
        if (image != null) {
            int oldApiLevel = image.getAndroidVersion().getFeatureLevel();
            int newApiLevel = systemImage.getVersion().getFeatureLevel();
            final String oldApiName = image.getAndroidVersion().getApiString();
            final String newApiName = systemImage.getVersion().getApiString();
            if (oldApiLevel > newApiLevel || (oldApiLevel == newApiLevel && image.getAndroidVersion().isPreview() && !systemImage.getVersion().isPreview())) {
                final AtomicReference<Boolean> shouldContinue = new AtomicReference<>();
                ApplicationManager.getApplication().invokeAndWait(() -> {
                    String message = String.format(Locale.getDefault(), "You are about to downgrade %1$s from API level %2$s to API level %3$s.\n" + "This requires a wipe of the userdata partition of the AVD.\nDo you wish to " + "continue with the data wipe?", avdName, oldApiName, newApiName);
                    int result = Messages.showYesNoDialog((Project) null, message, "Confirm Data Wipe", AllIcons.General.QuestionDialog);
                    shouldContinue.set(result == Messages.YES);
                }, ModalityState.any());
                if (shouldContinue.get()) {
                    AvdManagerConnection.getDefaultAvdManagerConnection().wipeUserData(myAvdInfo);
                } else {
                    return;
                }
            }
        }
    }
    AvdManagerConnection connection = AvdManagerConnection.getDefaultAvdManagerConnection();
    myCreatedAvd = connection.createOrUpdateAvd(myAvdInfo, avdName, device, systemImage, mySelectedAvdOrientation.get(), isCircular, sdCard, skinFile, hardwareProperties, false);
    if (myCreatedAvd == null) {
        ApplicationManager.getApplication().invokeAndWait(() -> Messages.showErrorDialog((Project) null, "An error occurred while creating the AVD. See idea.log for details.", "Error Creating AVD"), ModalityState.any());
    }
}
Also used : com.android.tools.idea.ui.properties.core(com.android.tools.idea.ui.properties.core) AllIcons(com.intellij.icons.AllIcons) Strings.nullToEmpty(com.google.common.base.Strings.nullToEmpty) ModalityState(com.intellij.openapi.application.ModalityState) ScreenSize(com.android.resources.ScreenSize) AtomicReference(java.util.concurrent.atomic.AtomicReference) AvdInfo(com.android.sdklib.internal.avd.AvdInfo) Strings(com.google.common.base.Strings) ISystemImage(com.android.sdklib.ISystemImage) Locale(java.util.Locale) Density(com.android.resources.Density) Map(java.util.Map) Project(com.intellij.openapi.project.Project) Messages(com.intellij.openapi.ui.Messages) FileUtil(com.intellij.openapi.util.io.FileUtil) Device(com.android.sdklib.devices.Device) Objects(com.google.common.base.Objects) HashMap(com.intellij.util.containers.hash.HashMap) HardwareProperties(com.android.sdklib.internal.avd.HardwareProperties) AvdManager(com.android.sdklib.internal.avd.AvdManager) DeviceManager(com.android.sdklib.devices.DeviceManager) WizardModel(com.android.tools.idea.wizard.model.WizardModel) Maps(com.google.common.collect.Maps) File(java.io.File) Nullable(org.jetbrains.annotations.Nullable) List(java.util.List) FileOpUtils(com.android.repository.io.FileOpUtils) GpuMode(com.android.sdklib.internal.avd.GpuMode) ScreenOrientation(com.android.resources.ScreenOrientation) ApplicationManager(com.intellij.openapi.application.ApplicationManager) NotNull(org.jetbrains.annotations.NotNull) Storage(com.android.sdklib.devices.Storage) GpuMode(com.android.sdklib.internal.avd.GpuMode) Device(com.android.sdklib.devices.Device) AtomicReference(java.util.concurrent.atomic.AtomicReference) Project(com.intellij.openapi.project.Project) Storage(com.android.sdklib.devices.Storage) ISystemImage(com.android.sdklib.ISystemImage) File(java.io.File)

Aggregations

FileOpUtils (com.android.repository.io.FileOpUtils)1 Density (com.android.resources.Density)1 ScreenOrientation (com.android.resources.ScreenOrientation)1 ScreenSize (com.android.resources.ScreenSize)1 ISystemImage (com.android.sdklib.ISystemImage)1 Device (com.android.sdklib.devices.Device)1 DeviceManager (com.android.sdklib.devices.DeviceManager)1 Storage (com.android.sdklib.devices.Storage)1 AvdInfo (com.android.sdklib.internal.avd.AvdInfo)1 AvdManager (com.android.sdklib.internal.avd.AvdManager)1 GpuMode (com.android.sdklib.internal.avd.GpuMode)1 HardwareProperties (com.android.sdklib.internal.avd.HardwareProperties)1 com.android.tools.idea.ui.properties.core (com.android.tools.idea.ui.properties.core)1 WizardModel (com.android.tools.idea.wizard.model.WizardModel)1 Objects (com.google.common.base.Objects)1 Strings (com.google.common.base.Strings)1 Strings.nullToEmpty (com.google.common.base.Strings.nullToEmpty)1 Maps (com.google.common.collect.Maps)1 AllIcons (com.intellij.icons.AllIcons)1 ApplicationManager (com.intellij.openapi.application.ApplicationManager)1