Search in sources :

Example 6 with Density

use of com.android.resources.Density in project android_frameworks_base by AOSPA.

the class ResourceHelper method getDrawable.

/**
     * Returns a drawable from the given value.
     * @param value The value that contains a path to a 9 patch, a bitmap or a xml based drawable,
     * or an hexadecimal color
     * @param context the current context
     * @param theme the theme to be used to inflate the drawable.
     */
public static Drawable getDrawable(ResourceValue value, BridgeContext context, Theme theme) {
    if (value == null) {
        return null;
    }
    String stringValue = value.getValue();
    if (RenderResources.REFERENCE_NULL.equals(stringValue)) {
        return null;
    }
    String lowerCaseValue = stringValue.toLowerCase();
    Density density = Density.MEDIUM;
    if (value instanceof DensityBasedResourceValue) {
        density = ((DensityBasedResourceValue) value).getResourceDensity();
    }
    if (lowerCaseValue.endsWith(NinePatch.EXTENSION_9PATCH)) {
        File file = new File(stringValue);
        if (file.isFile()) {
            try {
                return getNinePatchDrawable(new FileInputStream(file), density, value.isFramework(), stringValue, context);
            } catch (IOException e) {
                // failed to read the file, we'll return null below.
                Bridge.getLog().error(LayoutLog.TAG_RESOURCES_READ, "Failed lot load " + file.getAbsolutePath(), e, null);
            }
        }
        return null;
    } else if (lowerCaseValue.endsWith(".xml")) {
        // create a block parser for the file
        File f = new File(stringValue);
        if (f.isFile()) {
            try {
                // let the framework inflate the Drawable from the XML file.
                XmlPullParser parser = ParserFactory.create(f);
                BridgeXmlBlockParser blockParser = new BridgeXmlBlockParser(parser, context, value.isFramework());
                try {
                    return Drawable.createFromXml(context.getResources(), blockParser, theme);
                } finally {
                    blockParser.ensurePopped();
                }
            } catch (Exception e) {
                // this is an error and not warning since the file existence is checked before
                // attempting to parse it.
                Bridge.getLog().error(null, "Failed to parse file " + stringValue, e, null);
            }
        } else {
            Bridge.getLog().error(LayoutLog.TAG_BROKEN, String.format("File %s does not exist (or is not a file)", stringValue), null);
        }
        return null;
    } else {
        File bmpFile = new File(stringValue);
        if (bmpFile.isFile()) {
            try {
                Bitmap bitmap = Bridge.getCachedBitmap(stringValue, value.isFramework() ? null : context.getProjectKey());
                if (bitmap == null) {
                    bitmap = Bitmap_Delegate.createBitmap(bmpFile, false, /*isMutable*/
                    density);
                    Bridge.setCachedBitmap(stringValue, bitmap, value.isFramework() ? null : context.getProjectKey());
                }
                return new BitmapDrawable(context.getResources(), bitmap);
            } catch (IOException e) {
                // we'll return null below
                Bridge.getLog().error(LayoutLog.TAG_RESOURCES_READ, "Failed lot load " + bmpFile.getAbsolutePath(), e, null);
            }
        } else {
            // attempt to get a color from the value
            try {
                int color = getColor(stringValue);
                return new ColorDrawable(color);
            } catch (NumberFormatException e) {
                // we'll return null below.
                Bridge.getLog().error(LayoutLog.TAG_RESOURCES_FORMAT, "Failed to convert " + stringValue + " into a drawable", e, null);
            }
        }
    }
    return null;
}
Also used : DensityBasedResourceValue(com.android.ide.common.rendering.api.DensityBasedResourceValue) XmlPullParser(org.xmlpull.v1.XmlPullParser) IOException(java.io.IOException) BitmapDrawable(android.graphics.drawable.BitmapDrawable) Density(com.android.resources.Density) FileInputStream(java.io.FileInputStream) MalformedURLException(java.net.MalformedURLException) IOException(java.io.IOException) FileNotFoundException(java.io.FileNotFoundException) XmlPullParserException(org.xmlpull.v1.XmlPullParserException) Bitmap(android.graphics.Bitmap) ColorDrawable(android.graphics.drawable.ColorDrawable) File(java.io.File) BridgeXmlBlockParser(com.android.layoutlib.bridge.android.BridgeXmlBlockParser)

