SCREEN_DENSITY_TO_PROTO_VALUE_MAP .inverse() .get(value.getDensityAlias()) .replace('-', '_')));
public static Optional<Integer> getScreenDensityDpi( ScreenDensityTargeting screenDensityTargeting) { if (screenDensityTargeting.getValueList().isEmpty()) { return Optional.empty(); } ScreenDensity densityTargeting = screenDensityTargeting.getValueList().stream() // For now we only support one value in ScreenDensityTargeting. .collect(MoreCollectors.onlyElement()); return Optional.of( densityTargeting.getDensityOneofCase().equals(DENSITY_ALIAS) ? DENSITY_ALIAS_TO_DPI_MAP.get(densityTargeting.getDensityAlias()) : densityTargeting.getDensityDpi()); } }
.getValueList() .get(0) .getDensityAlias(); switch (density) { case LDPI:
shard.getApkTargeting().getScreenDensityTargeting().getValue(0).getDensityAlias(); switch (density) { case LDPI:
.getScreenDensityTargeting() .getValue(0) .getDensityAlias()) { case LDPI: assertThat(splitResourceTable)
.getScreenDensityTargeting() .getValue(0) .getDensityAlias()) { case LDPI: case MDPI:
findModuleSplitWithScreenDensityTargeting( densitySplits, ScreenDensity.newBuilder().setDensityAlias(DensityAlias.XXXHDPI).build()); assertThat(xxxhdpiSplit.getResourceTable()).isPresent(); ResourceTable xxxHdpiResourceTable = xxxhdpiSplit.getResourceTable().get(); densitySplits, ScreenDensity.newBuilder().setDensityAlias(DensityAlias.XXHDPI).build()); Truth8.assertThat(xxhdpiSplit.getResourceTable()).isPresent(); ResourceTable xxHdpiResourceTable = xxhdpiSplit.getResourceTable().get();
VariantTargeting mdpiTargeting = variantDensityTargeting(DensityAlias.MDPI); VariantTargeting defaultDensityTargeting = variantDensityTargeting(ScreenDensity.getDefaultInstance()); toScreenDensity(DensityAlias.LDPI), ImmutableSet.of( ScreenDensity.getDefaultInstance(), toScreenDensity(DensityAlias.MDPI)))); ModuleSplit mdpiVariantNew = outputVariants.get(1); assertThat(mdpiVariantNew.getVariantTargeting()) toScreenDensity(DensityAlias.MDPI), ImmutableSet.of( ScreenDensity.getDefaultInstance(), toScreenDensity(DensityAlias.LDPI)))); ModuleSplit defaultVariantNew = outputVariants.get(2); assertThat(defaultVariantNew.getVariantTargeting()) .isEqualTo( variantDensityTargeting( ScreenDensity.getDefaultInstance(), ImmutableSet.of( toScreenDensity(DensityAlias.LDPI), toScreenDensity(DensityAlias.MDPI))));
findModuleSplitWithScreenDensityTargeting( densitySplits, ScreenDensity.newBuilder().setDensityAlias(DensityAlias.XXXHDPI).build()); assertThat(xxxhdpiSplit.getResourceTable()).isPresent(); ResourceTable resourceTable = xxxhdpiSplit.getResourceTable().get();
@Test public void notPossibleToTargetMultipleDimensions() { String fakeAssetPath = "testModule/assets/secret.txt"; ModuleSplit.Builder builder = ModuleSplit.builder() .setModuleName(BundleModuleName.create("testModule")) .setEntries(ImmutableList.of(InMemoryModuleEntry.ofFile(fakeAssetPath, DUMMY_CONTENT))) .setVariantTargeting(lPlusVariantTargeting()) .setApkTargeting( ApkTargeting.newBuilder() .setAbiTargeting( AbiTargeting.newBuilder().addValue(Abi.newBuilder().setAlias(AbiAlias.X86))) .setScreenDensityTargeting( ScreenDensityTargeting.newBuilder() .addValue( ScreenDensity.newBuilder().setDensityAlias(DensityAlias.HDPI))) .build()); assertThrows(IllegalStateException.class, () -> builder.build()); }
private static ScreenDensity toScreenDensity(DensityAlias alias) { return ScreenDensity.newBuilder().setDensityAlias(alias).build(); }
public static ScreenDensity toScreenDensity(int densityDpi) { return ScreenDensity.newBuilder().setDensityDpi(densityDpi).build(); }
public static ScreenDensity toScreenDensity(DensityAlias densityAlias) { return ScreenDensity.newBuilder().setDensityAlias(densityAlias).build(); }
private static ModuleSplit findModuleSplitWithScreenDensityTargeting( ImmutableCollection<ModuleSplit> moduleSplits, DensityAlias densityAlias) { return findModuleSplitWithScreenDensityTargeting( moduleSplits, ScreenDensity.newBuilder().setDensityAlias(densityAlias).build()); }
public static Integer convertToDpi(ScreenDensity screenDensity) { switch (screenDensity.getDensityOneofCase()) { case DENSITY_ALIAS: return DENSITY_ALIAS_TO_DPI_MAP.get(screenDensity.getDensityAlias()); case DENSITY_DPI: return screenDensity.getDensityDpi(); case DENSITYONEOF_NOT_SET: throw new IllegalArgumentException("ScreenDensity proto is not set properly."); default: throw new IllegalArgumentException("ScreenDensity value is not recognized."); } }
private static ModuleSplit findModuleSplitWithScreenDensityTargeting( ImmutableCollection<ModuleSplit> moduleSplits, ScreenDensity density) { return moduleSplits.stream() .filter( split -> split.getApkTargeting().getScreenDensityTargeting().getValueCount() > 0 && density.equals( split.getApkTargeting().getScreenDensityTargeting().getValue(0))) .collect(onlyElement()); }
public static Optional<String> getScreenDensityName( ScreenDensityTargeting screenDensityTargeting) { if (screenDensityTargeting.getValueList().isEmpty()) { return Optional.empty(); } ScreenDensity screenDensity = Iterables.getOnlyElement(screenDensityTargeting.getValueList()); return Optional.of( screenDensity.getDensityOneofCase().equals(DENSITY_ALIAS) ? screenDensity.getDensityAlias().name() : Integer.toString(screenDensity.getDensityDpi())); }