package com.sparseboolean.ifexplorer; import gem.kevin.util.DataUtil; import gem.kevin.util.FileUtil; import gem.kevin.util.StorageUtil; import java.io.File; import java.util.Comparator; import com.sparseboolean.ifexplorer.R; import android.content.Context; import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.view.View; public class FileItem { @SuppressWarnings("unused") private static final String TAG = "IfExplorer-FileItem"; public static final String FILE_TYPE_FILE_FOLDER = "$file_folder"; private static int INT_UNINITIALIED = -1; private Context mContext; private String mPath = null; private String mName = null; private int mIconResId = INT_UNINITIALIED; private Drawable mIconDrawable = null; private boolean mIsSystemFile = false; private boolean mIsDirectory = false; private boolean mReadOnly = false; private boolean mReadWriteDeny = false; private String mPermissionStr = null; private String mFileType; private long mSize = INT_UNINITIALIED; private View mConvertView; private int mPositionInAdapterList = INT_UNINITIALIED; private boolean mVisible = true; public void setVisible(boolean visible) { mVisible = visible; } public boolean isVisible() { return mVisible; } public FileItem(Context context, String path) { this(context, path, null, -1, null); } public FileItem(Context context, String path, String name, int iconResId, Drawable iconDrawable) { mContext = context; mPath = path; mName = name; mIconResId = iconResId; mIconDrawable = iconDrawable; build(); } private void build() { File file = new File(mPath); Resources resources = mContext.getResources(); // name if (mName == null) { mName = FileUtil.getFileName(mPath); } // type mIsDirectory = file.isDirectory(); if (mIsDirectory) { mFileType = FILE_TYPE_FILE_FOLDER; } else { mFileType = DataUtil.getFileExtensionWithoutDot(mPath); } // permission mIsSystemFile = StorageUtil.isAndroidSysFile(mPath); mReadOnly = (file.canRead() && !file.canWrite()); mReadWriteDeny = (!file.canRead() && !file.canWrite()); if (mIsSystemFile) { mPermissionStr = String.format("(%s)", resources.getString(R.string.system)); } else { if (mReadOnly) { mPermissionStr = String.format("(%s)", resources.getString(R.string.readOnly)); } else if (mReadWriteDeny) { mPermissionStr = String.format("(%s)", resources.getString(R.string.no_permission)); } else { mPermissionStr = null; } } // icon and size String extension = DataUtil.getFileExtensionWithoutDot(mName); if (mIsDirectory) { if (mIconDrawable == null && mIconResId == INT_UNINITIALIED) { mIconResId = isSystemFile() ? R.drawable.folder_sys : R.drawable.folder; } String[] list = file.list(); if (list != null) { mSize = list.length; } } else { if (mIconDrawable == null && mIconResId == INT_UNINITIALIED) { if (extension.equalsIgnoreCase("apk")) { mIconDrawable = DataUtil.getNonInstalledAppIcon(mContext, mPath); } else { mIconResId = DataUtil.getFileIconResId(extension); } } mSize = file.length(); } } @Override public boolean equals(Object o) { FileItem other = (FileItem) o; return mPath.equals(other.getPath()); } public View getConvertView() { return mConvertView; } public Drawable getIconDrawable() { return mIconDrawable; } public int getIconResource() { return mIconResId; } public String getName() { return mName; } public String getPath() { return mPath; } public String getPermissionStr() { return mPermissionStr; } public String getFileType() { return mFileType; } public long getSize() { return mSize; } @Override public int hashCode() { return mPath.hashCode(); } public boolean isDirectory() { return mIsDirectory; } public boolean isReadOnly() { return mReadOnly; } public boolean isReadWriteDeny() { return mReadWriteDeny; } public boolean isSystemFile() { return mIsSystemFile; } public void setConvertView(View convertView) { mConvertView = convertView; } public void setIconDrawable(Drawable drawable) { mIconDrawable = drawable; } public void setPositionInAdapterList(int position) { mPositionInAdapterList = position; } public int getPositionInAdapterList() { return mPositionInAdapterList; } public void setIconResource(int resId) { mIconResId = resId; } public void setName(String name) { mName = name; } public void setPath(String path) { mPath = path; } }