aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian S <christian@pix-art.de>2016-01-17 11:46:10 +0100
committerChristian S <christian@pix-art.de>2016-01-17 11:46:10 +0100
commitae60bc265191eeb31bd5e96b030059ec4bd84027 (patch)
tree50b424b30a60c7ccee8cdf68398c77630da45d59
parentebfaa84167614c7c23b0593950704a343571ee4a (diff)
parentba143a27309657ce6694b0acaf2fb34069b79313 (diff)
Merge branch 'siacs/master' into development
-rw-r--r--build.gradle2
-rw-r--r--src/main/java/eu/siacs/conversations/entities/Account.java6
-rw-r--r--src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java83
-rw-r--r--src/main/java/eu/siacs/conversations/services/XmppConnectionService.java18
-rw-r--r--src/main/java/eu/siacs/conversations/ui/ConversationActivity.java17
-rw-r--r--src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java8
6 files changed, 32 insertions, 102 deletions
diff --git a/build.gradle b/build.gradle
index df3b624cc..6218c768f 100644
--- a/build.gradle
+++ b/build.gradle
@@ -29,8 +29,8 @@ repositories {
dependencies {
compile project(':libs:MemorizingTrustManager')
+ compile 'org.sufficientlysecure:openpgp-api:10.0'
compile 'com.soundcloud.android:android-crop:1.0.1@aar'
- compile 'org.sufficientlysecure:openpgp-api:9.0'
compile 'com.android.support:support-v13:23.0.1'
compile 'org.bouncycastle:bcprov-jdk15on:1.52'
compile 'org.bouncycastle:bcmail-jdk15on:1.52'
diff --git a/src/main/java/eu/siacs/conversations/entities/Account.java b/src/main/java/eu/siacs/conversations/entities/Account.java
index 46865a6fd..4abfc801a 100644
--- a/src/main/java/eu/siacs/conversations/entities/Account.java
+++ b/src/main/java/eu/siacs/conversations/entities/Account.java
@@ -162,16 +162,12 @@ public class Account extends AbstractEntity {
private List<Bookmark> bookmarks = new CopyOnWriteArrayList<>();
private final Collection<Jid> blocklist = new CopyOnWriteArraySet<>();
- public Account() {
- this.uuid = "0";
- }
-
public Account(final Jid jid, final String password) {
this(java.util.UUID.randomUUID().toString(), jid,
password, 0, null, "", null, null, null, 5222);
}
- public Account(final String uuid, final Jid jid,
+ private Account(final String uuid, final Jid jid,
final String password, final int options, final String rosterVersion, final String keys,
final String avatar, String displayName, String hostname, int port) {
this.uuid = uuid;
diff --git a/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java b/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java
index d6e580dff..77c16f25b 100644
--- a/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java
+++ b/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java
@@ -379,22 +379,6 @@ public class DatabaseBackend extends SQLiteOpenHelper {
db.insert(Account.TABLENAME, null, account.getContentValues());
}
- public void createContact(Contact contact) {
- SQLiteDatabase db = this.getWritableDatabase();
- db.insert(Contact.TABLENAME, null, contact.getContentValues());
- }
-
- public int getConversationCount() {
- SQLiteDatabase db = this.getReadableDatabase();
- Cursor cursor = db.rawQuery("select count(uuid) as count from "
- + Conversation.TABLENAME + " where " + Conversation.STATUS
- + "=" + Conversation.STATUS_AVAILABLE, null);
- cursor.moveToFirst();
- int count = cursor.getInt(0);
- cursor.close();
- return count;
- }
-
public CopyOnWriteArrayList<Conversation> getConversations(int status) {
CopyOnWriteArrayList<Conversation> list = new CopyOnWriteArrayList<>();
SQLiteDatabase db = this.getReadableDatabase();
@@ -593,12 +577,6 @@ public class DatabaseBackend extends SQLiteOpenHelper {
updateAccount(account);
}
- public void deleteMessage(Message message) {
- SQLiteDatabase db = this.getWritableDatabase();
- String[] args = {message.getUuid()};
- db.delete(Message.TABLENAME, Message.UUID + "=?", args);
- }
-
public void deleteMessagesInConversation(Conversation conversation) {
SQLiteDatabase db = this.getWritableDatabase();
String[] args = {conversation.getUuid()};
@@ -622,67 +600,6 @@ public class DatabaseBackend extends SQLiteOpenHelper {
}
}
- public Conversation findConversationByUuid(String conversationUuid) {
- SQLiteDatabase db = this.getReadableDatabase();
- String[] selectionArgs = {conversationUuid};
- Cursor cursor = db.query(Conversation.TABLENAME, null,
- Conversation.UUID + "=?", selectionArgs, null, null, null);
- if (cursor.getCount() == 0) {
- return null;
- }
- cursor.moveToFirst();
- Conversation conversation = Conversation.fromCursor(cursor);
- cursor.close();
- return conversation;
- }
-
- public Message findMessageByUuid(String messageUuid) {
- SQLiteDatabase db = this.getReadableDatabase();
- String[] selectionArgs = {messageUuid};
- Cursor cursor = db.query(Message.TABLENAME, null, Message.UUID + "=?",
- selectionArgs, null, null, null);
- if (cursor.getCount() == 0) {
- return null;
- }
- cursor.moveToFirst();
- Message message = Message.fromCursor(cursor);
- cursor.close();
- return message;
- }
-
- public Account findAccountByUuid(String accountUuid) {
- SQLiteDatabase db = this.getReadableDatabase();
- String[] selectionArgs = {accountUuid};
- Cursor cursor = db.query(Account.TABLENAME, null, Account.UUID + "=?",
- selectionArgs, null, null, null);
- if (cursor.getCount() == 0) {
- return null;
- }
- cursor.moveToFirst();
- Account account = Account.fromCursor(cursor);
- cursor.close();
- return account;
- }
-
- public List<Message> getImageMessages(Conversation conversation) {
- ArrayList<Message> list = new ArrayList<>();
- SQLiteDatabase db = this.getReadableDatabase();
- Cursor cursor;
- String[] selectionArgs = {conversation.getUuid(), String.valueOf(Message.TYPE_IMAGE)};
- cursor = db.query(Message.TABLENAME, null, Message.CONVERSATION
- + "=? AND " + Message.TYPE + "=?", selectionArgs, null, null, null);
- if (cursor.getCount() > 0) {
- cursor.moveToLast();
- do {
- Message message = Message.fromCursor(cursor);
- message.setConversation(conversation);
- list.add(message);
- } while (cursor.moveToPrevious());
- }
- cursor.close();
- return list;
- }
-
private Cursor getCursorForSession(Account account, AxolotlAddress contact) {
final SQLiteDatabase db = this.getReadableDatabase();
String[] columns = null;
diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java
index 6e3e626a5..a295b2cee 100644
--- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java
+++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java
@@ -2451,11 +2451,14 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa
private void reconnectAccount(final Account account, final boolean force, final boolean interactive) {
synchronized (account) {
- if (account.getXmppConnection() != null) {
+ XmppConnection connection = account.getXmppConnection();
+ if (connection != null) {
disconnect(account, force);
+ } else {
+ connection = createConnection(account);
+ account.setXmppConnection(connection);
}
if (!account.isOptionSet(Account.OPTION_DISABLED)) {
-
synchronized (this.mInProgressAvatarFetches) {
for (Iterator<String> iterator = this.mInProgressAvatarFetches.iterator(); iterator.hasNext(); ) {
final String KEY = iterator.next();
@@ -2464,10 +2467,7 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa
}
}
}
-
- if (account.getXmppConnection() == null) {
- account.setXmppConnection(createConnection(account));
- } else if (!force) {
+ if (!force) {
try {
Log.d(Config.LOGTAG, "wait for disconnect");
Thread.sleep(500); //sleep wait for disconnect
@@ -2475,13 +2475,13 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa
//ignored
}
}
- Thread thread = new Thread(account.getXmppConnection());
- account.getXmppConnection().setInteractive(interactive);
+ Thread thread = new Thread(connection);
+ connection.setInteractive(interactive);
thread.start();
scheduleWakeUpCall(Config.CONNECT_DISCO_TIMEOUT, account.getUuid().hashCode());
} else {
account.getRoster().clearPresences();
- account.setXmppConnection(null);
+ connection.resetEverything();
}
}
}
diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java b/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java
index 8fb5680d2..f9044fcf5 100644
--- a/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java
+++ b/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java
@@ -155,8 +155,7 @@ public class ConversationActivity extends XmppActivity
public boolean isConversationsOverviewHideable() {
if (mContentView instanceof SlidingPaneLayout) {
- SlidingPaneLayout mSlidingPaneLayout = (SlidingPaneLayout) mContentView;
- return mSlidingPaneLayout.isSlideable();
+ return true;
} else {
return false;
}
@@ -1210,6 +1209,7 @@ public class ConversationActivity extends XmppActivity
} else {
if (isConversationsOverviewHideable()) {
openConversation();
+ updateActionBarTitle(true);
}
}
this.mConversationFragment.reInit(getSelectedConversation());
@@ -1333,9 +1333,12 @@ public class ConversationActivity extends XmppActivity
if (requestCode == REQUEST_DECRYPT_PGP) {
mConversationFragment.onActivityResult(requestCode, resultCode, data);
} else if (requestCode == REQUEST_CHOOSE_PGP_ID) {
+ // the user chose OpenPGP for encryption and selected his key in the PGP provider
if (xmppConnectionServiceBound) {
if (data.getExtras().containsKey(OpenPgpApi.EXTRA_SIGN_KEY_ID)) {
+ // associate selected PGP keyId with the account
mSelectedConversation.getAccount().setPgpSignId(data.getExtras().getLong(OpenPgpApi.EXTRA_SIGN_KEY_ID));
+ // we need to announce the key as described in XEP-027
announcePgp(mSelectedConversation.getAccount(), null);
} else {
choosePgpSignId(mSelectedConversation.getAccount());
@@ -1346,7 +1349,7 @@ public class ConversationActivity extends XmppActivity
}
} else if (requestCode == REQUEST_ANNOUNCE_PGP) {
if (xmppConnectionServiceBound) {
- announcePgp(mSelectedConversation.getAccount(), null);
+ announcePgp(mSelectedConversation.getAccount(), mSelectedConversation);
this.mPostponedActivityResult = null;
} else {
this.mPostponedActivityResult = new Pair<>(requestCode, data);
@@ -1390,7 +1393,13 @@ public class ConversationActivity extends XmppActivity
}
} else if (requestCode == REQUEST_TRUST_KEYS_TEXT || requestCode == REQUEST_TRUST_KEYS_MENU) {
this.forbidProcessingPendings = !xmppConnectionServiceBound;
- mConversationFragment.onActivityResult(requestCode, resultCode, data);
+ if (xmppConnectionServiceBound) {
+ mConversationFragment.onActivityResult(requestCode, resultCode, data);
+ this.mPostponedActivityResult = null;
+ } else {
+ this.mPostponedActivityResult = new Pair<>(requestCode, data);
+ }
+
}
} else {
mPendingImageUris.clear();
diff --git a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java
index cf3962776..ec751e9ca 100644
--- a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java
+++ b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java
@@ -875,6 +875,14 @@ public class XmppConnection implements Runnable {
+ instructions);
}
+ public void resetEverything() {
+ resetStreamId();
+ clearIqCallbacks();
+ synchronized (this.disco) {
+ disco.clear();
+ }
+ }
+
private void sendBindRequest() {
while(!mXmppConnectionService.areMessagesInitialized() && socket != null && !socket.isClosed()) {
try {