package com.mechinn.android.ouralliance.csv; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.support.v4.content.FileProvider; import com.mechinn.android.ouralliance.Prefs; import org.apache.commons.lang3.StringUtils; import org.supercsv.io.CsvListWriter; import org.supercsv.prefs.CsvPreference; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import java.util.Date; import java.util.List; import de.greenrobot.event.util.AsyncExecutor; import timber.log.Timber; /** * Created by mechinn on 3/14/15. */ public abstract class ExportCsv implements AsyncExecutor.RunnableEx { public final static String TRUE = "true"; public final static String FALSE = "false"; private List<String> filePartsList; private File dir; private String filename; private Prefs prefs; private String[] header; private List<List<String>> list; private Context context; private String title; public ExportCsv(Context context, String... fileParts) { this.context = context; this.prefs = new Prefs(context); filePartsList = new ArrayList<>(); filePartsList.add(prefs.getYearString()); filePartsList.add("csv"); for(String part : fileParts) { filePartsList.add(part); } File fileDir = context.getExternalFilesDir(null); dir = new File(fileDir, StringUtils.join(filePartsList,File.separator)); dir.mkdirs(); list = new ArrayList<>(); } public Prefs getPrefs() { return prefs; } public String fmtBoolean(Boolean value) { if(null==value) { return ""; } return value?TRUE:FALSE; } public String fmtInteger(Integer value) { if(null==value) { return ""; } return String.valueOf(value); } public String fmtLong(Long value) { if(null==value) { return ""; } return String.valueOf(value); } public String fmtDouble(Double value) { if(null==value) { return ""; } return String.valueOf(value); } public String fmtFloat(Float value) { if(null==value) { return ""; } return String.valueOf(value); } public String fmtDate(Date value) { if(null==value) { return ""; } return value.toString(); } public void setHeader(String[] header) { this.header = header; } public void addToList(List<String> line) { list.add(line); } public void setFileName(String filename) { this.filename = filename+".csv"; } public void setTitle(String title) { this.title = title; } public void run() throws IOException { File file = new File(dir, filename); Timber.d("filename: "+file.getAbsolutePath()); FileWriter fileWriter = new FileWriter(file); CsvListWriter csvWriter = null; try { csvWriter = new CsvListWriter(fileWriter, CsvPreference.EXCEL_PREFERENCE); csvWriter.writeHeader(header); for(List<String> line : list) { Timber.d("writing: " + StringUtils.join(line)); csvWriter.write(line); } } finally { if (csvWriter != null) { csvWriter.close(); } } Intent shareFile = new Intent("com.mechinn.android.ouralliance.ACTION_RETURN_FILE"); shareFile.setAction(Intent.ACTION_SEND); shareFile.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); Uri fileUri = FileProvider.getUriForFile(context,"com.mechinn.android.ouralliance.provider.files",file); shareFile.putExtra(Intent.EXTRA_STREAM,fileUri); String type = context.getContentResolver().getType(fileUri); Timber.d("type: " + type); shareFile.setType(type); Timber.d("uri: " + fileUri); context.startActivity(Intent.createChooser(shareFile, title)); } }