Finished to handle pictures with liblinphone storage
This commit is contained in:
parent
015b83c9ca
commit
3cca2d1c71
4 changed files with 49 additions and 13 deletions
|
@ -314,7 +314,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
|
||||||
|
|
||||||
for (int i = messagesList.size() - limit; i < messagesList.size(); i++) {
|
for (int i = messagesList.size() - limit; i < messagesList.size(); i++) {
|
||||||
ChatMessage msg = messagesList.get(i);
|
ChatMessage msg = messagesList.get(i);
|
||||||
if (msg.getMessage() != null) {
|
if (msg.getMessage() != null && msg.getMessage().length() > 0) {
|
||||||
displayMessage(msg.getId(), msg.getMessage(), msg.getTimestamp(), msg.isIncoming(), msg.getStatus(), messagesLayout);
|
displayMessage(msg.getId(), msg.getMessage(), msg.getTimestamp(), msg.isIncoming(), msg.getStatus(), messagesLayout);
|
||||||
} else {
|
} else {
|
||||||
displayImageMessage(msg.getId(), msg.getImage(), msg.getTimestamp(), msg.isIncoming(), msg.getStatus(), messagesLayout, msg.getUrl());
|
displayImageMessage(msg.getId(), msg.getImage(), msg.getTimestamp(), msg.isIncoming(), msg.getStatus(), messagesLayout, msg.getUrl());
|
||||||
|
@ -410,7 +410,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
|
||||||
final Bitmap bm = ChatFragment.downloadImage(url);
|
final Bitmap bm = ChatFragment.downloadImage(url);
|
||||||
if (bm != null) {
|
if (bm != null) {
|
||||||
if (useLinphoneMessageStorage) {
|
if (useLinphoneMessageStorage) {
|
||||||
saveImage(bm, finalId);
|
saveImage(bm, finalId, null);
|
||||||
} else {
|
} else {
|
||||||
LinphoneActivity.instance().getChatStorage().saveImage(finalId, bm);
|
LinphoneActivity.instance().getChatStorage().saveImage(finalId, bm);
|
||||||
}
|
}
|
||||||
|
@ -596,8 +596,12 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
|
||||||
if (LinphoneActivity.isInstanciated()) {
|
if (LinphoneActivity.isInstanciated()) {
|
||||||
newId = LinphoneActivity.instance().onMessageSent(sipUri, bitmap, url);
|
newId = LinphoneActivity.instance().onMessageSent(sipUri, bitmap, url);
|
||||||
}
|
}
|
||||||
|
newId = checkId(newId);
|
||||||
latestImageMessages.put(newId, url);
|
latestImageMessages.put(newId, url);
|
||||||
|
|
||||||
|
if (useLinphoneMessageStorage)
|
||||||
|
saveImage(bitmap, newId, chatMessage);
|
||||||
|
|
||||||
displayImageMessage(newId, bitmap, String.valueOf(System.currentTimeMillis()), false, State.InProgress, messagesLayout, url);
|
displayImageMessage(newId, bitmap, String.valueOf(System.currentTimeMillis()), false, State.InProgress, messagesLayout, url);
|
||||||
scrollToEnd();
|
scrollToEnd();
|
||||||
} else if (!isNetworkReachable && LinphoneActivity.isInstanciated()) {
|
} else if (!isNetworkReachable && LinphoneActivity.isInstanciated()) {
|
||||||
|
@ -633,9 +637,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
|
||||||
});
|
});
|
||||||
} else if (message.getExternalBodyUrl() != null) {
|
} else if (message.getExternalBodyUrl() != null) {
|
||||||
Bitmap bm = null;
|
Bitmap bm = null;
|
||||||
if (useLinphoneMessageStorage) {
|
if (!useLinphoneMessageStorage) {
|
||||||
//TODO: Try to read image from file
|
|
||||||
} else {
|
|
||||||
byte[] rawImage = LinphoneActivity.instance().getChatStorage().getRawImageFromMessage(id);
|
byte[] rawImage = LinphoneActivity.instance().getChatStorage().getRawImageFromMessage(id);
|
||||||
if (rawImage != null) {
|
if (rawImage != null) {
|
||||||
bm = BitmapFactory.decodeByteArray(rawImage, 0, rawImage.length);
|
bm = BitmapFactory.decodeByteArray(rawImage, 0, rawImage.length);
|
||||||
|
@ -737,25 +739,41 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
|
||||||
private void saveImage(int id) {
|
private void saveImage(int id) {
|
||||||
byte[] rawImage = LinphoneActivity.instance().getChatStorage().getRawImageFromMessage(id);
|
byte[] rawImage = LinphoneActivity.instance().getChatStorage().getRawImageFromMessage(id);
|
||||||
Bitmap bm = BitmapFactory.decodeByteArray(rawImage, 0, rawImage.length);
|
Bitmap bm = BitmapFactory.decodeByteArray(rawImage, 0, rawImage.length);
|
||||||
if (saveImage(bm, id)) {
|
if (saveImage(bm, id, null)) {
|
||||||
Toast.makeText(getActivity(), getString(R.string.image_saved), Toast.LENGTH_SHORT).show();
|
Toast.makeText(getActivity(), getString(R.string.image_saved), Toast.LENGTH_SHORT).show();
|
||||||
} else {
|
} else {
|
||||||
Toast.makeText(getActivity(), getString(R.string.image_not_saved), Toast.LENGTH_LONG).show();
|
Toast.makeText(getActivity(), getString(R.string.image_not_saved), Toast.LENGTH_LONG).show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean saveImage(Bitmap bm, int id) {
|
private boolean saveImage(Bitmap bm, int id, LinphoneChatMessage message) {
|
||||||
try {
|
try {
|
||||||
String path = Environment.getExternalStorageDirectory().toString();
|
String path = Environment.getExternalStorageDirectory().toString();
|
||||||
|
if (!path.endsWith("/"))
|
||||||
|
path += "/";
|
||||||
|
path += "Pictures/";
|
||||||
|
File directory = new File(path);
|
||||||
|
directory.mkdirs();
|
||||||
|
|
||||||
|
String filename = getString(R.string.picture_name_format).replace("%s", String.valueOf(id));
|
||||||
|
File file = new File(path, filename);
|
||||||
|
|
||||||
OutputStream fOut = null;
|
OutputStream fOut = null;
|
||||||
File file = new File(path, getString(R.string.picture_name_format).replace("%s", String.valueOf(id)));
|
|
||||||
fOut = new FileOutputStream(file);
|
fOut = new FileOutputStream(file);
|
||||||
|
|
||||||
bm.compress(Bitmap.CompressFormat.JPEG, 100, fOut);
|
bm.compress(Bitmap.CompressFormat.JPEG, 100, fOut);
|
||||||
fOut.flush();
|
fOut.flush();
|
||||||
fOut.close();
|
fOut.close();
|
||||||
|
|
||||||
//TODO: Update url path in liblinphone database
|
if (useLinphoneMessageStorage) {
|
||||||
|
//Update url path in liblinphone database
|
||||||
|
if (message == null) {
|
||||||
|
LinphoneChatMessage[] history = chatRoom.getHistory();
|
||||||
|
message = history[id-1];
|
||||||
|
}
|
||||||
|
message.setExternalBodyUrl(path + filename);
|
||||||
|
chatRoom.updateUrl(message);
|
||||||
|
}
|
||||||
|
|
||||||
MediaStore.Images.Media.insertImage(getActivity().getContentResolver(),file.getAbsolutePath(),file.getName(),file.getName());
|
MediaStore.Images.Media.insertImage(getActivity().getContentResolver(),file.getAbsolutePath(),file.getName(),file.getName());
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -47,6 +47,17 @@ public class ChatMessage {
|
||||||
this.isRead = read;
|
this.isRead = read;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ChatMessage(int id, String message, Bitmap image, String timestamp, boolean incoming, int status, boolean read) {
|
||||||
|
super();
|
||||||
|
this.id = id;
|
||||||
|
this.message = message;
|
||||||
|
this.timestamp = timestamp;
|
||||||
|
this.incoming = incoming;
|
||||||
|
this.status = status;
|
||||||
|
this.image = image;
|
||||||
|
this.isRead = read;
|
||||||
|
}
|
||||||
|
|
||||||
public int getId() {
|
public int getId() {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,7 @@ import android.database.Cursor;
|
||||||
import android.database.sqlite.SQLiteDatabase;
|
import android.database.sqlite.SQLiteDatabase;
|
||||||
import android.database.sqlite.SQLiteOpenHelper;
|
import android.database.sqlite.SQLiteOpenHelper;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
|
import android.graphics.BitmapFactory;
|
||||||
import android.graphics.Bitmap.CompressFormat;
|
import android.graphics.Bitmap.CompressFormat;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -284,10 +285,16 @@ public class ChatStorage {
|
||||||
LinphoneChatMessage[] history = room.getHistory();
|
LinphoneChatMessage[] history = room.getHistory();
|
||||||
for (int i = 0; i < history.length; i++) {
|
for (int i = 0; i < history.length; i++) {
|
||||||
LinphoneChatMessage message = history[i];
|
LinphoneChatMessage message = history[i];
|
||||||
ChatMessage chatMessage = new ChatMessage(i+1, message.getText(), null,
|
|
||||||
|
Bitmap bm = null;
|
||||||
|
String url = message.getExternalBodyUrl();
|
||||||
|
if (url != null && !url.startsWith("http")) {
|
||||||
|
bm = BitmapFactory.decodeFile(url);
|
||||||
|
}
|
||||||
|
ChatMessage chatMessage = new ChatMessage(i+1, message.getText(), bm,
|
||||||
String.valueOf(message.getTime()), !message.isOutgoing(),
|
String.valueOf(message.getTime()), !message.isOutgoing(),
|
||||||
message.getStatus().toInt(), message.isRead());
|
message.getStatus().toInt(), message.isRead());
|
||||||
chatMessage.setUrl(message.getExternalBodyUrl());
|
chatMessage.setUrl(url);
|
||||||
chatMessages.add(chatMessage);
|
chatMessages.add(chatMessage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit d56d927caf4c22554e333ff3227628da2d370a65
|
Subproject commit b3c08e5d7ebbc30b1448f7a288f667c86904e6e2
|
Loading…
Reference in a new issue