package net.micode.fileexplorer;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.database.Cursor;
import android.util.Log;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.MenuItem;
import android.view.MenuItem.OnMenuItemClickListener;
import android.view.View;
import android.view.View.OnCreateContextMenuListener;
import android.widget.AdapterView;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import net.micode.fileexplorer.FavoriteDatabaseHelper.FavoriteDatabaseListener;
import java.io.File;
import java.util.ArrayList;
public class FavoriteList implements FavoriteDatabaseListener {
private static final String LOG_TAG = "FavoriteList";
private ArrayList<FavoriteItem> mFavoriteList = new ArrayList<FavoriteItem>();
private ArrayAdapter<FavoriteItem> mFavoriteListAdapter;
private FavoriteDatabaseHelper mFavoriteDatabase;
private ListView mListView;
private FavoriteDatabaseListener mListener;
private Context mContext;
public FavoriteList(Context context, ListView list, FavoriteDatabaseListener listener,
FileIconHelper iconHelper) {
mContext = context;
mFavoriteDatabase = new FavoriteDatabaseHelper(context, this);
mFavoriteListAdapter = new FavoriteListAdapter(context, R.layout.favorite_item,
mFavoriteList, iconHelper);
setupFavoriteListView(list);
mListener = listener;
}
public ArrayAdapter<FavoriteItem> getArrayAdapter() {
return mFavoriteListAdapter;
}
public void update() {
mFavoriteList.clear();
Cursor c = mFavoriteDatabase.query();
if (c != null) {
while (c.moveToNext()) {
FavoriteItem item = new FavoriteItem(c.getLong(0), c.getString(1), c.getString(2));
item.fileInfo = Util.GetFileInfo(item.location);
mFavoriteList.add(item);
}
c.close();
}
// remove not existing items
if (Util.isSDCardReady()) {
for (int i = mFavoriteList.size() - 1; i >= 0; i--) {
File file = new File(mFavoriteList.get(i).location);
if (file.exists())
continue;
FavoriteItem favorite = mFavoriteList.get(i);
mFavoriteDatabase.delete(favorite.id, false);
mFavoriteList.remove(i);
}
}
mFavoriteListAdapter.notifyDataSetChanged();
}
public void initList() {
mFavoriteList.clear();
Cursor c = mFavoriteDatabase.query();
if (c != null)
c.close();
if (mFavoriteDatabase.isFirstCreate()) {
for (FavoriteItem fi : Util.getDefaultFavorites(mContext)) {
mFavoriteDatabase.insert(fi.title, fi.location);
}
}
update();
}
public long getCount() {
return mFavoriteList.size();
}
public void show(boolean show) {
mListView.setVisibility(show ? View.VISIBLE : View.GONE);
}
private void setupFavoriteListView(ListView list) {
mListView = list;
mListView.setAdapter(mFavoriteListAdapter);
mListView.setLongClickable(true);
mListView.setOnCreateContextMenuListener(mListViewContextMenuListener);
mListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
onFavoriteListItemClick(parent, view, position, id);
}
});
}
public void onFavoriteListItemClick(AdapterView<?> parent, View view, int position, long id) {
FavoriteItem favorite = mFavoriteList.get(position);
if (favorite.fileInfo.IsDir) {
FileExplorerTabActivity activity = (FileExplorerTabActivity) mContext;
((FileViewActivity) activity.getFragment(Util.SDCARD_TAB_INDEX))
.setPath(favorite.location);
activity.getActionBar().setSelectedNavigationItem(Util.SDCARD_TAB_INDEX);
} else {
try {
IntentBuilder.viewFile(mContext, favorite.fileInfo.filePath);
} catch (ActivityNotFoundException e) {
Log.e(LOG_TAG, "fail to view file: " + e.toString());
}
}
}
private static final int MENU_UNFAVORITE = 100;
// context menu
private OnCreateContextMenuListener mListViewContextMenuListener = new OnCreateContextMenuListener() {
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
menu.add(0, MENU_UNFAVORITE, 0, R.string.operation_unfavorite)
.setOnMenuItemClickListener(menuItemClick);
}
};
private OnMenuItemClickListener menuItemClick = new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
int itemId = item.getItemId();
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
int position = info != null ? info.position : -1;
switch (itemId) {
case MENU_UNFAVORITE:
if (position != -1) {
deleteFavorite(position);
}
break;
default:
return false;
}
return true;
}
};
private void deleteFavorite(int position) {
FavoriteItem favorite = mFavoriteList.get(position);
mFavoriteDatabase.delete(favorite.id, false);
mFavoriteList.remove(position);
mFavoriteListAdapter.notifyDataSetChanged();
mListener.onFavoriteDatabaseChanged();
}
@Override
public void onFavoriteDatabaseChanged() {
update();
mListener.onFavoriteDatabaseChanged();
}
}