Skip to content
This repository has been archived by the owner on May 30, 2020. It is now read-only.

Commit

Permalink
Merge pull request #61 from iHombre/master
Browse files Browse the repository at this point in the history
upload details
  • Loading branch information
gerc99 committed Dec 11, 2014
2 parents 00ec75d + 70892d1 commit fba62e8
Show file tree
Hide file tree
Showing 13 changed files with 170 additions and 22 deletions.
5 changes: 5 additions & 0 deletions res/values-ca/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -497,4 +497,9 @@
<string name="fuck_you">Fastigueja\'t</string>
<string name="sucks">Xucla\'t aquesta</string>
<string name="wake_lock">Suportar el treball quan la pantalla estigui apagada</string>
<string name="cancel_upload">Cancel·lar descàrrega</string>
<string name="upload_form">Enviament d\'un fitxer</string>
<string name="upload_time">Carregant llançat</string>
<string name="path">Ruta</string>
<string name="stopped">Enviant detingut</string>
</resources>
5 changes: 5 additions & 0 deletions res/values-es/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -498,4 +498,9 @@
<string name="fuck_you">Fastídiate</string>
<string name="sucks">Chúpate esa</string>
<string name="wake_lock">Soportar el trabajo cuando la pantalla esté apagada</string>
<string name="cancel_upload">Cancelar descarga</string>
<string name="upload_form">Envío de un archivo</string>
<string name="upload_time">Cargando lanzado</string>
<string name="path">Ruta</string>
<string name="stopped">Enviando detenido</string>
</resources>
5 changes: 5 additions & 0 deletions res/values-gl/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -496,4 +496,9 @@
<string name="fuck_you">Que che den!</string>
<string name="sucks">Chúpache esa</string>
<string name="wake_lock">Soportar o traballo cando a pantalla estea apagada</string>
<string name="cancel_upload">Anular a descarga</string>
<string name="upload_form">Foto Frete un</string>
<string name="upload_time">Cargando lanzado</string>
<string name="path">Ruta</string>
<string name="stopped">Envío de presos</string>
</resources>
5 changes: 5 additions & 0 deletions res/values-ru/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -531,4 +531,9 @@
<string name="conference_theme">Тема конференции</string>
<string name="message_from">Сообщение от</string>
<string name="delete_history">Удалить историю</string>
<string name="cancel_upload">Отменить загрузку</string>
<string name="upload_form">Отправка файла</string>
<string name="upload_time">Загрузка начата</string>
<string name="path">Путь</string>
<string name="stopped">Отправка остановлена</string>
</resources>
5 changes: 5 additions & 0 deletions res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -528,4 +528,9 @@
<string name="conference_theme">Conference theme</string>
<string name="message_from">Message from</string>
<string name="delete_history">Delete history</string>
<string name="cancel_upload">Cancel upload</string>
<string name="upload_form">Sending file</string>
<string name="upload_time">Start upload at</string>
<string name="path">Path</string>
<string name="stopped">Stopped</string>
</resources>
4 changes: 2 additions & 2 deletions src/ru/sawim/ExternalApi.java
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ public boolean onActivityResult(int requestCode, int resultCode, Intent data) {
} else if (RESULT_EXTERNAL_FILE == requestCode) {
Uri fileUri = data.getData();
InputStream is = fragment.getActivity().getContentResolver().openInputStream(fileUri);
fileTransferListener.onFileSelect((BaseActivity) fragment.getActivity(), is, getFileName(fileUri, fragment.getActivity()));
fileTransferListener.onFileSelect((BaseActivity) fragment.getActivity(), is, getFileName(fileUri, fragment.getActivity()), fileUri);
fileTransferListener = null;
return true;
}
Expand Down Expand Up @@ -143,7 +143,7 @@ public static String getFileName(Uri fileUri, FragmentActivity activity) {
return file.substring(file.lastIndexOf('/') + 1);
}