Example 7 with Density

use of com.android.resources.Density in project android_frameworks_base by ResurrectionRemix.

the class RenderAction method getConfiguration.

// VisibleForTesting
public static Configuration getConfiguration(RenderParams params) {
    Configuration config = new Configuration();
    HardwareConfig hardwareConfig = params.getHardwareConfig();
    ScreenSize screenSize = hardwareConfig.getScreenSize();
    if (screenSize != null) {
        switch(screenSize) {
            case SMALL:
                config.screenLayout |= Configuration.SCREENLAYOUT_SIZE_SMALL;
                break;
            case NORMAL:
                config.screenLayout |= Configuration.SCREENLAYOUT_SIZE_NORMAL;
                break;
            case LARGE:
                config.screenLayout |= Configuration.SCREENLAYOUT_SIZE_LARGE;
                break;
            case XLARGE:
                config.screenLayout |= Configuration.SCREENLAYOUT_SIZE_XLARGE;
                break;
        }
    }
    Density density = hardwareConfig.getDensity();
    if (density == null) {
        density = Density.MEDIUM;
    }
    config.screenWidthDp = hardwareConfig.getScreenWidth() / density.getDpiValue();
    config.screenHeightDp = hardwareConfig.getScreenHeight() / density.getDpiValue();
    if (config.screenHeightDp < config.screenWidthDp) {
        //noinspection SuspiciousNameCombination
        config.smallestScreenWidthDp = config.screenHeightDp;
    } else {
        config.smallestScreenWidthDp = config.screenWidthDp;
    }
    config.densityDpi = density.getDpiValue();
    // never run in compat mode:
    config.compatScreenWidthDp = config.screenWidthDp;
    config.compatScreenHeightDp = config.screenHeightDp;
    ScreenOrientation orientation = hardwareConfig.getOrientation();
    if (orientation != null) {
        switch(orientation) {
            case PORTRAIT:
                config.orientation = Configuration.ORIENTATION_PORTRAIT;
                break;
            case LANDSCAPE:
                config.orientation = Configuration.ORIENTATION_LANDSCAPE;
                break;
            case SQUARE:
                //noinspection deprecation
                config.orientation = Configuration.ORIENTATION_SQUARE;
                break;
        }
    } else {
        config.orientation = Configuration.ORIENTATION_UNDEFINED;
    }
    ScreenRound roundness = hardwareConfig.getScreenRoundness();
    if (roundness != null) {
        switch(roundness) {
            case ROUND:
                config.screenLayout |= Configuration.SCREENLAYOUT_ROUND_YES;
                break;
            case NOTROUND:
                config.screenLayout |= Configuration.SCREENLAYOUT_ROUND_NO;
        }
    } else {
        config.screenLayout |= Configuration.SCREENLAYOUT_ROUND_UNDEFINED;
    }
    String locale = params.getLocale();
    if (locale != null && !locale.isEmpty())
        config.locale = new Locale(locale);
    return config;
}
Also used : ScreenOrientation(com.android.resources.ScreenOrientation) Locale(java.util.Locale) HardwareConfig(com.android.ide.common.rendering.api.HardwareConfig) Configuration(android.content.res.Configuration) ScreenSize(com.android.resources.ScreenSize) Density(com.android.resources.Density) ScreenRound(com.android.resources.ScreenRound)

Example 8 with Density

use of com.android.resources.Density in project android by JetBrains.

the class PsiResourceItem method getResourceValue.

