/** * Copyright (C) 2012 The FreeCol-Android Team * * This file is part of FreeCol-Android. * * FreeCol-Android is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * FreeCol 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 FreeCol-Android. If not, see <http://www.gnu.org/licenses/>. */ package org.freecolandroid.ui.menu; import java.io.File; import java.util.ArrayList; import java.util.List; import net.sf.freecol.client.gui.i18n.Messages; import org.freecolandroid.R; import org.freecolandroid.debug.FCLog; import org.freecolandroid.ui.FreeColDialogFragment; import android.app.Dialog; import android.content.Context; import android.os.AsyncTask; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.ListView; import android.widget.TextView; public class OpenFileFragment extends FreeColDialogFragment { public static final String TAG = "OpenFileFragment"; private static final String ARG_DIR = "directory"; private static final String ARG_FILE_EXT = "file_extension"; private File mSelectedFile; public static OpenFileFragment newInstance(String directory, String fileExt) { FCLog.log("Starting Open File dialog, dir=" + directory + ", ext=" + fileExt); OpenFileFragment f = new OpenFileFragment(); Bundle args = new Bundle(); args.putString(ARG_DIR, directory); args.putString(ARG_FILE_EXT, fileExt); f.setArguments(args); return f; } // @Override // public Dialog onCreateDialog(Bundle savedInstanceState) { // Dialog d = new Dialog(getActivity(), R.style.GameMenu); // d.setContentView(R.layout.frag_dialog_open_file); // return d; // } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { setStyle(STYLE_NO_FRAME, getTheme()); return super.onCreateDialog(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.frag_dialog_open_file, container, false); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); File dir = new File(getArguments().getString(ARG_DIR)); String fileExt = getArguments().getString(ARG_FILE_EXT); final Button openButton = (Button) getDialog().findViewById(R.id.open); final ListView list = (ListView) getDialog().findViewById(R.id.file_list); final DirectoryListAdapter adapter = new DirectoryListAdapter(getActivity(), dir, fileExt); list.setAdapter(adapter); list.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { mSelectedFile = (File) adapter.getItem(position); if (mSelectedFile.isDirectory()) { adapter.setDirectory(mSelectedFile); adapter.notifyDataSetInvalidated(); openButton.setEnabled(false); } else { openButton.setEnabled(true); } FCLog.log("Selected " + mSelectedFile.getName()); } }); TextView title = (TextView) getDialog().findViewById(R.id.open_title); title.setText(Messages.message("openAction.name")); openButton.setText(Messages.message("openAction.name")); openButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { dismiss(); AsyncTask.THREAD_POOL_EXECUTOR.execute(new Runnable() { @Override public void run() { mClient.getInGameController().loadGame(mSelectedFile); } }); } }); } private static class DirectoryListAdapter extends BaseAdapter { private final List<File> mFiles = new ArrayList<File>(); private File mParentDirectory; private final Context mContext; private final String mFileExt; public DirectoryListAdapter(Context context, File directory, String fileExt) { mContext = context; mFileExt = fileExt; setDirectory(directory); } public void setDirectory(File directory) { mFiles.clear(); mParentDirectory = directory.getParentFile(); if (mParentDirectory != null) { mFiles.add(mParentDirectory); } File[] files = directory.listFiles(); if (files != null) { for (File f : files) { FCLog.log("Checking " + f.getName()); if (f.getName().endsWith(mFileExt) || f.isDirectory()) { FCLog.log("Match"); mFiles.add(f); } else { FCLog.log("Not a match"); } } } else { FCLog.log("Not a directory"); } } @Override public int getCount() { return mFiles.size(); } @Override public Object getItem(int position) { return mFiles.get(position); } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = LayoutInflater.from(mContext).inflate(R.layout.list_item_file, parent, false); } File file = mFiles.get(position); TextView text = (TextView) convertView.findViewById(R.id.name); if (file == mParentDirectory) { text.setText(".."); } else { text.setText(file.getName()); } return convertView; } } }