private static String getPath(final Context context, final Uri uri) {
public static String getPath(final Context context, final Uri uri) {
final boolean isKitKat = Build.VERSION.SDK_INT >= 19;
if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {
if (isExternalStorageDocument(uri)) {
Expand Down
24 changes: 18 additions & 6 deletions src/ru/sawim/SawimNotification.java
Original file line number Diff line number Diff line change
@@ -1,17 +1,25 @@
package ru.sawim;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.*;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.NotificationCompat;
import protocol.Contact;
import protocol.xmpp.XmppContact;
import protocol.xmpp.XmppServiceContact;
import ru.sawim.activities.BaseActivity;
import ru.sawim.activities.SawimActivity;
import ru.sawim.chat.Chat;
import ru.sawim.chat.ChatHistory;
import ru.sawim.comm.JLocale;
import ru.sawim.models.form.Forms;
import ru.sawim.roster.RosterHelper;
import ru.sawim.view.FormView;
import ru.sawim.widget.Util;

import java.util.HashMap;

Expand Down Expand Up @@ -117,9 +125,10 @@ public static void fileProgress(String filename, int percent, String text) {
int id = filename.hashCode();
final Context context = SawimApplication.getContext();
Intent intent = new Intent(context, SawimActivity.class);
intent.setAction(Intent.ACTION_MAIN);
intent.setAction(SawimActivity.NOTIFY_UPLOAD);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra(SawimActivity.NOTIFY_UPLOAD, id);
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder builder = notifiBuildersMap.get(id);
if (builder == null) {
Expand All @@ -128,7 +137,9 @@ public static void fileProgress(String filename, int percent, String text) {
}
if (idsMap.containsKey(filename))
id = idsMap.get(filename);
else idsMap.put(filename, id);
else {
idsMap.put(filename, id);
}

builder.setContentIntent(contentIntent);
builder.setOngoing(false);
Expand All @@ -139,12 +150,13 @@ public static void fileProgress(String filename, int percent, String text) {
builder.setSmallIcon(android.R.drawable.stat_sys_upload_done);
notifiBuildersMap.remove(id);
idsMap.remove(filename);
builder.setAutoCancel(true);
} else {
builder.setTicker(JLocale.getString(R.string.sending_file));
builder.setSmallIcon(android.R.drawable.stat_sys_upload);
builder.setAutoCancel(false);
}
builder.setContentText(text).setProgress(100, percent, false);
builder.setAutoCancel(true);
} else {
builder.setSmallIcon(android.R.drawable.stat_sys_upload_done);
builder.setTicker(text);
Expand Down
5 changes: 5 additions & 0 deletions src/ru/sawim/activities/SawimActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
import ru.sawim.Scheme;
import ru.sawim.chat.Chat;
import ru.sawim.chat.ChatHistory;
import ru.sawim.forms.UploadDetailsForm;
import ru.sawim.modules.DebugLog;
import ru.sawim.roster.RosterHelper;
import ru.sawim.view.*;
Expand All @@ -54,6 +55,7 @@ public class SawimActivity extends BaseActivity {
public static final String NOTIFY = "ru.sawim.notify";
public static final String NOTIFY_REPLY = "ru.sawim.notify.reply";
public static final String NOTIFY_CAPTCHA = "ru.sawim.notify.captcha";
public static final String NOTIFY_UPLOAD = "ru.sawim.notify.upload";
private boolean isOpenNewChat = false;

@Override
Expand Down Expand Up @@ -105,6 +107,9 @@ private void handleIntent() {
if (NOTIFY_CAPTCHA.equals(getIntent().getAction())) {
FormView.showWindows(this, getIntent().getStringExtra(NOTIFY_CAPTCHA));
}
if (NOTIFY_UPLOAD.equals(getIntent().getAction())) {
new UploadDetailsForm(getIntent().getIntExtra(NOTIFY_UPLOAD, -1)).show(this);
}
setIntent(null);
}

Expand Down
68 changes: 68 additions & 0 deletions src/ru/sawim/forms/UploadDetailsForm.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package ru.sawim.forms;

import android.app.AlertDialog;
import android.content.DialogInterface;
import ru.sawim.R;
import ru.sawim.activities.BaseActivity;
import ru.sawim.comm.JLocale;
import ru.sawim.comm.StringConvertor;
import ru.sawim.modules.FileTransfer;
import java.util.Map;

public class UploadDetailsForm {

private int ids;
private String filename;
private String path;
private String size;
private String to;
private String time;

public UploadDetailsForm(int id) {
int i = 0;
while (FileTransfer.fileMap.size() > i) {
if (FileTransfer.fileMap.get(i).get("ID").equalsIgnoreCase(String.valueOf(id))) {
Map<String,String> fileMap = FileTransfer.fileMap.get(i);
this.filename = fileMap.get("FILENAME");
this.path = fileMap.get("PATH");
this.size = fileMap.get("FILESIZE");
this.size = StringConvertor.bytesToSizeString(Integer.parseInt(size), false);
this.to = fileMap.get("TO");
this.time = fileMap.get("START");
this.ids = i;
}
i++;
}
}

public void show(BaseActivity activity) {
if (filename != null) {
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setCancelable(true);
builder.setTitle(R.string.sending_file);
builder.setMessage(
JLocale.getString(R.string.path) + ": " + path +
"\n" + JLocale.getString(R.string.size) + ": " + size +
"\n" + JLocale.getString(R.string.chat) + ": " + to +
"\n" + JLocale.getString(R.string.upload_time) + ": " + time +
"\n" + JLocale.getString(R.string.status) + ": " + (!FileTransfer.canceled ? JLocale.getString(R.string.sending_file) : JLocale.getString(R.string.stopped))
);
builder.setNegativeButton(JLocale.getString(R.string.cancel_upload),
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int id) {
FileTransfer.cancelUpload(ids);
dialog.cancel();
}
});
builder.setPositiveButton(JLocale.getString(R.string.close),
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int id) {
dialog.cancel();
}
});
builder.create().show();
}
}
}
3 changes: 2 additions & 1 deletion src/ru/sawim/io/FileBrowserListener.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,15 @@

package ru.sawim.io;

import android.net.Uri;
import ru.sawim.SawimException;
import ru.sawim.activities.BaseActivity;

import java.io.InputStream;


public interface FileBrowserListener {
public void onFileSelect(BaseActivity activity, InputStream in, String fileName) throws SawimException;
public void onFileSelect(BaseActivity activity, InputStream in, String fileName, Uri fileUri) throws SawimException;
}


58 changes: 47 additions & 11 deletions src/ru/sawim/modules/FileTransfer.java
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
package ru.sawim.modules;

import android.net.Uri;
import android.os.Build;
import android.util.Log;
import org.json.JSONObject;
import protocol.Contact;
import protocol.Protocol;
import protocol.net.TcpSocket;
import ru.sawim.R;
import ru.sawim.SawimApplication;
import ru.sawim.SawimException;
import ru.sawim.SawimNotification;
import ru.sawim.*;
import ru.sawim.activities.BaseActivity;
import ru.sawim.chat.Chat;
import ru.sawim.comm.JLocale;
Expand All @@ -24,15 +22,17 @@
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;
import java.util.*;

public final class FileTransfer implements FileBrowserListener, PhotoListener, Runnable {
private static final String TAG = FileTransfer.class.getSimpleName();
public static final List<Map<String, String>> fileMap = new ArrayList<>();

private String filename;
private InputStream fis;
private int fsize;
private boolean canceled = false;
private static String filePath;
public static InputStream fis;
private static int fsize;
public static boolean canceled = false;
private Protocol protocol;
private Contact cItem;
private Chat chat;
Expand Down Expand Up @@ -70,9 +70,10 @@ public void startPhotoTransfer() {
BaseActivity.getExternalApi().startCamera(this, 1024, 768);
}

public void onFileSelect(BaseActivity activity, InputStream in, String fileName) {
public void onFileSelect(BaseActivity activity, InputStream in, String fileName, Uri fileUri) {
try {
setFileName(fileName);
filePath = ExternalApi.getPath(activity, fileUri);
int fileSize = in.available();
byte[] image = null;

Expand All @@ -85,16 +86,50 @@ public void onFileSelect(BaseActivity activity, InputStream in, String fileName)
fileSize = in.available();
}
setData(in, fileSize);

setProgress(0);
SawimApplication.getExecutor().execute(this);
addProgress();
publicUploadDetail(filename, fileSize, getReceiver());
} catch (Exception e) {
closeFile();
handleException(new SawimException(191, 6));
}
}

private static void publicUploadDetail(String filename, int fileSize, Contact receiver) {
try {
canceled = false;
long time = SawimApplication.getCurrentGmtTime();
boolean today = (SawimApplication.getCurrentGmtTime() - 24 * 60 * 60 < time);
String strTime = ru.sawim.comm.Util.getLocalDateString(time, today);
Map<String,String> currentFileMap = new HashMap<>();
currentFileMap.put("FILENAME",filename);
currentFileMap.put("FILESIZE", String.valueOf(fileSize));
currentFileMap.put("PATH", filePath);
currentFileMap.put("TO", receiver.getUserId());
currentFileMap.put("START", strTime);
currentFileMap.put("ID", String.valueOf((filename + " - " + StringConvertor.bytesToSizeString(fsize, false)).hashCode()));
fileMap.add(currentFileMap);
} catch (Exception e) {
e.printStackTrace();
}
}

public static void cancelUpload(int id){
try {
canceled = true;
Map<String, String> fileMap = FileTransfer.fileMap.get(id);
String filename = fileMap.get("FILENAME");
TcpSocket.close(fis);
fis = null;
SawimNotification.clear(filename + " - " + StringConvertor.bytesToSizeString(fsize, false));
SawimNotification.fileProgress(filename + " - " + StringConvertor.bytesToSizeString(fsize, false), -1, JLocale.getString(R.string.canceled));
SawimApplication.gc();
} catch (Exception e) {
e.printStackTrace();
}
}

public void processPhoto(BaseActivity activity, final byte[] data) {
setData(new ByteArrayInputStream(data), data.length);
String timestamp = Util.getLocalDateString(SawimApplication.getCurrentGmtTime(), false);
Expand All @@ -119,7 +154,7 @@ private void changeFileProgress(int percent, int message) {
}
}

public void cancel() {
public void cancel() {
canceled = true;
changeFileProgress(0, R.string.canceled);
closeFile();
Expand Down Expand Up @@ -175,6 +210,7 @@ private void closeFile() {
public void destroy() {
try {
closeFile();
fileMap.clear();
RosterHelper.getInstance().removeTransfer(false);
SawimApplication.gc();
} catch (Exception ignored) {
Expand Down
3 changes: 2 additions & 1 deletion src/ru/sawim/modules/search/UserInfo.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package ru.sawim.modules.search;

import android.net.Uri;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
Expand Down Expand Up @@ -397,7 +398,7 @@ public void setBinAvatar(byte[] data) {
}
}

public void onFileSelect(BaseActivity activity, InputStream fis, String fileName) throws SawimException {
public void onFileSelect(BaseActivity activity, InputStream fis, String fileName, Uri fileUri) throws SawimException {
try {
int size = fis.available();
if (size <= 30 * 1024 * 1024) {
Expand Down
2 changes: 1 addition & 1 deletion src/ru/sawim/view/RosterView.java
Original file line number Diff line number Diff line change
Expand Up @@ -395,7 +395,7 @@ private void sharing(Protocol p, Contact c) {
try {
InputStream is = getActivity().getContentResolver().openInputStream(data);
FileTransfer fileTransfer = new FileTransfer(p, c);
fileTransfer.onFileSelect((BaseActivity) getActivity(), is, ExternalApi.getFileName(data, getActivity()));
fileTransfer.onFileSelect((BaseActivity) getActivity(), is, ExternalApi.getFileName(data, getActivity()), data);
} catch (FileNotFoundException e) {
}
Toast.makeText(getActivity(), R.string.sending_file, Toast.LENGTH_LONG).show();
Expand Down

0 comments on commit fba62e8

Please sign in to comment.