@Nullable
@Override
public ResourceValue getResourceValue(boolean isFrameworks) {
    if (mResourceValue == null) {
        //noinspection VariableNotUsedInsideIf
        if (myTag == null) {
            // Density based resource value?
            ResourceType type = getType();
            Density density = type == ResourceType.DRAWABLE || type == ResourceType.MIPMAP ? getFolderDensity() : null;
            if (density != null) {
                mResourceValue = new DensityBasedResourceValue(type, getName(), getSource().getFile().getAbsolutePath(), density, isFrameworks, null);
            } else {
                mResourceValue = new ResourceValue(type, getName(), getSource().getFile().getAbsolutePath(), isFrameworks, null);
            }
        } else {
            mResourceValue = parseXmlToResourceValue(isFrameworks);
        }
    }
    return mResourceValue;
}
Also used : ResourceType(com.android.resources.ResourceType) Density(com.android.resources.Density) Nullable(org.jetbrains.annotations.Nullable)

Example 9 with Density

use of com.android.resources.Density in project android by JetBrains.

the class AvdOptionsModel method calculateInitialVmHeap.

/**
   * Set the initial VM heap size. This is based on the Android CDD minimums for each screen size and density.
   */
@NotNull
private static Storage calculateInitialVmHeap(@NotNull AvdDeviceData deviceData) {
    ScreenSize size = AvdScreenData.getScreenSize(deviceData.diagonalScreenSize().get());
    Density density = AvdScreenData.getScreenDensity(deviceData.isTv().get(), deviceData.screenDpi().get(), deviceData.screenResolutionHeight().get());
    int vmHeapSize = 32;
    if (deviceData.isWear().get()) {
        switch(density) {
            case LOW:
            case ANYDPI:
            case NODPI:
            case MEDIUM:
            case TV:
                vmHeapSize = 32;
                break;
            case HIGH:
            case DPI_280:
                vmHeapSize = 36;
                break;
            case XHIGH:
            case DPI_360:
                vmHeapSize = 48;
                break;
            case DPI_400:
                vmHeapSize = 56;
                break;
            case DPI_420:
                vmHeapSize = 64;
                break;
            case XXHIGH:
                vmHeapSize = 88;
                break;
            case DPI_560:
                vmHeapSize = 112;
                break;
            case XXXHIGH:
                vmHeapSize = 154;
                break;
        }
    } else {
        switch(size) {
            case SMALL:
            case NORMAL:
                switch(density) {
                    case LOW:
                    case ANYDPI:
                    case NODPI:
                    case MEDIUM:
                        vmHeapSize = 32;
                        break;
                    case TV:
                    case HIGH:
                    case DPI_280:
                        vmHeapSize = 48;
                        break;
                    case XHIGH:
                    case DPI_360:
                        vmHeapSize = 80;
                        break;
                    case DPI_400:
                        vmHeapSize = 96;
                        break;
                    case DPI_420:
                        vmHeapSize = 112;
                        break;
                    case XXHIGH:
                        vmHeapSize = 128;
                        break;
                    case DPI_560:
                        vmHeapSize = 192;
                        break;
                    case XXXHIGH:
                        vmHeapSize = 256;
                        break;
                }
                break;
            case LARGE:
                switch(density) {
                    case LOW:
                        vmHeapSize = 32;
                        break;
                    case ANYDPI:
                    case NODPI:
                    case MEDIUM:
                        vmHeapSize = 48;
                        break;
                    case TV:
                    case HIGH:
                        vmHeapSize = 80;
                        break;
                    case DPI_280:
                        vmHeapSize = 96;
                        break;
                    case XHIGH:
                        vmHeapSize = 128;
                        break;
                    case DPI_360:
                        vmHeapSize = 160;
                        break;
                    case DPI_400:
                        vmHeapSize = 192;
                        break;
                    case DPI_420:
                        vmHeapSize = 228;
                        break;
                    case XXHIGH:
                        vmHeapSize = 256;
                        break;
                    case DPI_560:
                        vmHeapSize = 384;
                        break;
                    case XXXHIGH:
                        vmHeapSize = 512;
                        break;
                }
                break;
            case XLARGE:
                switch(density) {
                    case LOW:
                        vmHeapSize = 48;
                        break;
                    case ANYDPI:
                    case NODPI:
                    case MEDIUM:
                        vmHeapSize = 80;
                        break;
                    case TV:
                    case HIGH:
                        vmHeapSize = 96;
                        break;
                    case DPI_280:
                        vmHeapSize = 144;
                        break;
                    case XHIGH:
                        vmHeapSize = 192;
                        break;
                    case DPI_360:
                        vmHeapSize = 240;
                        break;
                    case DPI_400:
                        vmHeapSize = 288;
                        break;
                    case DPI_420:
                        vmHeapSize = 336;
                        break;
                    case XXHIGH:
                        vmHeapSize = 384;
                        break;
                    case DPI_560:
                        vmHeapSize = 576;
                        break;
                    case XXXHIGH:
                        vmHeapSize = 768;
                        break;
                }
                break;
        }
    }
    return new Storage(vmHeapSize, Storage.Unit.MiB);
}
Also used : Storage(com.android.sdklib.devices.Storage) ScreenSize(com.android.resources.ScreenSize) Density(com.android.resources.Density) NotNull(org.jetbrains.annotations.NotNull)

