diff options
Diffstat (limited to 'src/main/java/eu/siacs/conversations')
11 files changed, 89 insertions, 49 deletions
diff --git a/src/main/java/eu/siacs/conversations/Config.java b/src/main/java/eu/siacs/conversations/Config.java index 5b3b2f9df..eebeb54f1 100644 --- a/src/main/java/eu/siacs/conversations/Config.java +++ b/src/main/java/eu/siacs/conversations/Config.java @@ -87,7 +87,7 @@ public final class Config { public static final boolean DISABLE_HTTP_UPLOAD = false; public static final boolean DISABLE_STRING_PREP = false; // setting to true might increase startup performance public static final boolean EXTENDED_SM_LOGGING = false; // log stanza counts - public static final boolean BACKGROUND_STANZA_LOGGING = true; + public static final boolean BACKGROUND_STANZA_LOGGING = false; public static final boolean RESET_ATTEMPT_COUNT_ON_NETWORK_CHANGE = true; //setting to true might increase power consumption public static final boolean ENCRYPT_ON_HTTP_UPLOADED = false; diff --git a/src/main/java/eu/siacs/conversations/entities/Conversation.java b/src/main/java/eu/siacs/conversations/entities/Conversation.java index e29ebb52c..518152356 100644 --- a/src/main/java/eu/siacs/conversations/entities/Conversation.java +++ b/src/main/java/eu/siacs/conversations/entities/Conversation.java @@ -97,6 +97,21 @@ public class Conversation extends AbstractEntity implements Blockable { this.messagesLeftOnServer = value; } + + public Message getFirstUnreadMessage() { + Message first = null; + synchronized (this.messages) { + for (int i = messages.size() - 1; i >= 0; --i) { + if (messages.get(i).isRead()) { + return first; + } else { + first = messages.get(i); + } + } + } + return first; + } + public Message findUnsentMessageWithUuid(String uuid) { synchronized(this.messages) { for (final Message message : this.messages) { diff --git a/src/main/java/eu/siacs/conversations/parser/MessageParser.java b/src/main/java/eu/siacs/conversations/parser/MessageParser.java index cd1c55986..aac8ee45a 100644 --- a/src/main/java/eu/siacs/conversations/parser/MessageParser.java +++ b/src/main/java/eu/siacs/conversations/parser/MessageParser.java @@ -574,6 +574,9 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece +conversation.getJid().toBareJid()); if (!user.realJidMatchesAccount()) { conversation.getMucOptions().addUser(user); + mXmppConnectionService.getAvatarService().clear(conversation); + mXmppConnectionService.updateMucRosterUi(); + mXmppConnectionService.updateConversationUi(); } } } diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index 5d1f87fb6..942ce2cc2 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -1903,6 +1903,9 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa MucOptions.User user = AbstractParser.parseItem(conversation,child); if (!user.realJidMatchesAccount()) { conversation.getMucOptions().addUser(user); + getAvatarService().clear(conversation); + updateMucRosterUi(); + updateConversationUi(); } } } diff --git a/src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java b/src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java index ee6d9417c..808f6e7f9 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java @@ -253,6 +253,7 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers @Override public void onClick(View v) { quickEdit(mConversation.getMucOptions().getActualNick(), + 0, new OnValueEdited() { @Override @@ -279,7 +280,9 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers break; case R.id.action_edit_subject: if (mConversation != null) { - quickEdit(mConversation.getName(),this.onSubjectEdited); + quickEdit(mConversation.getMucOptions().getSubject(), + R.string.action_edit_subject, + this.onSubjectEdited); } break; case R.id.action_share: diff --git a/src/main/java/eu/siacs/conversations/ui/ContactDetailsActivity.java b/src/main/java/eu/siacs/conversations/ui/ContactDetailsActivity.java index ce2de75a5..8fa0c6296 100644 --- a/src/main/java/eu/siacs/conversations/ui/ContactDetailsActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/ContactDetailsActivity.java @@ -259,7 +259,7 @@ public class ContactDetailsActivity extends XmppActivity implements OnAccountUpd break; case R.id.action_edit_contact: if (contact.getSystemAccount() == null) { - quickEdit(contact.getDisplayName(), new OnValueEdited() { + quickEdit(contact.getDisplayName(), 0, new OnValueEdited() { @Override public void onValueEdited(String value) { diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java index 04c3d82df..014fedd39 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java @@ -123,27 +123,6 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa } - private int getIndexOf(String uuid, List<Message> messages) { - if (uuid == null) { - return messages.size() - 1; - } - for(int i = 0; i < messages.size(); ++i) { - if (uuid.equals(messages.get(i).getUuid())) { - return i; - } else { - Message next = messages.get(i); - while(next != null && next.wasMergedIntoPrevious()) { - if (uuid.equals(next.getUuid())) { - return i; - } - next = next.next(); - } - - } - } - return 0; - } - @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { @@ -212,6 +191,28 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa } } }; + + private int getIndexOf(String uuid, List<Message> messages) { + if (uuid == null) { + return messages.size() - 1; + } + for(int i = 0; i < messages.size(); ++i) { + if (uuid.equals(messages.get(i).getUuid())) { + return i; + } else { + Message next = messages.get(i); + while(next != null && next.wasMergedIntoPrevious()) { + if (uuid.equals(next.getUuid())) { + return i; + } + next = next.next(); + } + + } + } + return 0; + } + private final int KEYCHAIN_UNLOCK_NOT_REQUIRED = 0; private final int KEYCHAIN_UNLOCK_REQUIRED = 1; private final int KEYCHAIN_UNLOCK_PENDING = 2; @@ -807,9 +808,15 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa this.messagesView.setAdapter(messageListAdapter); updateMessages(); this.messagesLoaded = true; - int size = this.messageList.size(); - if (size > 0) { - messagesView.setSelection(size - 1); + synchronized (this.messageList) { + final Message first = conversation.getFirstUnreadMessage(); + final int pos; + if (first == null) { + pos = Math.max(0,this.messageList.size() - 1); + } else { + pos = getIndexOf(first.getUuid(), this.messageList); + } + messagesView.setSelection(pos); } } diff --git a/src/main/java/eu/siacs/conversations/ui/XmppActivity.java b/src/main/java/eu/siacs/conversations/ui/XmppActivity.java index 0618fd460..d582ba592 100644 --- a/src/main/java/eu/siacs/conversations/ui/XmppActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/XmppActivity.java @@ -670,18 +670,19 @@ public abstract class XmppActivity extends Activity { builder.create().show(); } - protected void quickEdit(String previousValue, OnValueEdited callback) { - quickEdit(previousValue, callback, false); + protected void quickEdit(String previousValue, int hint, OnValueEdited callback) { + quickEdit(previousValue, callback, hint, false); } - protected void quickPasswordEdit(String previousValue, - OnValueEdited callback) { - quickEdit(previousValue, callback, true); + protected void quickPasswordEdit(String previousValue, OnValueEdited callback) { + quickEdit(previousValue, callback, R.string.password, true); } @SuppressLint("InflateParams") private void quickEdit(final String previousValue, - final OnValueEdited callback, boolean password) { + final OnValueEdited callback, + final int hint, + boolean password) { AlertDialog.Builder builder = new AlertDialog.Builder(this); View view = getLayoutInflater().inflate(R.layout.quickedit, null); final EditText editor = (EditText) view.findViewById(R.id.editor); @@ -690,7 +691,7 @@ public abstract class XmppActivity extends Activity { @Override public void onClick(DialogInterface dialog, int which) { String value = editor.getText().toString(); - if (!previousValue.equals(value) && value.trim().length() > 0) { + if (!value.equals(previousValue) && value.trim().length() > 0) { callback.onValueEdited(value); } } @@ -698,13 +699,18 @@ public abstract class XmppActivity extends Activity { if (password) { editor.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); - editor.setHint(R.string.password); builder.setPositiveButton(R.string.accept, mClickListener); } else { builder.setPositiveButton(R.string.edit, mClickListener); } + if (hint != 0) { + editor.setHint(hint); + } editor.requestFocus(); - editor.setText(previousValue); + editor.setText(""); + if (previousValue != null) { + editor.getText().append(previousValue); + } builder.setView(view); builder.setNegativeButton(R.string.cancel, null); builder.create().show(); diff --git a/src/main/java/eu/siacs/conversations/utils/DNSHelper.java b/src/main/java/eu/siacs/conversations/utils/DNSHelper.java index 2f588f492..ac64cf2e8 100644 --- a/src/main/java/eu/siacs/conversations/utils/DNSHelper.java +++ b/src/main/java/eu/siacs/conversations/utils/DNSHelper.java @@ -47,7 +47,10 @@ public class DNSHelper { protected static Client client = new Client(); + protected static Context context; + public static Bundle getSRVRecord(final Jid jid, Context context) throws IOException { + DNSHelper.context = context; final String host = jid.getDomainpart(); final List<InetAddress> servers = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ? getDnsServers(context) : getDnsServersPreLollipop(); Bundle b = new Bundle(); diff --git a/src/main/java/eu/siacs/conversations/utils/ExceptionHandler.java b/src/main/java/eu/siacs/conversations/utils/ExceptionHandler.java index 4e3ec2366..efc83bcb2 100644 --- a/src/main/java/eu/siacs/conversations/utils/ExceptionHandler.java +++ b/src/main/java/eu/siacs/conversations/utils/ExceptionHandler.java @@ -27,19 +27,7 @@ public class ExceptionHandler implements UncaughtExceptionHandler { ex.printStackTrace(printWriter); String stacktrace = result.toString(); printWriter.close(); - try { - OutputStream os = context.openFileOutput("stacktrace.txt", - Context.MODE_PRIVATE); - os.write(stacktrace.getBytes()); - os.flush(); - os.close(); - } catch (FileNotFoundException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } + ExceptionHelper.writeToStacktraceFile(context, stacktrace); this.defaultHandler.uncaughtException(thread, ex); } diff --git a/src/main/java/eu/siacs/conversations/utils/ExceptionHelper.java b/src/main/java/eu/siacs/conversations/utils/ExceptionHelper.java index e9f67cf0b..12140bde3 100644 --- a/src/main/java/eu/siacs/conversations/utils/ExceptionHelper.java +++ b/src/main/java/eu/siacs/conversations/utils/ExceptionHelper.java @@ -14,8 +14,10 @@ import android.util.Log; import java.io.BufferedReader; import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; +import java.io.OutputStream; import java.util.List; import eu.siacs.conversations.Config; @@ -119,4 +121,14 @@ public class ExceptionHelper { return false; } } + + public static void writeToStacktraceFile(Context context, String msg) { + try { + OutputStream os = context.openFileOutput("stacktrace.txt", Context.MODE_PRIVATE); + os.write(msg.getBytes()); + os.flush(); + os.close(); + } catch (IOException ignored) { + } + } } |