All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.robolectric.res.android.AssetDir Maven / Gradle / Ivy

package org.robolectric.res.android;

import org.robolectric.res.android.CppAssetManager.FileType;

// transliterated from
// https://android.googlesource.com/platform/frameworks/base/+/android-9.0.0_r12/libs/androidfw/AssetDir.cpp and
// https://android.googlesource.com/platform/frameworks/base/+/android-9.0.0_r12/include/androidfw/AssetDir.h
public class AssetDir {

  private SortedVector mFileInfo;

  AssetDir() {
    mFileInfo = null;
  }

  AssetDir(AssetDir src) {}

  /*
   * Vector-style access.
   */
  public int getFileCount() {
    if (mFileInfo == null) {
      return 0;
    }
    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 {
    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 pVector, String8 fileName) {
      FileInfo tmpInfo = new FileInfo();

      tmpInfo.setFileName(fileName);
      return pVector.indexOf(tmpInfo);
    }
  }
  ;

  /* AssetManager uses this to initialize us */
  void setFileList(SortedVector list) {
    mFileInfo = list;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy