Fix image message status storage issue

This commit is contained in:
Sylvain Berfini 2012-09-18 17:13:51 +02:00
parent a669ad0dc9
commit 9b32fe8608
4 changed files with 39 additions and 12 deletions

View file

@ -29,6 +29,7 @@ import java.net.HttpURLConnection;
import java.net.URL; import java.net.URL;
import java.net.URLConnection; import java.net.URLConnection;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import org.apache.http.util.ByteArrayBuffer; import org.apache.http.util.ByteArrayBuffer;
@ -37,9 +38,11 @@ import org.linphone.core.LinphoneChatMessage;
import org.linphone.core.LinphoneChatMessage.State; import org.linphone.core.LinphoneChatMessage.State;
import org.linphone.core.LinphoneChatRoom; import org.linphone.core.LinphoneChatRoom;
import org.linphone.core.LinphoneCore; import org.linphone.core.LinphoneCore;
import org.linphone.core.Log;
import org.linphone.ui.AvatarWithShadow; import org.linphone.ui.AvatarWithShadow;
import org.linphone.ui.BubbleChat; import org.linphone.ui.BubbleChat;
import android.annotation.SuppressLint;
import android.app.Activity; import android.app.Activity;
import android.content.Intent; import android.content.Intent;
import android.database.Cursor; import android.database.Cursor;
@ -97,6 +100,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
private int previousMessageID; private int previousMessageID;
private Handler mHandler = new Handler(); private Handler mHandler = new Handler();
private BubbleChat lastSentMessageBubble; private BubbleChat lastSentMessageBubble;
private HashMap<Integer, String> latestImageMessages;
private ProgressBar progressBar; private ProgressBar progressBar;
private int bytesSent; private int bytesSent;
@ -282,8 +286,19 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
return true; return true;
} }
@Override
public void onPause() {
super.onPause();
latestImageMessages = null;
Log.e("Deleted hashmap");
}
@SuppressLint("UseSparseArrays")
@Override @Override
public void onResume() { public void onResume() {
latestImageMessages = new HashMap<Integer, String>();
Log.e("New hashmap");
super.onResume(); super.onResume();
if (LinphoneActivity.isInstanciated()) { if (LinphoneActivity.isInstanciated()) {
@ -326,6 +341,8 @@ 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);
} }
latestImageMessages.put(newId, url);
Log.e("Add " + newId + ", " + url + " to hashmap");
displayImageMessage(newId, bitmap, String.valueOf(System.currentTimeMillis()), false, State.InProgress, messagesLayout); displayImageMessage(newId, bitmap, String.valueOf(System.currentTimeMillis()), false, State.InProgress, messagesLayout);
scrollToEnd(); scrollToEnd();
@ -362,10 +379,23 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
mHandler.post(new Runnable() { mHandler.post(new Runnable() {
@Override @Override
public void run() { public void run() {
if (finalMessage != null) { if (finalMessage != null && !finalMessage.equals("")) {
LinphoneActivity.instance().onMessageStateChanged(sipUri, finalMessage, finalState.toInt()); LinphoneActivity.instance().onMessageStateChanged(sipUri, finalMessage, finalState.toInt());
} else if (finalImage != null) { } else if (finalImage != null && !finalImage.equals("")) {
LinphoneActivity.instance().onImageMessageStateChanged(sipUri, finalImage, finalState.toInt()); if (latestImageMessages != null && latestImageMessages.containsValue(finalImage)) {
int id = -1;
for (int key : latestImageMessages.keySet()) {
String object = latestImageMessages.get(key);
if (object.equals(finalImage)) {
id = key;
break;
}
}
Log.e("ID = " + id);
if (id != -1) {
LinphoneActivity.instance().onImageMessageStateChanged(sipUri, id, finalState.toInt());
}
}
} }
if (lastSentMessageBubble != null) { if (lastSentMessageBubble != null) {
lastSentMessageBubble.updateStatusView(finalState); lastSentMessageBubble.updateStatusView(finalState);

View file

@ -59,14 +59,11 @@ public class ChatStorage {
db.update(TABLE_NAME, values, "direction LIKE " + OUTGOING + " AND remoteContact LIKE \"" + to + "\" AND message LIKE \"" + message + "\"", null); db.update(TABLE_NAME, values, "direction LIKE " + OUTGOING + " AND remoteContact LIKE \"" + to + "\" AND message LIKE \"" + message + "\"", null);
} }
public void updateMessageStatus(String to, Bitmap image, int status) { public void updateMessageStatus(String to, int id, int status) {
ContentValues values = new ContentValues(); ContentValues values = new ContentValues();
values.put("status", status); values.put("status", status);
ByteArrayOutputStream baos = new ByteArrayOutputStream(); db.update(TABLE_NAME, values, "id LIKE " + id, null);
image.compress(CompressFormat.JPEG, 100, baos);
db.update(TABLE_NAME, values, "direction LIKE " + OUTGOING + " AND remoteContact LIKE \"" + to + "\" AND image LIKE \"" + baos.toByteArray() + "\"", null);
} }
public int saveMessage(String from, String to, String message) { public int saveMessage(String from, String to, String message) {
@ -168,7 +165,7 @@ public class ChatStorage {
class ChatHelper extends SQLiteOpenHelper { class ChatHelper extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 12; private static final int DATABASE_VERSION = 13;
private static final String DATABASE_NAME = "linphone-android"; private static final String DATABASE_NAME = "linphone-android";
ChatHelper(Context context) { ChatHelper(Context context) {

View file

@ -636,8 +636,8 @@ public class LinphoneActivity extends FragmentActivity implements OnClickListene
getChatStorage().updateMessageStatus(to, message, newState); getChatStorage().updateMessageStatus(to, message, newState);
} }
public void onImageMessageStateChanged(String to, String image, int newState) { public void onImageMessageStateChanged(String to, int id, int newState) {
getChatStorage().updateMessageStatus(to, image, newState); getChatStorage().updateMessageStatus(to, id, newState);
} }
@Override @Override

View file

@ -154,7 +154,7 @@ public class BubbleChat {
} else if (status == LinphoneChatMessage.State.NotDelivered) { } else if (status == LinphoneChatMessage.State.NotDelivered) {
statusView.setImageResource(R.drawable.chat_message_not_delivered); statusView.setImageResource(R.drawable.chat_message_not_delivered);
} else { } else {
statusView.setImageResource(R.drawable.chat_message_delivered); statusView.setImageResource(R.drawable.chat_message_inprogress);
} }
} }