|
|
|
@ -1,11 +1,17 @@
|
|
|
|
|
package com.todoroo.astrid.files;
|
|
|
|
|
|
|
|
|
|
import java.io.File;
|
|
|
|
|
import java.io.FileOutputStream;
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
import java.io.InputStream;
|
|
|
|
|
import java.net.HttpURLConnection;
|
|
|
|
|
import java.net.URL;
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.Date;
|
|
|
|
|
|
|
|
|
|
import android.app.Activity;
|
|
|
|
|
import android.app.AlertDialog;
|
|
|
|
|
import android.app.ProgressDialog;
|
|
|
|
|
import android.content.DialogInterface;
|
|
|
|
|
import android.graphics.Bitmap;
|
|
|
|
|
import android.text.TextUtils;
|
|
|
|
@ -24,7 +30,6 @@ import com.todoroo.aacenc.RecognizerApi;
|
|
|
|
|
import com.todoroo.andlib.data.TodorooCursor;
|
|
|
|
|
import com.todoroo.andlib.service.Autowired;
|
|
|
|
|
import com.todoroo.andlib.service.DependencyInjectionService;
|
|
|
|
|
import com.todoroo.andlib.sql.Criterion;
|
|
|
|
|
import com.todoroo.andlib.sql.Query;
|
|
|
|
|
import com.todoroo.andlib.utility.AndroidUtilities;
|
|
|
|
|
import com.todoroo.andlib.utility.DateUtilities;
|
|
|
|
@ -76,8 +81,7 @@ public class FilesControlSet extends PopupControlSet {
|
|
|
|
|
public void refreshMetadata() {
|
|
|
|
|
TodorooCursor<Metadata> cursor = metadataService.query(
|
|
|
|
|
Query.select(Metadata.PROPERTIES)
|
|
|
|
|
.where(Criterion.and(MetadataCriteria.byTaskAndwithKey(model.getId(), FileMetadata.METADATA_KEY),
|
|
|
|
|
FileMetadata.FILE_PATH.isNotNull())));
|
|
|
|
|
.where(MetadataCriteria.byTaskAndwithKey(model.getId(), FileMetadata.METADATA_KEY)));
|
|
|
|
|
try {
|
|
|
|
|
files.clear();
|
|
|
|
|
for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
|
|
|
|
@ -142,7 +146,15 @@ public class FilesControlSet extends PopupControlSet {
|
|
|
|
|
private void setupFileClickListener(View view, final Metadata m) {
|
|
|
|
|
String fileType = m.getValue(FileMetadata.FILE_TYPE);
|
|
|
|
|
final String filePath = m.getValue(FileMetadata.FILE_PATH);
|
|
|
|
|
if (FileMetadata.FILE_TYPE_AUDIO.equals(fileType)) {
|
|
|
|
|
if (TextUtils.isEmpty(filePath)) {
|
|
|
|
|
DialogUtilities.okCancelDialog(activity, activity.getString(R.string.file_download_title),
|
|
|
|
|
activity.getString(R.string.file_download_body), new DialogInterface.OnClickListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onClick(DialogInterface d, int which) {
|
|
|
|
|
downloadFile(m);
|
|
|
|
|
}
|
|
|
|
|
}, null);
|
|
|
|
|
} else if (FileMetadata.FILE_TYPE_AUDIO.equals(fileType)) {
|
|
|
|
|
view.setOnClickListener(new OnClickListener() {
|
|
|
|
|
@Override
|
|
|
|
|
public void onClick(View v) {
|
|
|
|
@ -178,6 +190,92 @@ public class FilesControlSet extends PopupControlSet {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@SuppressWarnings("nls")
|
|
|
|
|
private void downloadFile(final Metadata m) {
|
|
|
|
|
final ProgressDialog pd = new ProgressDialog(activity);
|
|
|
|
|
pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
|
|
|
|
|
pd.setMessage(activity.getString(R.string.file_download_progress));
|
|
|
|
|
pd.setMax(100);
|
|
|
|
|
|
|
|
|
|
new Thread() {
|
|
|
|
|
@Override
|
|
|
|
|
public void run() {
|
|
|
|
|
String urlString = m.getValue(FileMetadata.URL);
|
|
|
|
|
String name;
|
|
|
|
|
if (urlString.endsWith("/"))
|
|
|
|
|
urlString = urlString.substring(0, urlString.length() - 1);
|
|
|
|
|
|
|
|
|
|
int lastComponent = urlString.lastIndexOf('/');
|
|
|
|
|
if (lastComponent > 0)
|
|
|
|
|
name = urlString.substring(lastComponent + 1);
|
|
|
|
|
else
|
|
|
|
|
name = urlString;
|
|
|
|
|
StringBuilder filePathBuilder = new StringBuilder();
|
|
|
|
|
filePathBuilder.append(activity.getExternalFilesDir(FileMetadata.FILES_DIRECTORY).toString())
|
|
|
|
|
.append(File.separator)
|
|
|
|
|
.append(name);
|
|
|
|
|
|
|
|
|
|
File file = new File(filePathBuilder.toString());
|
|
|
|
|
try {
|
|
|
|
|
file.createNewFile();
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
pd.dismiss();
|
|
|
|
|
Toast.makeText(activity, R.string.file_err_download, Toast.LENGTH_LONG);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
URL url = new URL(urlString);
|
|
|
|
|
|
|
|
|
|
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
|
|
|
|
|
urlConnection.setRequestMethod("GET");
|
|
|
|
|
|
|
|
|
|
urlConnection.setDoOutput(true);
|
|
|
|
|
|
|
|
|
|
urlConnection.connect();
|
|
|
|
|
|
|
|
|
|
FileOutputStream fileOutput = new FileOutputStream(file);
|
|
|
|
|
|
|
|
|
|
InputStream inputStream = urlConnection.getInputStream();
|
|
|
|
|
|
|
|
|
|
int totalSize = urlConnection.getContentLength();
|
|
|
|
|
|
|
|
|
|
int downloadedSize = 0;
|
|
|
|
|
|
|
|
|
|
byte[] buffer = new byte[1024];
|
|
|
|
|
|
|
|
|
|
int bufferLength = 0; //used to store a temporary size of the buffer
|
|
|
|
|
|
|
|
|
|
while ((bufferLength = inputStream.read(buffer)) > 0 ) {
|
|
|
|
|
fileOutput.write(buffer, 0, bufferLength);
|
|
|
|
|
downloadedSize += bufferLength;
|
|
|
|
|
|
|
|
|
|
int progress = (int) (downloadedSize*100/totalSize);
|
|
|
|
|
pd.setProgress(progress);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fileOutput.flush();
|
|
|
|
|
fileOutput.close();
|
|
|
|
|
|
|
|
|
|
m.setValue(FileMetadata.FILE_PATH, file.getAbsolutePath());
|
|
|
|
|
metadataService.save(m);
|
|
|
|
|
activity.runOnUiThread(new Runnable() {
|
|
|
|
|
@Override
|
|
|
|
|
public void run() {
|
|
|
|
|
refreshMetadata();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
file.delete();
|
|
|
|
|
Toast.makeText(activity, R.string.file_err_download, Toast.LENGTH_LONG);
|
|
|
|
|
} finally {
|
|
|
|
|
pd.dismiss();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}.start();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void setUpFileRow(Metadata m, View row, LinearLayout parent, LayoutParams lp) {
|
|
|
|
|
TextView nameView = (TextView) row.findViewById(R.id.file_text);
|
|
|
|
|
TextView typeView = (TextView) row.findViewById(R.id.file_type);
|
|
|
|
@ -194,8 +292,14 @@ public class FilesControlSet extends PopupControlSet {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private String getNameString(Metadata metadata) {
|
|
|
|
|
File f = new File(metadata.getValue(FileMetadata.FILE_PATH));
|
|
|
|
|
String name = f.getName();
|
|
|
|
|
String path = metadata.getValue(FileMetadata.FILE_PATH);
|
|
|
|
|
String name;
|
|
|
|
|
if (TextUtils.isEmpty(path)) {
|
|
|
|
|
name = metadata.getValue(FileMetadata.URL);
|
|
|
|
|
} else {
|
|
|
|
|
File f = new File(path);
|
|
|
|
|
name = f.getName();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (name.matches("\\d+_\\d+_\\w+.\\w+")) { //$NON-NLS-1$
|
|
|
|
|
Date date = new Date(metadata.getValue(FileMetadata.ATTACH_DATE));
|
|
|
|
|