blob: 4910df7e111e64086c52ca91500a15a30b0df51e [file] [log] [blame]
package org.robolectric.res.android;
import org.robolectric.res.android.CppAssetManager.FileType;
// transliterated from https://android.googlesource.com/platform/frameworks/base/+/android-8.1.0_r22/libs/androidfw/AssetDir.cpp and
// https://android.googlesource.com/platform/frameworks/base/+/android-8.1.0_r22/include/androidfw/AssetDir.h
public class AssetDir {
private SortedVector<FileInfo> mFileInfo;
AssetDir() {
mFileInfo = null;
}
AssetDir(AssetDir src) {
}
/*
* Vector-style access.
*/
public int getFileCount() {
return mFileInfo.size();
}
public String8 getFileName(int idx) {
return mFileInfo.itemAt(idx).getFileName();
}
// const String8& getSourceName(int idx) {
// return mFileInfo->itemAt(idx).getSourceName();
// }
/*
* Get the type of a file (usually regular or directory).
*/
// FileType getFileType(int idx) {
// return mFileInfo->itemAt(idx).getFileType();
// }
/**
* This holds information about files in the asset hierarchy.
*/
static class FileInfo implements Comparable<FileInfo> {
private String8 mFileName; // filename only
private FileType mFileType; // regular, directory, etc
private String8 mSourceName; // currently debug-only
FileInfo() {}
FileInfo(String8 path) { // useful for e.g. svect.indexOf
mFileName = path;
mFileType = FileType.kFileTypeUnknown;
}
FileInfo(FileInfo src) {
copyMembers(src);
}
// const FileInfo& operator= (const FileInfo& src) {
// if (this != &src)
// copyMembers(src);
// return *this;
// }
void copyMembers(final FileInfo src) {
mFileName = src.mFileName;
mFileType = src.mFileType;
mSourceName = src.mSourceName;
}
/* need this for SortedVector; must compare only on file name */
// bool operator< (const FileInfo& rhs) const {
// return mFileName < rhs.mFileName;
// }
//
// /* used by AssetManager */
// bool operator== (const FileInfo& rhs) const {
// return mFileName == rhs.mFileName;
// }
void set(final String8 path, FileType type) {
mFileName = path;
mFileType = type;
}
String8 getFileName() { return mFileName; }
void setFileName(String8 path) { mFileName = path; }
FileType getFileType() { return mFileType; }
void setFileType(FileType type) { mFileType = type; }
String8 getSourceName() { return mSourceName; }
void setSourceName(String8 path) { mSourceName = path; }
public boolean isLessThan(FileInfo fileInfo) {
return mFileName.string().compareTo(fileInfo.mFileName.string()) < 0;
}
@Override
public int compareTo(FileInfo other) {
return mFileName.string().compareTo(other.mFileName.string());
}
/*
* Handy utility for finding an entry in a sorted vector of FileInfo.
* Returns the index of the matching entry, or -1 if none found.
*/
static int findEntry(SortedVector<FileInfo> pVector,
String8 fileName) {
FileInfo tmpInfo = new FileInfo();
tmpInfo.setFileName(fileName);
return pVector.indexOf(tmpInfo);
}
};
/* AssetManager uses this to initialize us */
void setFileList(SortedVector<FileInfo> list) { mFileInfo = list; }
}