/*
* Copyright (c) 2011 yang hui <yanghui1986527@gmail.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License v2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 021110-1307, USA.
*/
package com.hd.explorer;
import java.io.File;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import com.hd.Constant;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
/**
* ClassName:HDBaseAdapter
* Function: TODO ADD FUNCTION
* Reason: TODO ADD REASON
*
* @author snowdream
* @version
* @since Ver 1.1
* @Date 2011-11-30 下午11:06:18
*
* @see
*/
public class HDBaseAdapter extends BaseAdapter {
// viewmode
public static final int VIEWMODE_LIST = 0;
public static final int VIEWMODE_ICON = 1;
private Context mcontext = null;
private List<File> mfiles = null;
private int mViewMode = VIEWMODE_ICON;
public HDBaseAdapter(Context context, List<File> files) {
mcontext = context;
mfiles = files;
}
@Override
public int getCount() {
int msize = 0;
if(mfiles != null)
msize = mfiles.size();
return msize;
}
@Override
public File getItem(int position) {
if((position >= 0) && (position < this.getCount()))
return mfiles.get(position);
return null;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public void notifyDataSetChanged() {
super.notifyDataSetChanged();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ListHolder mListHolder = null;
GridHolder mGridHolder = null;
switch (mViewMode) {
case VIEWMODE_LIST:
{
if(convertView==null)
{
convertView=LayoutInflater.from(mcontext).inflate(R.layout.item_listview, null);
mListHolder=new ListHolder();
mListHolder.mfileIcon=(ImageView) convertView.findViewById(R.id.listview_fileicon);
mListHolder.mfileName=(TextView) convertView.findViewById(R.id.listview_filename);
mListHolder.mfileSize=(TextView) convertView.findViewById(R.id.listview_filesize);
mListHolder.mfileTime=(TextView) convertView.findViewById(R.id.listview_filetime);
convertView.setTag(mListHolder);
}else
{
mListHolder=(ListHolder) convertView.getTag();
}
//update the holder
File f = this.getItem(position);
if(f != null){
int icon = this.getFileIcon(f);
if(icon == -1){
Drawable drawable = this.getApkIcon(f.getAbsolutePath());
if(drawable != null){
mListHolder.mfileIcon.setImageDrawable(drawable);
}
else{
mListHolder.mfileIcon.setImageResource(R.drawable.icon_file);
}
}else{
mListHolder.mfileIcon.setImageResource(icon);
}
mListHolder.mfileName.setText(f.getName());
if(f.isFile()){
mListHolder.mfileSize.setText(this.getFileSize(f.length()));
}else {
mListHolder.mfileSize.setText("");
}
mListHolder.mfileTime.setText(this.getFileTime(f.lastModified()));
}
}
break;
case VIEWMODE_ICON:
{
if(convertView==null)
{
convertView=LayoutInflater.from(mcontext).inflate(R.layout.item_gridview, null);
mGridHolder=new GridHolder();
mGridHolder.mfileIcon=(ImageView) convertView.findViewById(R.id.gridview_fileicon);
mGridHolder.mfileName=(TextView) convertView.findViewById(R.id.gridview_filename);
convertView.setTag(mGridHolder);
}else
{
mGridHolder=(GridHolder) convertView.getTag();
}
//update the holder
File f = this.getItem(position);
if(f != null){
int icon = this.getFileIcon(f);
if(icon == -1){
Drawable drawable = this.getApkIcon(f.getAbsolutePath());
if(drawable != null){
mGridHolder.mfileIcon.setImageDrawable(drawable);
}
else{
mGridHolder.mfileIcon.setImageResource(R.drawable.icon_file);
}
}else{
mGridHolder.mfileIcon.setImageResource(icon);
}
mGridHolder.mfileName.setText(f.getName());
}
}
break;
default:
break;
}
return convertView;
}
public int getFileIcon(File f) {
int icon = 0;
String str = Constant.getFileIcon(f);
if(str == null)
{
icon = -1;
}
else{
Resources res = mcontext.getResources();
icon =res.getIdentifier(str,"drawable",mcontext.getPackageName());
if(icon <= 0 )
icon = R.drawable.icon_file;
}
return icon;
}
public Drawable getApkIcon(String path){
PackageManager pm = mcontext.getPackageManager();
PackageInfo info = pm.getPackageArchiveInfo(path, PackageManager.GET_ACTIVITIES);
if(info != null){
ApplicationInfo appInfo = info.applicationInfo;
if(Build.VERSION.SDK_INT >= 8){
appInfo.sourceDir = path;
appInfo.publicSourceDir = path;
}
return appInfo.loadIcon(pm);
}
return null;
}
public String getFileTime(long filetime) {
SimpleDateFormat formatter = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss");
String ftime = formatter.format(new Date(filetime));
return ftime;
}
public String getFileSize(long filesize) {
DecimalFormat df = new DecimalFormat("#.00");
StringBuffer mstrbuf = new StringBuffer();
if (filesize < 1024) {
mstrbuf.append(filesize);
mstrbuf.append(" B");
} else if (filesize < 1048576) {
mstrbuf.append(df.format((double)filesize / 1024));
mstrbuf.append(" K");
} else if (filesize < 1073741824) {
mstrbuf.append(df.format((double)filesize / 1048576));
mstrbuf.append(" M");
} else {
mstrbuf.append(df.format((double)filesize / 1073741824));
mstrbuf.append(" G");
}
df = null;
return mstrbuf.toString();
}
public int getViewMode() {
return mViewMode;
}
public void setViewMode(int ViewMode){
mViewMode = ViewMode;
}
static class ListHolder{
ImageView mfileIcon;
TextView mfileName;
TextView mfileSize;
TextView mfileTime;
}
static class GridHolder{
ImageView mfileIcon;
TextView mfileName;
}
}