package it.angrydroids.epub3reader; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.List; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.app.Activity; import android.app.FragmentManager; import android.app.FragmentTransaction; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.view.ContextMenu; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ContextMenu.ContextMenuInfo; import android.widget.AdapterView; import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; public class FileChooser extends Activity { static List<File> epubs; static List<String> names; ArrayAdapter<String> adapter; static File selected; boolean firstTime; static String book_name; static int handle_close1=0;; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.file_chooser_layout); // finds all epub files by the method epubList() and returns it into // epubs variable if ((epubs == null) || (epubs.size() == 0)) { epubs = epubList(Environment.getExternalStorageDirectory()); } ListView list = (ListView) findViewById(R.id.fileListView); names = fileNames(epubs); adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, names); registerForContextMenu(findViewById(R.id.fileListView)); list.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> listView, View itemView, int position, long itemId) { handle_close1=1; selected = epubs.get(position); Intent resultIntent = new Intent(); // TODO: hardcoded string resultIntent.putExtra("bpath", selected.getAbsolutePath()); setResult(Activity.RESULT_OK, resultIntent); book_name = epubs.get(position).getName().replace(".epub", ""); finish(); } }); list.setAdapter(adapter); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.pdflist_long_press, menu); } @Override public boolean onContextItemSelected(MenuItem item) { AdapterContextMenuInfo info = (AdapterContextMenuInfo) item .getMenuInfo(); int listPosition = info.position; String fileName = (((ListView) (findViewById(R.id.fileListView))) .getItemAtPosition(listPosition)).toString(); File fileSelected = epubs.get(listPosition); Toast.makeText(getApplicationContext(), fileName, Toast.LENGTH_LONG).show(); switch (item.getItemId()) { case R.id.share_file: Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND); emailIntent.setType("application/epub"); emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "EBook " + fileName); emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Please find the attachments"); emailIntent.putExtra( Intent.EXTRA_STREAM, Uri.parse(fileSelected.getAbsolutePath())); startActivity(Intent.createChooser(emailIntent, "Send mail...")); break; case R.id.delete_file: try { File sdcard = Environment.getExternalStorageDirectory(); File file = new File(fileSelected.getAbsolutePath()); file.delete(); } catch (Exception e) { } epubs = epubList(Environment.getExternalStorageDirectory()); names.clear(); names.addAll(fileNames(epubs)); this.adapter.notifyDataSetChanged(); break; } return super.onContextItemSelected(item); } // TODO: hardcoded string private List<String> fileNames(List<File> files) { List<String> res = new ArrayList<String>(); for (int i = 0; i < files.size(); i++) { res.add(files.get(i).getName().replace(".epub", "")); } return res; } // TODO: hardcoded string // TODO: check with mimetype, not with filename extension private List<File> epubList(File dir) { List<File> res = new ArrayList<File>(); if (dir.isDirectory()) { File[] f = dir.listFiles(); if (f != null) { for (int i = 0; i < f.length; i++) { if (f[i].isDirectory()) { res.addAll(epubList(f[i])); } else { String lowerCasedName = f[i].getName().toLowerCase(); if (lowerCasedName.endsWith(".epub")) { res.add(f[i]); } /* * NOTE: future if ((lowerCasedName.endsWith(".epub")) * || (lowerCasedName.endsWith(".e0"))) { res.add(f[i]); * } */ } } } } return res; } private void refreshList() { epubs = epubList(Environment.getExternalStorageDirectory()); names.clear(); names.addAll(fileNames(epubs)); this.adapter.notifyDataSetChanged(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.file_chooser, menu); return true; } public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.update: refreshList(); default: return super.onOptionsItemSelected(item); } } }