Updated liblinphone + started import of previous database messages into the new one on update (pictures not included for now)

This commit is contained in:
Sylvain Berfini 2013-08-14 16:50:12 +02:00
parent ed3626790a
commit 4475002bcc
4 changed files with 53 additions and 2 deletions

View file

@ -114,4 +114,6 @@
<string name="pref_rfc2833_dtmf_key">pref_rfc2833_dtmf_key</string>
<string name="pref_sipinfo_dtmf_key">pref_sipinfo_dtmf_key</string>
<string name="pref_upnp_enable_key">pref_upnp_enable_key</string>
<string name="pref_first_time_linphone_chat_storage">pref_first_time_linphone_chat_storage</string>
</resources>

View file

@ -20,12 +20,16 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
import java.util.List;
import org.linphone.core.LinphoneAddress;
import org.linphone.core.LinphoneChatMessage;
import org.linphone.core.LinphoneChatRoom;
import org.linphone.core.LinphoneCoreException;
import org.linphone.core.LinphoneCoreFactory;
import org.linphone.mediastream.Log;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.preference.PreferenceManager;
import android.support.v4.app.Fragment;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
@ -113,6 +117,17 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte
public void onResume() {
super.onResume();
//Check if the is the first time we show the chat view since we use liblinphone chat storage
boolean useLinphoneStorage = getResources().getBoolean(R.bool.use_linphone_chat_storage);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(LinphoneActivity.instance());
boolean updateNeeded = prefs.getBoolean(getString(R.string.pref_first_time_linphone_chat_storage), true);
if (useLinphoneStorage && updateNeeded) {
if (importAndroidStoredMessagedIntoLibLinphoneStorage()) {
prefs.edit().putBoolean(getString(R.string.pref_first_time_linphone_chat_storage), false).commit();
LinphoneActivity.instance().getChatStorage().restartChatStorage();
}
}
if (LinphoneActivity.isInstanciated()) {
LinphoneActivity.instance().selectMenu(FragmentsAvailable.CHATLIST);
LinphoneActivity.instance().updateChatListFragment(this);
@ -200,6 +215,29 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte
}
}
private boolean importAndroidStoredMessagedIntoLibLinphoneStorage() {
//TODO import pictures
Log.w("Importing previous messages into new database...");
try {
ChatStorage db = LinphoneActivity.instance().getChatStorage();
List<String> conversations = db.getChatList();
for (int j = conversations.size() - 1; j >= 0; j--) {
String correspondent = conversations.get(j);
LinphoneChatRoom room = LinphoneManager.getLc().getOrCreateChatRoom(correspondent);
for (ChatMessage message : db.getMessages(correspondent)) {
LinphoneChatMessage msg = room.createLinphoneChatMessage(message.getMessage(), message.getUrl(), message.getStatus(), Long.parseLong(message.getTimestamp()), message.isIncoming(), message.isRead());
msg.store();
}
db.removeDiscussion(correspondent);
}
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
class ChatListAdapter extends BaseAdapter {
ChatListAdapter() {
}

View file

@ -26,12 +26,14 @@ import org.linphone.core.LinphoneChatRoom;
import android.content.ContentValues;
import android.content.Context;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Bitmap.CompressFormat;
import android.preference.PreferenceManager;
/**
* @author Sylvain Berfini
@ -55,9 +57,18 @@ public class ChatStorage {
return instance;
}
public void restartChatStorage() {
if (instance != null)
instance.close();
instance = new ChatStorage(LinphoneService.instance().getApplicationContext());
}
private ChatStorage(Context c) {
context = c;
useNativeAPI = c.getResources().getBoolean(R.bool.use_linphone_chat_storage);
boolean useLinphoneStorage = c.getResources().getBoolean(R.bool.use_linphone_chat_storage);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(LinphoneActivity.instance());
boolean updateNeeded = prefs.getBoolean(c.getString(R.string.pref_first_time_linphone_chat_storage), true);
useNativeAPI = useLinphoneStorage && !updateNeeded;
if (!useNativeAPI) {
ChatHelper chatHelper = new ChatHelper(context);

@ -1 +1 @@
Subproject commit 01d35e5b53fca8358e2b9b8dc67d47b4cca4327f
Subproject commit 90b6aa36f2982cb7cce7ebd50d9dfafd20d4274e