Example 10 with Density

use of com.android.resources.Density in project android by JetBrains.

the class MakeBeforeRunTaskProvider method getDeviceSpecificArguments.

@NotNull
public static List<String> getDeviceSpecificArguments(@NotNull List<AndroidDevice> devices) {
    if (devices.isEmpty()) {
        return Collections.emptyList();
    }
    List<String> properties = new ArrayList<>(2);
    // Find the minimum value of the build API level and pass it to Gradle as a property
    AndroidVersion minVersion = devices.get(0).getVersion();
    for (int i = 1; i < devices.size(); i++) {
        AndroidDevice androidDevice = devices.get(i);
        if (androidDevice.getVersion().compareTo(minVersion) < 0) {
            minVersion = androidDevice.getVersion();
        }
    }
    properties.add(AndroidGradleSettings.createProjectProperty(PROPERTY_BUILD_API, Integer.toString(minVersion.getFeatureLevel())));
    // If we are building for only one device, pass the density and the ABI
    if (devices.size() == 1) {
        AndroidDevice device = devices.get(0);
        Density density = Density.getEnum(device.getDensity());
        if (density != null) {
            properties.add(AndroidGradleSettings.createProjectProperty(PROPERTY_BUILD_DENSITY, density.getResourceValue()));
        }
        // Note: the abis are returned in their preferred order which should be maintained while passing it on to Gradle.
        List<String> abis = device.getAbis().stream().map(Abi::toString).collect(Collectors.toList());
        if (!abis.isEmpty()) {
            properties.add(AndroidGradleSettings.createProjectProperty(PROPERTY_BUILD_ABI, Joiner.on(',').join(abis)));
        }
    }
    return properties;
}
Also used : ArrayList(java.util.ArrayList) AndroidVersion(com.android.sdklib.AndroidVersion) Density(com.android.resources.Density) NotNull(org.jetbrains.annotations.NotNull)

Aggregations

Density (com.android.resources.Density)34 IOException (java.io.IOException)12 File (java.io.File)10 ScreenSize (com.android.resources.ScreenSize)8 Bitmap (android.graphics.Bitmap)7 BitmapDrawable (android.graphics.drawable.BitmapDrawable)7 Configuration (android.content.res.Configuration)6 ColorDrawable (android.graphics.drawable.ColorDrawable)6 DensityBasedResourceValue (com.android.ide.common.rendering.api.DensityBasedResourceValue)6 HardwareConfig (com.android.ide.common.rendering.api.HardwareConfig)6 BridgeXmlBlockParser (com.android.layoutlib.bridge.android.BridgeXmlBlockParser)6 ScreenOrientation (com.android.resources.ScreenOrientation)6 FileInputStream (java.io.FileInputStream)6 MalformedURLException (java.net.MalformedURLException)6 XmlPullParser (org.xmlpull.v1.XmlPullParser)6 XmlPullParserException (org.xmlpull.v1.XmlPullParserException)6 NinePatchChunk (com.android.ninepatch.NinePatchChunk)5 ScreenRound (com.android.resources.ScreenRound)5 LayoutlibDelegate (com.android.tools.layoutlib.annotations.LayoutlibDelegate)5 FileNotFoundException (java.io.FileNotFoundException)5