/*
* Copyright (C) 2013 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.ide.common.packaging;
import com.google.common.collect.ImmutableList;
/**
* Utility class for packaging.
*/
public class PackagingUtils {
/**
* Checks whether a folder and its content is valid for packaging into the .apk as
* standard Java resource.
* @param folderName the name of the folder.
*
* @return true if the folder is valid for packaging.
*/
public static boolean checkFolderForPackaging(String folderName) {
return !folderName.equalsIgnoreCase("CVS") &&
!folderName.equalsIgnoreCase(".svn") &&
!folderName.equalsIgnoreCase("SCCS") &&
!folderName.startsWith("_");
}
/**
* Checks a file to make sure it should be packaged as standard resources.
* @param fileName the name of the file (including extension)
* @return true if the file should be packaged as standard java resources.
*/
public static boolean checkFileForPackaging(String fileName) {
String[] fileSegments = fileName.split("\\.");
String fileExt = "";
if (fileSegments.length > 1) {
fileExt = fileSegments[fileSegments.length-1];
}
return checkFileForPackaging(fileName, fileExt);
}
/**
* Checks a file to make sure it should be packaged as standard resources.
* @param fileName the name of the file (including extension)
* @param extension the extension of the file (excluding '.')
* @return true if the file should be packaged as standard java resources.
*/
public static boolean checkFileForPackaging(String fileName, String extension) {
// ignore hidden files and backup files
return !(fileName.charAt(0) == '.' || fileName.charAt(fileName.length() - 1) == '~') &&
!isOfNonResourcesExtensions(extension) &&
!isNotAResourceFile(fileName);
}
private static boolean isOfNonResourcesExtensions(String extension) {
for (String ext : NON_RESOURCES_EXTENSIONS) {
if (ext.equalsIgnoreCase(extension)) {
return true;
}
}
return false;
}
private static boolean isNotAResourceFile(String fileName) {
for (String name : NON_RESOURCES_FILENAMES) {
if (name.equalsIgnoreCase(fileName)) {
return true;
}
}
return false;
}
/**
* Returns the list of file extensions that represents non resources files.
*/
public static final ImmutableList<String> NON_RESOURCES_EXTENSIONS =
ImmutableList.<String>builder()
.add("aidl") // Aidl files
.add("rs") // RenderScript files
.add("fs") // FilterScript files
.add("rsh") // RenderScript header files
.add("d") // Dependency files
.add("java") // Java files
.add("scala") // Scala files
.add("class") // Java class files
.add("so") // native .so libraries
.add("scc") // VisualSourceSafe
.add("swp") // vi swap file
.build();
/**
* Return file names that are not resource files.
*/
public static final ImmutableList<String> NON_RESOURCES_FILENAMES =
ImmutableList.<String>builder()
.add("thumbs.db") // image index file
.add("picasa.ini") // image index file
.add("about.html") // Javadoc
.add("package.html") // Javadoc
.add("overview.html") // Javadoc
.build();
}