display some details at the files and directories

This commit is contained in:
tibbi 2016-07-14 20:42:42 +02:00
parent ef4d505b6f
commit 5633bfcbc2
8 changed files with 71 additions and 12 deletions

View File

@ -34,12 +34,13 @@ public class Utils {
return ContextCompat.checkSelfPermission(cxt, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED;
}
public static Bitmap getColoredIcon(Resources res, int newColor, int id) {
public static Bitmap getColoredIcon(Resources res, int colorId, int id) {
final int color = res.getColor(colorId);
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inMutable = true;
final Bitmap bmp = BitmapFactory.decodeResource(res, id, options);
final Paint paint = new Paint();
final ColorFilter filter = new PorterDuffColorFilter(newColor, PorterDuff.Mode.SRC_IN);
final ColorFilter filter = new PorterDuffColorFilter(color, PorterDuff.Mode.SRC_IN);
paint.setColorFilter(filter);
final Canvas canvas = new Canvas(bmp);
canvas.drawBitmap(bmp, 0, 0, paint);

View File

@ -14,6 +14,7 @@ import com.simplemobiletools.filemanager.R;
import com.simplemobiletools.filemanager.Utils;
import com.simplemobiletools.filemanager.models.FileDirItem;
import java.text.DecimalFormat;
import java.util.List;
import butterknife.BindView;
@ -24,14 +25,15 @@ public class ItemsAdapter extends BaseAdapter {
private final LayoutInflater mInflater;
private final Bitmap mFileBmp;
private final Bitmap mDirectoryBmp;
private final Resources mRes;
public ItemsAdapter(Context context, List<FileDirItem> items) {
mItems = items;
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final Resources res = context.getResources();
mDirectoryBmp = Utils.getColoredIcon(res, res.getColor(R.color.lightGrey), R.mipmap.directory);
mFileBmp = Utils.getColoredIcon(res, res.getColor(R.color.lightGrey), R.mipmap.file);
mRes = context.getResources();
mDirectoryBmp = Utils.getColoredIcon(mRes, R.color.lightGrey, R.mipmap.directory);
mFileBmp = Utils.getColoredIcon(mRes, R.color.lightGrey, R.mipmap.file);
}
@Override
@ -50,13 +52,29 @@ public class ItemsAdapter extends BaseAdapter {
if (item.getIsDirectory()) {
viewHolder.icon.setImageBitmap(mDirectoryBmp);
viewHolder.details.setText(getChildrenCnt(item));
} else {
viewHolder.icon.setImageBitmap(mFileBmp);
viewHolder.details.setText(getFormattedSize(item));
}
return convertView;
}
private String getChildrenCnt(FileDirItem item) {
final int children = item.getChildren();
return mRes.getQuantityString(R.plurals.items, children, children);
}
private String getFormattedSize(FileDirItem item) {
final long size = item.getSize();
if (size <= 0)
return "0";
final String[] units = {"B", "kB", "MB", "GB", "TB"};
final int digitGroups = (int) (Math.log10(size) / Math.log10(1024));
return new DecimalFormat("#,##0.#").format(size / Math.pow(1024, digitGroups)) + " " + units[digitGroups];
}
@Override
public int getCount() {
return mItems.size();
@ -75,6 +93,7 @@ public class ItemsAdapter extends BaseAdapter {
static class ViewHolder {
@BindView(R.id.item_name) TextView name;
@BindView(R.id.item_icon) ImageView icon;
@BindView(R.id.item_details) TextView details;
public ViewHolder(View view) {
ButterKnife.bind(this, view);

View File

@ -126,11 +126,18 @@ public class ItemsFragment extends android.support.v4.app.Fragment
if (mToBeDeleted.contains(curPath))
continue;
items.add(new FileDirItem(curPath, curName, file.isDirectory()));
int children = getChildren(file);
long size = file.length();
items.add(new FileDirItem(curPath, curName, file.isDirectory(), children, size));
}
return items;
}
private int getChildren(File file) {
return (file.isDirectory()) ? file.listFiles().length : 0;
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
final FileDirItem item = mItems.get(position);

View File

@ -4,11 +4,15 @@ public class FileDirItem implements Comparable {
private final String mPath;
private final String mName;
private final boolean mIsDirectory;
private final int mChildren;
private final long mSize;
public FileDirItem(String path, String name, boolean isDirectory) {
public FileDirItem(String path, String name, boolean isDirectory, int children, long size) {
mPath = path;
mName = name;
mIsDirectory = isDirectory;
mChildren = children;
mSize = size;
}
public String getPath() {
@ -23,6 +27,14 @@ public class FileDirItem implements Comparable {
return mIsDirectory;
}
public int getChildren() {
return mChildren;
}
public long getSize() {
return mSize;
}
@Override
public int compareTo(Object object) {
final FileDirItem item = (FileDirItem) object;
@ -40,6 +52,8 @@ public class FileDirItem implements Comparable {
return "FileDirItem{" +
"name=" + getName() +
", isDirectory=" + getIsDirectory() +
", path=" + getPath() + "}";
", path=" + getPath() +
", children=" + getChildren() +
", size=" + getSize() +"}";
}
}

View File

@ -18,12 +18,22 @@
<TextView
android:id="@+id/item_name"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignBottom="@+id/item_icon"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/item_icon"
android:layout_toRightOf="@+id/item_icon"
android:gravity="center_vertical"
android:paddingLeft="@dimen/medium_margin"
android:paddingLeft="@dimen/small_margin"
android:paddingTop="@dimen/small_margin"
android:text="Directory"/>
<TextView
android:id="@+id/item_details"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/item_name"
android:layout_toRightOf="@+id/item_icon"
android:paddingLeft="@dimen/small_margin"
android:text="1 KB"
android:textColor="@color/details_grey"
android:textSize="@dimen/details_text_size"/>
</RelativeLayout>

View File

@ -7,4 +7,5 @@
<color name="lightGrey">#33000000</color>
<color name="pressed_item_foreground">#08000000</color>
<color name="activated_item_foreground">#11000000</color>
<color name="details_grey">#33000000</color>
</resources>

View File

@ -1,10 +1,12 @@
<resources>
<dimen name="activity_margin">16dp</dimen>
<dimen name="small_margin">6dp</dimen>
<dimen name="medium_margin">10dp</dimen>
<dimen name="icon_size">48dp</dimen>
<dimen name="social_padding">8dp</dimen>
<dimen name="social_logo">40dp</dimen>
<dimen name="settings_padding">8dp</dimen>
<dimen name="details_text_size">12sp</dimen>
<dimen name="normal_text_size">14sp</dimen>
</resources>

View File

@ -19,6 +19,11 @@
<item quantity="other">%1$d items deleted</item>
</plurals>
<plurals name="items">
<item quantity="one">1 item</item>
<item quantity="other">%1$d items</item>
</plurals>
<!-- About -->
<string name="about">About</string>
<string name="website">More simple apps and source code at:\nhttp://simplemobiletools.com</string>