package it.angrydroids.epub3reader;
import it.angrydroids.epub3reader.FirstActivity.PlaceholderFragment;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.ListView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.app.ListFragment;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
public class MyFragment extends ListFragment {
ArrayList<String> names = new ArrayList<String>();
ArrayList<String> datas = new ArrayList<String>();
List<String> txtfiles;
String temp_data, temp_book;
List<File> txts;
static File selected;
String fname;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
return inflater.inflate(R.layout.my_fragment_layout, container, false);
}
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if ((txts == null) || (txts.size() == 0)) {
txts = txtList(new File(Environment.getExternalStorageDirectory()
+ "/Notes/"));
}
txtfiles = fileNames(txts);
setListAdapter(new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_1, txtfiles));
registerForContextMenu(getListView());
getListView().setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> listView, View itemView,
int position, long itemId) {
fname= txtfiles.get(position);
try {
if (!fileExists(getActivity().getApplicationContext(),
fname)) {
OutputStreamWriter out = new OutputStreamWriter(
getActivity()
.openFileOutput(
Environment
.getExternalStorageDirectory()
+ "/Notes/"
+ fname
+ ".txt", 0));
String s = "";
out.write(s);
}
File sdcard = Environment.getExternalStorageDirectory();
File file = new File(sdcard, "/Notes/" + fname + ".txt");
StringBuilder text = new StringBuilder();
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
while ((line = br.readLine()) != null) {
text.append(line);
text.append('\n');
}
br.close();
temp_book = txtfiles.get(position);
temp_data = text.toString();
showDialog();
} catch (Exception e) {
}
}
});
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getActivity().getMenuInflater();
inflater.inflate(R.menu.list_long_press, menu);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
.getMenuInfo();
int listPosition = info.position;
String fileName = getListView().getItemAtPosition((listPosition))
.toString();
switch (item.getItemId()) {
case R.id.share_text:
Toast.makeText(getActivity().getApplicationContext(), fileName,
Toast.LENGTH_LONG).show();
try {
File sdcard = Environment.getExternalStorageDirectory();
File file = new File(sdcard, "/Notes/" + fileName + ".txt");
StringBuilder text = new StringBuilder();
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
while ((line = br.readLine()) != null) {
text.append(line);
text.append('\n');
}
br.close();
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "Notes\n\n"+text.toString());
sendIntent.setType("text/plain");
sendIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,
"attached notes for book " + fileName);
startActivity(Intent
.createChooser(sendIntent, "Send email..."));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
case R.id.share_attachment:
Toast.makeText(getActivity().getApplicationContext(), fileName,
Toast.LENGTH_LONG).show();
Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.setType("text/plain");
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,
"notes for book " + fileName);
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT,
"Please find the attachments");
emailIntent.putExtra(
Intent.EXTRA_STREAM,
Uri.parse(Environment.getExternalStorageDirectory()
+ "/Notes/" + fileName + ".txt"));
startActivity(Intent.createChooser(emailIntent, "Send mail..."));
break;
case R.id.delete_file:
try {
File sdcard = Environment.getExternalStorageDirectory();
File file = new File(sdcard, "/Notes/" + fileName + ".txt");
file.delete();
} catch (Exception e) {
}
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
MyFragment frag = new MyFragment();
transaction.replace(R.id.container, frag, "VivzFragment");
transaction.commit();
break;
}
return super.onContextItemSelected(item);
}
public void showDialog() {
FragmentManager manager = getFragmentManager();
Dialog_notes myDialog = new Dialog_notes(temp_book, temp_data);
myDialog.show(manager, "Dialog_notes");
}
public boolean fileExists(Context context, String filename) {
File file = new File(Environment.getExternalStorageDirectory(),
"/Notes/" + filename + ".txt");
if (file == null || !file.exists()) {
return false;
}
return true;
}
private List<File> txtList(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(txtList(f[i]));
} else {
String lowerCasedName = f[i].getName().toLowerCase();
if (lowerCasedName.endsWith(".txt")
&& lowerCasedName.contains("notes")) {
res.add(f[i]);
}
/*
* NOTE: future if ((lowerCasedName.endsWith(".epub"))
* || (lowerCasedName.endsWith(".e0"))) { res.add(f[i]);
* }
*/
}
}
}
}
return res;
}
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(".txt", ""));
/*
* NOTE: future res.add(files.get(i).getName().replace(".epub",
* "").replace(".e0", ""));
*/
}
return res;
}
}