Java tutorial
/* * Copyright (C) 2015 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.tools.idea.avdmanager; import com.android.tools.idea.wizard.ScopedStateStore; import com.google.common.base.Splitter; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; import com.intellij.ui.JBColor; import com.intellij.ui.components.JBLabel; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.awt.*; import java.util.Map; import static com.android.tools.idea.avdmanager.AvdWizardConstants.*; /** * A help panel that displays help text and error messaging for AVD options. */ public class AvdConfigurationOptionHelpPanel extends JPanel { private JBLabel myValidationLabel; private HaxmAlert myHaxmAlert; private JBLabel myTitle; private JSeparator mySeparator; private JBLabel myDescription; private JPanel myContentPanel; private JPanel myRoot; private JPanel myValidationPanel; public AvdConfigurationOptionHelpPanel() { mySeparator.setForeground(JBColor.foreground()); myRoot.setBackground(JBColor.WHITE); myTitle.setFont(TITLE_FONT); myValidationLabel.setForeground(JBColor.RED); add(myRoot); Dimension preferred = new Dimension(500, -1); myTitle.setPreferredSize(preferred); myDescription.setPreferredSize(preferred); myValidationLabel.setPreferredSize(preferred); myValidationPanel.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createTitledBorder("Error"), BorderFactory.createEmptyBorder(0, 5, 3, 5))); } public void setSystemImageDescription(SystemImageDescription desc) { myHaxmAlert.setSystemImageDescription(desc); } public void setDescriptionText(@Nullable String descriptionText) { if (descriptionText == null || descriptionText.isEmpty()) { ((CardLayout) myContentPanel.getLayout()).show(myContentPanel, "NothingSelected"); } else { ((CardLayout) myContentPanel.getLayout()).show(myContentPanel, "Info"); Iterable<String> iterable = Splitter.on('|').split(descriptionText); myTitle.setText("<html>" + Iterables.getFirst(iterable, null) + "</html>"); myDescription.setText("<html>" + Iterables.getLast(iterable, null) + "</html>"); } Window window = SwingUtilities.getWindowAncestor(this); if (window != null) { window.pack(); } } public void setErrorMessage(@NotNull String message) { if (message == null || message.isEmpty()) { myValidationPanel.setVisible(false); return; } myValidationPanel.setVisible(true); myValidationLabel.setText("<html>" + message + "</html>"); Window window = SwingUtilities.getWindowAncestor(this); if (window != null) { window.pack(); } } private static Map<ScopedStateStore.Key<?>, String> TITLES = ImmutableMap.<ScopedStateStore.Key<?>, String>builder() .put(RAM_STORAGE_KEY, "Device RAM").put(VM_HEAP_STORAGE_KEY, "Virtual Machine Heap") .put(INTERNAL_STORAGE_KEY, "Internal Flash").put(SD_CARD_STORAGE_KEY, "Built-in SD Card Size") .put(EXISTING_SD_LOCATION, "Location of external SD card image") .put(SCALE_SELECTION_KEY, "Start-Up Size").put(DEFAULT_ORIENTATION_KEY, "Default Orientation") .put(NETWORK_SPEED_KEY, "Network Speed").put(NETWORK_LATENCY_KEY, "Network Latency") .put(FRONT_CAMERA_KEY, "Front Camera").put(BACK_CAMERA_KEY, "Back Camera") .put(USE_HOST_GPU_KEY, "Use Host GPU").put(USE_SNAPSHOT_KEY, "Enable Snapshot") .put(CUSTOM_SKIN_FILE_KEY, "Custom Device Frame").put(DISPLAY_NAME_KEY, "AVD Name") .put(HAS_HARDWARE_KEYBOARD_KEY, "Enable keyboard input").put(AVD_ID_KEY, "AVD Id") .put(DEVICE_FRAME_KEY, "Enable device frame").build(); private static Map<ScopedStateStore.Key<?>, String> DESCRIPTIONS = ImmutableMap.<ScopedStateStore.Key<?>, String>builder() .put(RAM_STORAGE_KEY, "The amount of physical RAM on the device.\n" + "1 MB = 1024 KB\n" + "1 GB = 1024 MB") .put(VM_HEAP_STORAGE_KEY, "The amount of RAM available to Java virtual machine (VM) to allocate to running apps on the device. " + "A larger VM heap allows application to run longer between garbage collection event.") .put(INTERNAL_STORAGE_KEY, "The amount of non-removable space available to store data on the device.") .put(SD_CARD_STORAGE_KEY, "The amount of removable space available to store data on the device. " + "We recommend at least 100MB in order to use the camera in the emulator.") .put(EXISTING_SD_LOCATION, "Choose a file path to an existing SD Card image. Using an external SD Card is useful when sharing " + "SD Card data (pictures, media, files, etc.) between Android Virtual Devices. " + "See http://d.android.com/tools/help/mksdcard.html for more details. ") .put(SCALE_SELECTION_KEY, "Enables you to test your application on a screen that uses a resolution or density not supported by the " + "built-in AVD device frames, you can create an AVD that uses a custom resolution by selecting one of the " + "scale values.") .put(DEFAULT_ORIENTATION_KEY, "Sets the initial orientation of the device. During AVD emulation you can also rotate the device screen. ") .put(NETWORK_SPEED_KEY, "Sets the initial state of the simulated network transfer rate used by AVD. " + "The network speed can also be adjusted in the emulator.") .put(NETWORK_LATENCY_KEY, "Sets the initial state of the simulated network transfer latency used by AVD. " + " Latency is the delay in processing data across the network." + " The latency speed can also be adjusted in the emulator.") .put(FRONT_CAMERA_KEY, "None - no camera installed for AVD<br>" + "Emulated - use a simulated camera<br>" + "Device - use host computer webcam or built-in camera") .put(BACK_CAMERA_KEY, "None - no camera installed for AVD<br>" + "Emulated - use a simulated camera<br>" + "Device - use host computer webcam or built-in camera") .put(USE_HOST_GPU_KEY, "This enables the emulator graphics to run faster by using your computer's graphics card for " + "OpenGL ES graphics rendering. (Recommended for better emulator experience)") .put(USE_SNAPSHOT_KEY, "Helps improve emulator re-start performance. Start the AVD from the AVD manager and check" + " Launch from snapshot and Save to snapshot. This way, when you close the emulator, a snapshot" + " of the AVD state is saved and used to quickly re-launch the AVD next time. " + " Note this will make the emulator slow to close.") .put(CUSTOM_SKIN_FILE_KEY, "A collection of images and configuration data that indicates how to populate the window. Each skin can have " + "several \"layouts\" (e.g. \"landscape\" and \"portrait\") corresponding to different orientation " + "/ physical configurations of the emulated device.") .put(DISPLAY_NAME_KEY, "The name of this AVD.") .put(HAS_HARDWARE_KEYBOARD_KEY, "Enables you to enter text input and interact with the AVD with your hardware computer keyboard " + "instead of a of the on on-screen software keyboard.") .put(AVD_ID_KEY, "Identification name used to save an AVD on disk. This AVD name can also be used with Android command line tools.") .put(DEVICE_FRAME_KEY, "Enable a frame around the Android emulator window that mimics the look of a real " + "Android device. Click on Show Advanced Settings for more options.") .build(); /** * Get the help text for the given key in the form "Title|Body" */ public String getDescription(ScopedStateStore.Key<?> key) { return TITLES.get(key) + "|" + DESCRIPTIONS.get(key); } }