/*
* Copyright (C) 2016 Patrick Favre-Bulle
*
* 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 at.favre.tools.dconvert.converters;
import at.favre.tools.dconvert.arg.Arguments;
import at.favre.tools.dconvert.arg.ImageType;
import at.favre.tools.dconvert.converters.descriptors.AndroidDensityDescriptor;
import at.favre.tools.dconvert.util.MiscUtil;
import java.awt.*;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
/**
* Converts and creates Android-style resource set
*/
public class AndroidConverter extends APlatformConverter<AndroidDensityDescriptor> {
private static final String ANDROID_FOLDER_NAME = "android";
@Override
public List<AndroidDensityDescriptor> usedOutputDensities(Arguments arguments) {
return getAndroidDensityDescriptors(arguments);
}
public static List<AndroidDensityDescriptor> getAndroidDensityDescriptors(Arguments arguments) {
List<AndroidDensityDescriptor> list = new ArrayList<>();
String dirPrefix = arguments.createMipMapInsteadOfDrawableDir ? "mipmap" : "drawable";
if (arguments.includeAndroidLdpiTvdpi) {
list.add(new AndroidDensityDescriptor(0.75f, "ldpi", dirPrefix + "-ldpi"));
list.add(new AndroidDensityDescriptor(1.33f, "tvdpi", dirPrefix + "-tvdpi"));
}
list.add(new AndroidDensityDescriptor(1, "mdpi", dirPrefix + "-mdpi"));
list.add(new AndroidDensityDescriptor(1.5f, "hdpi", dirPrefix + "-hdpi"));
list.add(new AndroidDensityDescriptor(2, "xhdpi", dirPrefix + "-xhdpi"));
list.add(new AndroidDensityDescriptor(3, "xxhdpi", dirPrefix + "-xxhdpi"));
list.add(new AndroidDensityDescriptor(4, "xxxhdpi", dirPrefix + "-xxxhdpi"));
return list;
}
@Override
public String getConverterName() {
return "android-converter";
}
@Override
public File createMainSubFolder(File destinationFolder, String targetImageFileName, Arguments arguments) {
if (arguments.platform.size() > 1) {
return MiscUtil.createAndCheckFolder(new File(destinationFolder, ANDROID_FOLDER_NAME).getAbsolutePath(), arguments.dryRun);
} else {
return destinationFolder;
}
}
@Override
public File createFolderForOutputFile(File mainSubFolder, AndroidDensityDescriptor density, Dimension dimension, String targetFileName, Arguments arguments) {
return MiscUtil.createAndCheckFolder(new File(mainSubFolder, density.folderName).getAbsolutePath(), arguments.dryRun);
}
@Override
public String createDestinationFileNameWithoutExtension(AndroidDensityDescriptor density, Dimension dimension, String targetFileName, Arguments arguments) {
return targetFileName;
}
@Override
public void onPreExecute(File dstFolder, String targetFileName, List<AndroidDensityDescriptor> densityDescriptions, ImageType imageType, Arguments arguments) throws Exception {
//nothing
}
@Override
public void onPostExecute(Arguments arguments) {
//nothing
}
public static boolean isNinePatch(File file) {
return file.getName().endsWith(".9.png");
}
@Override
public void clean(Arguments arguments) {
if (arguments.platform.size() == 1) {
for (AndroidDensityDescriptor androidDensityDescriptor : getAndroidDensityDescriptors(arguments)) {
File dir = new File(arguments.dst, androidDensityDescriptor.folderName);
MiscUtil.deleteFolder(dir);
}
} else {
MiscUtil.deleteFolder(new File(arguments.dst, ANDROID_FOLDER_NAME));
}
}
}