diff --git a/res/values/non_localizable_strings.xml b/res/values/non_localizable_strings.xml
index 9391b5e81..615cdf4ff 100644
--- a/res/values/non_localizable_strings.xml
+++ b/res/values/non_localizable_strings.xml
@@ -114,4 +114,6 @@
pref_rfc2833_dtmf_key
pref_sipinfo_dtmf_key
pref_upnp_enable_key
+
+ pref_first_time_linphone_chat_storage
diff --git a/src/org/linphone/ChatListFragment.java b/src/org/linphone/ChatListFragment.java
index 7a31c9182..29edb62b8 100644
--- a/src/org/linphone/ChatListFragment.java
+++ b/src/org/linphone/ChatListFragment.java
@@ -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 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() {
}
diff --git a/src/org/linphone/ChatStorage.java b/src/org/linphone/ChatStorage.java
index 3216a529a..9c5d99928 100644
--- a/src/org/linphone/ChatStorage.java
+++ b/src/org/linphone/ChatStorage.java
@@ -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
@@ -54,10 +56,19 @@ public class ChatStorage {
instance = new ChatStorage(LinphoneService.instance().getApplicationContext());
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);
diff --git a/submodules/linphone b/submodules/linphone
index 01d35e5b5..90b6aa36f 160000
--- a/submodules/linphone
+++ b/submodules/linphone
@@ -1 +1 @@
-Subproject commit 01d35e5b53fca8358e2b9b8dc67d47b4cca4327f
+Subproject commit 90b6aa36f2982cb7cce7ebd50d9dfafd20d4274e