aboutsummaryrefslogtreecommitdiffstats
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/AndroidManifest.xml39
-rw-r--r--src/main/java/eu/siacs/conversations/Config.java14
-rw-r--r--src/main/java/eu/siacs/conversations/entities/Conversation.java14
-rw-r--r--src/main/java/eu/siacs/conversations/entities/Transferable.java55
-rw-r--r--src/main/java/eu/siacs/conversations/services/AvatarService.java12
-rw-r--r--src/main/java/eu/siacs/conversations/services/CheckAppVersionService.java43
-rw-r--r--src/main/java/eu/siacs/conversations/services/NotificationService.java36
-rw-r--r--src/main/java/eu/siacs/conversations/services/UpdaterWebService.java91
-rw-r--r--src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java4
-rw-r--r--src/main/java/eu/siacs/conversations/ui/ContactDetailsActivity.java2
-rw-r--r--src/main/java/eu/siacs/conversations/ui/ConversationActivity.java72
-rw-r--r--src/main/java/eu/siacs/conversations/ui/ConversationFragment.java12
-rw-r--r--src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java8
-rw-r--r--src/main/java/eu/siacs/conversations/ui/PublishProfilePictureActivity.java4
-rw-r--r--src/main/java/eu/siacs/conversations/ui/UpdaterActivity.java258
-rw-r--r--src/main/java/eu/siacs/conversations/ui/XmppActivity.java3
-rw-r--r--src/main/java/eu/siacs/conversations/ui/adapter/AccountAdapter.java2
-rw-r--r--src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java7
-rw-r--r--src/main/java/eu/siacs/conversations/utils/ExceptionHelper.java2
-rw-r--r--src/main/java/eu/siacs/conversations/utils/GeoHelper.java14
-rw-r--r--src/main/java/eu/siacs/conversations/xmpp/OnNewKeysAvailable.java0
-rw-r--r--src/main/res/drawable-hdpi/ic_read_indicator.pngbin0 -> 379 bytes
-rw-r--r--src/main/res/drawable-mdpi/ic_read_indicator.pngbin0 -> 292 bytes
-rw-r--r--src/main/res/drawable-xhdpi/ic_read_indicator.pngbin0 -> 526 bytes
-rw-r--r--src/main/res/drawable-xxhdpi/ic_read_indicator.pngbin0 -> 928 bytes
-rw-r--r--src/main/res/drawable-xxxhdpi/ic_read_indicator.pngbin0 -> 931 bytes
-rw-r--r--src/main/res/drawable/message_border.xml15
-rw-r--r--src/main/res/layout/account_row.xml2
-rw-r--r--src/main/res/layout/activity_contact_details.xml37
-rw-r--r--src/main/res/layout/activity_edit_account.xml272
-rw-r--r--src/main/res/layout/activity_muc_details.xml364
-rw-r--r--src/main/res/layout/activity_publish_profile_picture.xml156
-rw-r--r--src/main/res/layout/activity_updater.xml15
-rw-r--r--src/main/res/layout/contact.xml7
-rw-r--r--src/main/res/layout/conversation_list_row.xml4
-rw-r--r--src/main/res/layout/message_received.xml3
-rw-r--r--src/main/res/layout/message_sent.xml18
-rw-r--r--src/main/res/layout/message_status.xml3
-rw-r--r--src/main/res/menu/conversations.xml10
-rw-r--r--src/main/res/menu/menu_updater.xml7
-rw-r--r--src/main/res/menu/muc_details_context.xml2
-rw-r--r--src/main/res/values-bg/strings.xml1
-rw-r--r--src/main/res/values-ca/strings.xml1
-rw-r--r--src/main/res/values-cs/strings.xml1
-rw-r--r--src/main/res/values-de/strings.xml32
-rw-r--r--src/main/res/values-el/strings.xml1
-rw-r--r--src/main/res/values-es/strings.xml1
-rw-r--r--src/main/res/values-eu/strings.xml1
-rw-r--r--src/main/res/values-fr/strings.xml1
-rw-r--r--src/main/res/values-id/strings.xml1
-rw-r--r--src/main/res/values-it/strings.xml1
-rw-r--r--src/main/res/values-ja/strings.xml1
-rw-r--r--src/main/res/values-ko/strings.xml1
-rw-r--r--src/main/res/values-ms/strings.xml2
-rw-r--r--src/main/res/values-nl/strings.xml1
-rw-r--r--src/main/res/values-pl/strings.xml1
-rw-r--r--src/main/res/values-pt/strings.xml1
-rw-r--r--src/main/res/values-ru/strings.xml1
-rw-r--r--src/main/res/values-sk/strings.xml1
-rw-r--r--src/main/res/values-sr/strings.xml1
-rw-r--r--src/main/res/values-sv/strings.xml1
-rw-r--r--src/main/res/values-w820dp/dimens.xml6
-rw-r--r--src/main/res/values-zh-rCN/strings.xml2
-rw-r--r--src/main/res/values/strings.xml22
-rw-r--r--src/main/res/xml/preferences.xml12
65 files changed, 1211 insertions, 490 deletions
diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml
index ec2303564..34f3e9098 100644
--- a/src/main/AndroidManifest.xml
+++ b/src/main/AndroidManifest.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
-<manifest
- package="eu.siacs.conversations"
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools">
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ package="eu.siacs.conversations" >
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
@@ -14,8 +13,9 @@
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.NFC" />
-
- <uses-permission android:name="android.permission.READ_PHONE_STATE" tools:node="remove" />
+ <uses-permission
+ android:name="android.permission.READ_PHONE_STATE"
+ tools:node="remove" />
<application
android:allowBackup="true"
@@ -30,8 +30,13 @@
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="android.intent.action.ACTION_SHUTDOWN" />
+ <action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
<action android:name="android.media.RINGER_MODE_CHANGED" />
</intent-filter>
+ <intent-filter>
+ <action android:name="android.intent.action.PACKAGE_REPLACED" />
+ <data android:scheme="package" android:path="eu.siacs.conversations" />
+ </intent-filter>
</receiver>
<activity
@@ -48,8 +53,8 @@
<activity
android:name=".ui.StartConversationActivity"
android:configChanges="orientation|screenSize"
- android:launchMode="singleTask"
- android:label="@string/title_activity_start_conversation" >
+ android:label="@string/title_activity_start_conversation"
+ android:launchMode="singleTask" >
<intent-filter>
<action android:name="android.intent.action.SENDTO" />
@@ -83,9 +88,9 @@
<activity
android:name=".ui.BlocklistActivity"
android:label="@string/title_activity_block_list" />
- <activity
- android:name=".ui.ChangePasswordActivity"
- android:label="@string/change_password_on_server" />
+ <activity
+ android:name=".ui.ChangePasswordActivity"
+ android:label="@string/change_password_on_server" />
<activity
android:name=".ui.ManageAccountActivity"
android:configChanges="orientation|screenSize"
@@ -137,11 +142,11 @@
<activity
android:name=".ui.TrustKeysActivity"
android:label="@string/trust_omemo_fingerprints"
- android:windowSoftInputMode="stateAlwaysHidden"/>
+ android:windowSoftInputMode="stateAlwaysHidden" />
<activity
android:name="de.duenndns.ssl.MemorizingActivity"
android:theme="@style/ConversationsTheme"
- tools:replace="android:theme"/>
+ tools:replace="android:theme" />
<activity
android:name=".ui.AboutActivity"
android:label="@string/title_activity_about"
@@ -150,6 +155,14 @@
android:name="android.support.PARENT_ACTIVITY"
android:value="eu.siacs.conversations.ui.SettingsActivity" />
</activity>
+ <activity
+ android:name=".ui.UpdaterActivity"
+ android:screenOrientation="portrait"
+ android:theme="@style/ConversationsTheme"
+ android:label="@string/title_activity_updater" >
+ </activity>
+ <service android:name=".services.UpdaterWebService" />
+ <service android:name=".services.CheckAppVersionService" />
<service android:name=".services.ExportLogsService" />
</application>
diff --git a/src/main/java/eu/siacs/conversations/Config.java b/src/main/java/eu/siacs/conversations/Config.java
index 14605cf09..45be9e1b0 100644
--- a/src/main/java/eu/siacs/conversations/Config.java
+++ b/src/main/java/eu/siacs/conversations/Config.java
@@ -9,11 +9,12 @@ public final class Config {
public static final String LOGTAG = "conversations";
- public static final String DOMAIN_LOCK = null; //only allow account creation for this domain
+ public static final String DOMAIN_LOCK = "pix-art.de"; //only allow account creation for this domain
public static final boolean DISALLOW_REGISTRATION_IN_UI = false; //hide the register checkbox
- public static final boolean HIDE_PGP_IN_UI = false; //some more consumer focused clients might want to disable OpenPGP
+ public static final boolean HIDE_PGP_IN_UI = true; //some more consumer focused clients might want to disable OpenPGP
+ public static final boolean HIDE_ENCRYPTION_IN_UI = false; //completely hide encryption options in menu bar
- public static final boolean LEGACY_NAMESPACE_HTTP_UPLOAD = false;
+ public static final boolean LEGACY_NAMESPACE_HTTP_UPLOAD = true; // true = 'eu:siacs:conversations:http:upload' false = 'urn:xmpp:http:upload'
public static final int PING_MAX_INTERVAL = 300;
public static final int PING_MIN_INTERVAL = 30;
@@ -23,7 +24,7 @@ public final class Config {
public static final int CARBON_GRACE_PERIOD = 90;
public static final int MINI_GRACE_PERIOD = 750;
- public static final int AVATAR_SIZE = 192;
+ public static final int AVATAR_SIZE = 640;
public static final Bitmap.CompressFormat AVATAR_FORMAT = Bitmap.CompressFormat.WEBP;
public static final int IMAGE_SIZE = 1920;
@@ -57,7 +58,10 @@ public final class Config {
public static final int MAM_MAX_MESSAGES = 500;
public static final ChatState DEFAULT_CHATSTATE = ChatState.ACTIVE;
- public static final int TYPING_TIMEOUT = 8;
+ public static final int TYPING_TIMEOUT = 5;
+
+ public static final String UPDATE_URL = "http://xmpp.pix-art.de/Conversations/update/";
+ public static final long UPDATE_CHECK_TIMER = 24 * 60 * 60; // in seconds
public static final String ENABLED_CIPHERS[] = {
"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
diff --git a/src/main/java/eu/siacs/conversations/entities/Conversation.java b/src/main/java/eu/siacs/conversations/entities/Conversation.java
index f2c4fed42..c9cfb9b35 100644
--- a/src/main/java/eu/siacs/conversations/entities/Conversation.java
+++ b/src/main/java/eu/siacs/conversations/entities/Conversation.java
@@ -20,6 +20,7 @@ import java.util.Iterator;
import java.util.List;
import eu.siacs.conversations.Config;
+import eu.siacs.conversations.R;
import eu.siacs.conversations.xmpp.chatstate.ChatState;
import eu.siacs.conversations.xmpp.jid.InvalidJidException;
import eu.siacs.conversations.xmpp.jid.Jid;
@@ -368,6 +369,19 @@ public class Conversation extends AbstractEntity implements Blockable {
return this.getContact().getDisplayName();
}
}
+
+ public String getParticipants() {
+ if (getMode() == MODE_MULTI) {
+ String generatedName = getMucOptions().createNameFromParticipants();
+ if (generatedName != null) {
+ return generatedName;
+ } else {
+ return null;
+ }
+ } else {
+ return null;
+ }
+ }
public String getAccountUuid() {
return this.accountUuid;
diff --git a/src/main/java/eu/siacs/conversations/entities/Transferable.java b/src/main/java/eu/siacs/conversations/entities/Transferable.java
index 016c81bdf..859cda658 100644
--- a/src/main/java/eu/siacs/conversations/entities/Transferable.java
+++ b/src/main/java/eu/siacs/conversations/entities/Transferable.java
@@ -2,9 +2,58 @@ package eu.siacs.conversations.entities;
public interface Transferable {
- String[] VALID_IMAGE_EXTENSIONS = {"webp", "jpeg", "jpg", "png", "jpe"};
- String[] VALID_CRYPTO_EXTENSIONS = {"pgp", "gpg", "otr"};
- String[] WELL_KNOWN_EXTENSIONS = {"pdf","m4a","mp4"};
+ String[] VALID_IMAGE_EXTENSIONS = {
+ "webp",
+ "jpeg",
+ "jpg",
+ "png",
+ "jpe",
+ "gif",
+ "tif"
+ };
+ String[] VALID_CRYPTO_EXTENSIONS = {
+ "pgp",
+ "gpg",
+ "otr"
+ };
+ String[] WELL_KNOWN_EXTENSIONS = {
+ //documents
+ "pdf",
+ "doc",
+ "docx",
+ "txt",
+ //audio
+ "m4a",
+ "m4b",
+ "mp3",
+ "mp2",
+ "wav",
+ "aac",
+ "aif",
+ "aiff",
+ "aifc",
+ "mid",
+ "midi",
+ "3gpp",
+ //video
+ "avi",
+ "mp4",
+ "mpeg",
+ "mpg",
+ "mpe",
+ "mov",
+ "3gp",
+ //applications
+ "apk",
+ //contact
+ "vcf",
+ //calendar
+ "ics",
+ //compressed
+ "zip",
+ "rar",
+
+ };
int STATUS_UNKNOWN = 0x200;
int STATUS_CHECKING = 0x201;
diff --git a/src/main/java/eu/siacs/conversations/services/AvatarService.java b/src/main/java/eu/siacs/conversations/services/AvatarService.java
index 7412eb933..e88047f67 100644
--- a/src/main/java/eu/siacs/conversations/services/AvatarService.java
+++ b/src/main/java/eu/siacs/conversations/services/AvatarService.java
@@ -44,12 +44,12 @@ public class AvatarService {
if (avatar != null || cachedOnly) {
return avatar;
}
- if (contact.getProfilePhoto() != null) {
- avatar = mXmppConnectionService.getFileBackend().cropCenterSquare(Uri.parse(contact.getProfilePhoto()), size);
- }
if (avatar == null && contact.getAvatar() != null) {
avatar = mXmppConnectionService.getFileBackend().getAvatar(contact.getAvatar(), size);
}
+ if (avatar == null && contact.getProfilePhoto() != null) {
+ avatar = mXmppConnectionService.getFileBackend().cropCenterSquare(Uri.parse(contact.getProfilePhoto()), size);
+ }
if (avatar == null) {
avatar = get(contact.getDisplayName(), size, cachedOnly);
}
@@ -265,11 +265,11 @@ public class AvatarService {
Contact contact = user.getContact();
if (contact != null) {
Uri uri = null;
- if (contact.getProfilePhoto() != null) {
- uri = Uri.parse(contact.getProfilePhoto());
- } else if (contact.getAvatar() != null) {
+ if (contact.getAvatar() != null) {
uri = mXmppConnectionService.getFileBackend().getAvatarUri(
contact.getAvatar());
+ } else if (contact.getProfilePhoto() != null) {
+ uri = Uri.parse(contact.getProfilePhoto());
}
if (uri != null) {
Bitmap bitmap = mXmppConnectionService.getFileBackend()
diff --git a/src/main/java/eu/siacs/conversations/services/CheckAppVersionService.java b/src/main/java/eu/siacs/conversations/services/CheckAppVersionService.java
new file mode 100644
index 000000000..33faeaeca
--- /dev/null
+++ b/src/main/java/eu/siacs/conversations/services/CheckAppVersionService.java
@@ -0,0 +1,43 @@
+package eu.siacs.conversations.services;
+
+import com.google.gson.JsonObject;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+public class CheckAppVersionService extends HttpServlet {
+ private static final long serialVersionUID = 1L;
+
+ public CheckAppVersionService() {
+ super();
+ }
+
+ protected void doGet(HttpServletRequest request, HttpServletResponse response)
+ throws ServletException, IOException {
+ doPost(request,response);
+ }
+
+ protected void doPost(HttpServletRequest request, HttpServletResponse response)
+ throws ServletException, IOException {
+
+ PrintWriter out = response.getWriter();
+ response.setContentType("text/html");
+
+ //send a JSON response with the app Version and file URI
+ JsonObject myObj = new JsonObject();
+ myObj.addProperty("success", false);
+ myObj.addProperty("latestVersionCode", 2);
+ myObj.addProperty("latestVersion", "1.0.0");
+ myObj.addProperty("changelog", "");
+ myObj.addProperty("appURI", "");
+ out.println(myObj.toString());
+ out.close();
+
+ }
+
+}
diff --git a/src/main/java/eu/siacs/conversations/services/NotificationService.java b/src/main/java/eu/siacs/conversations/services/NotificationService.java
index e9095020d..515e57c85 100644
--- a/src/main/java/eu/siacs/conversations/services/NotificationService.java
+++ b/src/main/java/eu/siacs/conversations/services/NotificationService.java
@@ -60,12 +60,12 @@ public class NotificationService {
public boolean notify(final Message message) {
return (message.getStatus() == Message.STATUS_RECEIVED)
- && notificationsEnabled()
- && !message.getConversation().isMuted()
- && (message.getConversation().isPnNA()
- || conferenceNotificationsEnabled()
- || wasHighlightedOrPrivate(message)
- );
+ && notificationsEnabled()
+ && !message.getConversation().isMuted()
+ && (message.getConversation().isPnNA()
+ || conferenceNotificationsEnabled()
+ || wasHighlightedOrPrivate(message)
+ );
}
public void notifyPebble(final Message message) {
@@ -179,7 +179,7 @@ public class NotificationService {
private void updateNotification(final boolean notify) {
final NotificationManager notificationManager = (NotificationManager) mXmppConnectionService
- .getSystemService(Context.NOTIFICATION_SERVICE);
+ .getSystemService(Context.NOTIFICATION_SERVICE);
final SharedPreferences preferences = mXmppConnectionService.getPreferences();
final String ringtone = preferences.getString("notification_ringtone", null);
@@ -235,7 +235,7 @@ public class NotificationService {
conversation = messages.get(0).getConversation();
final String name = conversation.getName();
style.addLine(Html.fromHtml("<b>" + name + "</b> "
- + UIHelper.getMessagePreview(mXmppConnectionService,messages.get(0)).first));
+ + UIHelper.getMessagePreview(mXmppConnectionService,messages.get(0)).first));
names.append(name);
names.append(", ");
}
@@ -275,9 +275,9 @@ public class NotificationService {
Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ?
R.drawable.ic_file_download_white_24dp : R.drawable.ic_action_download,
mXmppConnectionService.getResources().getString(R.string.download_x_file,
- UIHelper.getFileDescriptionString(mXmppConnectionService, message)),
+ UIHelper.getFileDescriptionString(mXmppConnectionService, message)),
createDownloadIntent(message)
- );
+ );
}
if ((message = getFirstLocationMessage(messages)) != null) {
mBuilder.addAction(R.drawable.ic_room_white_24dp,
@@ -290,16 +290,16 @@ public class NotificationService {
}
private void modifyForImage(final Builder builder, final Message message,
- final ArrayList<Message> messages, final boolean notify) {
+ final ArrayList<Message> messages, final boolean notify) {
try {
final Bitmap bitmap = mXmppConnectionService.getFileBackend()
- .getThumbnail(message, getPixel(288), false);
+ .getThumbnail(message, getPixel(200), false);
final ArrayList<Message> tmp = new ArrayList<>();
for (final Message msg : messages) {
if (msg.getType() == Message.TYPE_TEXT
&& msg.getTransferable() == null) {
tmp.add(msg);
- }
+ }
}
final BigPictureStyle bigPictureStyle = new NotificationCompat.BigPictureStyle();
bigPictureStyle.bigPicture(bitmap);
@@ -318,7 +318,7 @@ public class NotificationService {
}
private void modifyForTextOnly(final Builder builder,
- final ArrayList<Message> messages, final boolean notify) {
+ final ArrayList<Message> messages, final boolean notify) {
builder.setStyle(new NotificationCompat.BigTextStyle().bigText(getMergedBodies(messages)));
builder.setContentText(UIHelper.getMessagePreview(mXmppConnectionService,messages.get(0)).first);
if (notify) {
@@ -333,7 +333,7 @@ public class NotificationService {
&& message.getEncryption() != Message.ENCRYPTION_PGP
&& message.getFileParams().height > 0) {
return message;
- }
+ }
}
return null;
}
@@ -380,7 +380,7 @@ public class NotificationService {
private PendingIntent createContentIntent(final String conversationUuid, final String downloadMessageUuid) {
final TaskStackBuilder stackBuilder = TaskStackBuilder
- .create(mXmppConnectionService);
+ .create(mXmppConnectionService);
stackBuilder.addParentStack(ConversationActivity.class);
final Intent viewConversationIntent = new Intent(mXmppConnectionService,
@@ -468,7 +468,7 @@ public class NotificationService {
private int getPixel(final int dp) {
final DisplayMetrics metrics = mXmppConnectionService.getResources()
- .getDisplayMetrics();
+ .getDisplayMetrics();
return ((int) (dp * metrics.density));
}
@@ -478,7 +478,7 @@ public class NotificationService {
private boolean inMiniGracePeriod(final Account account) {
final int miniGrace = account.getStatus() == Account.State.ONLINE ? Config.MINI_GRACE_PERIOD
- : Config.MINI_GRACE_PERIOD * 2;
+ : Config.MINI_GRACE_PERIOD * 2;
return SystemClock.elapsedRealtime() < (this.mLastNotification + miniGrace);
}
diff --git a/src/main/java/eu/siacs/conversations/services/UpdaterWebService.java b/src/main/java/eu/siacs/conversations/services/UpdaterWebService.java
new file mode 100644
index 000000000..0b220f2bc
--- /dev/null
+++ b/src/main/java/eu/siacs/conversations/services/UpdaterWebService.java
@@ -0,0 +1,91 @@
+package eu.siacs.conversations.services;
+
+import android.app.IntentService;
+import android.content.Intent;
+import android.util.Log;
+
+import org.apache.http.HttpResponse;
+import org.apache.http.HttpStatus;
+import org.apache.http.StatusLine;
+import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.conn.params.ConnManagerParams;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.params.HttpConnectionParams;
+import org.apache.http.params.HttpParams;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
+import eu.siacs.conversations.Config;
+import eu.siacs.conversations.ui.UpdaterActivity.UpdateReceiver;
+
+public class UpdaterWebService extends IntentService{
+ public static final String REQUEST_STRING = "";
+ public static final String RESPONSE_MESSAGE = "";
+
+ private String URL = null;
+ public static final int REGISTRATION_TIMEOUT = 3 * 1000;
+ public static final int WAIT_TIMEOUT = 30 * 1000;
+
+ public UpdaterWebService() {
+ super("UpdaterWebService");
+ }
+
+ @Override
+ protected void onHandleIntent(Intent intent) {
+
+ String requestString = intent.getStringExtra(REQUEST_STRING);
+ Log.d(Config.LOGTAG, "AppUpdater: " + requestString);
+ String responseMessage = "";
+
+ try {
+
+ URL = requestString;
+ HttpClient httpclient = new DefaultHttpClient();
+ HttpParams params = httpclient.getParams();
+
+ HttpConnectionParams.setConnectionTimeout(params, REGISTRATION_TIMEOUT);
+ HttpConnectionParams.setSoTimeout(params, WAIT_TIMEOUT);
+ ConnManagerParams.setTimeout(params, WAIT_TIMEOUT);
+
+ HttpGet httpGet = new HttpGet(URL);
+ HttpResponse response = httpclient.execute(httpGet);
+
+ StatusLine statusLine = response.getStatusLine();
+ Log.d(Config.LOGTAG, "AppUpdater: HTTP Status Code: " + statusLine.getStatusCode());
+ if(statusLine.getStatusCode() == HttpStatus.SC_OK){
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ response.getEntity().writeTo(out);
+ out.close();
+ responseMessage = out.toString();
+ }
+
+ else{
+ Log.d(Config.LOGTAG, "AppUpdater: HTTP1:" + statusLine.getReasonPhrase());
+ response.getEntity().getContent().close();
+ throw new IOException(statusLine.getReasonPhrase());
+ }
+
+ } catch (ClientProtocolException e) {
+ Log.d(Config.LOGTAG, "AppUpdater: HTTP2:" + e);
+ responseMessage = e.getMessage();
+ } catch (IOException e) {
+ Log.d(Config.LOGTAG, "AppUpdater: HTTP3:" + e);
+ responseMessage = e.getMessage();
+ }catch (Exception e) {
+ Log.d(Config.LOGTAG, "AppUpdater: HTTP4:" + e);
+ responseMessage = e.getMessage();
+ }
+
+
+ Intent broadcastIntent = new Intent();
+ broadcastIntent.setAction(UpdateReceiver.PROCESS_RESPONSE);
+ broadcastIntent.addCategory(Intent.CATEGORY_DEFAULT);
+ broadcastIntent.putExtra(RESPONSE_MESSAGE, responseMessage);
+ sendBroadcast(broadcastIntent);
+
+ }
+
+} \ No newline at end of file
diff --git a/src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java b/src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java
index 42ce5349a..0dfeea985 100644
--- a/src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java
+++ b/src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java
@@ -528,11 +528,11 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
Bitmap bm;
Contact contact = user.getContact();
if (contact != null) {
- bm = avatarService().get(contact, getPixel(48));
+ bm = avatarService().get(contact, getPixel(56));
tvDisplayName.setText(contact.getDisplayName());
tvStatus.setText(user.getName() + " \u2022 " + getStatus(user));
} else {
- bm = avatarService().get(user.getName(), getPixel(48));
+ bm = avatarService().get(user.getName(), getPixel(56));
tvDisplayName.setText(user.getName());
tvStatus.setText(getStatus(user));
diff --git a/src/main/java/eu/siacs/conversations/ui/ContactDetailsActivity.java b/src/main/java/eu/siacs/conversations/ui/ContactDetailsActivity.java
index c21be8993..c610d2c89 100644
--- a/src/main/java/eu/siacs/conversations/ui/ContactDetailsActivity.java
+++ b/src/main/java/eu/siacs/conversations/ui/ContactDetailsActivity.java
@@ -366,7 +366,7 @@ public class ContactDetailsActivity extends XmppActivity implements OnAccountUpd
account = contact.getAccount().getJid().toBareJid().toString();
}
accountJidTv.setText(getString(R.string.using_account, account));
- badge.setImageBitmap(avatarService().get(contact, getPixel(72)));
+ badge.setImageBitmap(avatarService().get(contact, getPixel(Config.AVATAR_SIZE)));
badge.setOnClickListener(this.onBadgeClick);
keys.removeAllViews();
diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java b/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java
index 5831df56a..b3765a080 100644
--- a/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java
+++ b/src/main/java/eu/siacs/conversations/ui/ConversationActivity.java
@@ -6,10 +6,12 @@ import android.app.AlertDialog;
import android.app.FragmentTransaction;
import android.app.PendingIntent;
import android.content.ClipData;
+import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.content.IntentSender.SendIntentException;
+import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
@@ -53,6 +55,7 @@ import eu.siacs.conversations.services.XmppConnectionService.OnRosterUpdate;
import eu.siacs.conversations.ui.adapter.ConversationAdapter;
import eu.siacs.conversations.utils.ExceptionHelper;
import eu.siacs.conversations.xmpp.OnUpdateBlocklist;
+import eu.siacs.conversations.xmpp.chatstate.ChatState;
import eu.siacs.conversations.xmpp.jid.InvalidJidException;
import eu.siacs.conversations.xmpp.jid.Jid;
@@ -83,7 +86,7 @@ public class ConversationActivity extends XmppActivity
private static final String STATE_PANEL_OPEN = "state_panel_open";
private static final String STATE_PENDING_URI = "state_pending_uri";
- private String mOpenConverstaion = null;
+ private String mOpenConverstaion = null;
private boolean mPanelOpen = true;
final private List<Uri> mPendingImageUris = new ArrayList<>();
final private List<Uri> mPendingFileUris = new ArrayList<>();
@@ -170,7 +173,9 @@ public class ConversationActivity extends XmppActivity
}
}
- setContentView(R.layout.fragment_conversations_overview);
+ AppUpdate();
+
+ setContentView(R.layout.fragment_conversations_overview);
this.mConversationFragment = new ConversationFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
@@ -202,7 +207,6 @@ public class ConversationActivity extends XmppActivity
});
listView.setDismissCallback(new EnhancedListView.OnDismissCallback() {
-
@Override
public EnhancedListView.Undoable onDismiss(final EnhancedListView enhancedListView, final int position) {
@@ -267,8 +271,9 @@ public class ConversationActivity extends XmppActivity
listView.enableSwipeToDismiss();
listView.setSwipingLayout(R.id.swipeable_item);
listView.setUndoStyle(EnhancedListView.UndoStyle.SINGLE_POPUP);
- listView.setUndoHideDelay(5000);
+ listView.setUndoHideDelay(10000);
listView.setRequireTouchBeforeDismiss(false);
+ listView.setSwipeDirection(EnhancedListView.SwipeDirection.START); // swipe to left to close conversation
mContentView = findViewById(R.id.content_view_spl);
if (mContentView == null) {
@@ -309,16 +314,42 @@ public class ConversationActivity extends XmppActivity
}
}
+ protected void AppUpdate(){
+ String PREFS_NAME = "UpdateTimeStamp";
+ SharedPreferences UpdateTimeStamp = getApplicationContext().getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
+ long lastUpdateTime = UpdateTimeStamp.getLong("lastUpdateTime", 0);
+
+ Log.d(Config.LOGTAG, "AppUpdater - LastUpdateTime: " + lastUpdateTime);
+
+ if ((lastUpdateTime + (Config.UPDATE_CHECK_TIMER * 1000)) < System.currentTimeMillis()) {
+ lastUpdateTime = System.currentTimeMillis();
+ SharedPreferences.Editor editor = UpdateTimeStamp.edit();
+ editor.putLong("lastUpdateTime", lastUpdateTime);
+ editor.commit();
+
+ // run AppUpdater
+ Log.d(Config.LOGTAG, "AppUpdater - CurrentTime: " + lastUpdateTime);
+ Intent AppUpdater = new Intent(this, UpdaterActivity.class);
+ startActivity(AppUpdater);
+ Log.d(Config.LOGTAG, "AppUpdater started");
+
+ } else {
+
+ Log.d(Config.LOGTAG, "AppUpdater stopped");
+ return;
+ }
+ }
+
@Override
public void switchToConversation(Conversation conversation) {
setSelectedConversation(conversation);
runOnUiThread(new Runnable() {
- @Override
- public void run() {
- ConversationActivity.this.mConversationFragment.reInit(getSelectedConversation());
- openConversation();
- }
- });
+ @Override
+ public void run() {
+ ConversationActivity.this.mConversationFragment.reInit(getSelectedConversation());
+ openConversation();
+ }
+ });
}
private void updateActionBarTitle() {
@@ -334,13 +365,27 @@ public class ConversationActivity extends XmppActivity
ab.setHomeButtonEnabled(true);
if (conversation.getMode() == Conversation.MODE_SINGLE || useSubjectToIdentifyConference()) {
ab.setTitle(conversation.getName());
+ if (conversation.getMode() == Conversation.MODE_SINGLE) {
+ ChatState state = conversation.getIncomingChatState();
+ if (state == ChatState.COMPOSING) {
+ ab.setSubtitle(getString(R.string.is_typing));
+ } else if (state == ChatState.PAUSED) {
+ ab.setSubtitle(null);
+ } else {
+ ab.setSubtitle(null);
+ }
+ } else if (useSubjectToIdentifyConference()){
+ ab.setSubtitle(conversation.getParticipants());
+ }
} else {
ab.setTitle(conversation.getJid().toBareJid().toString());
+ ab.setSubtitle(null);
}
} else {
ab.setDisplayHomeAsUpEnabled(false);
- ab.setHomeButtonEnabled(false);
- ab.setTitle(R.string.app_name);
+ ab.setHomeButtonEnabled(false);
+ ab.setTitle(R.string.app_name);
+ ab.setSubtitle(null);
}
}
}
@@ -393,6 +438,7 @@ public class ConversationActivity extends XmppActivity
} else {
menuAdd.setVisible(!isConversationsOverviewHideable());
if (this.getSelectedConversation() != null) {
+ menuSecure.setVisible(!Config.HIDE_ENCRYPTION_IN_UI);
if (this.getSelectedConversation().getNextEncryption() != Message.ENCRYPTION_NONE) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
menuSecure.setIcon(R.drawable.ic_lock_white_24dp);
@@ -404,6 +450,7 @@ public class ConversationActivity extends XmppActivity
menuContactDetails.setVisible(false);
menuAttach.setVisible(getSelectedConversation().getAccount().httpUploadAvailable() && getSelectedConversation().getMucOptions().participating());
menuInviteContact.setVisible(getSelectedConversation().getMucOptions().canInvite());
+ menuSecure.setVisible(!Config.HIDE_ENCRYPTION_IN_UI);
menuSecure.setVisible(!Config.HIDE_PGP_IN_UI); //if pgp is hidden conferences have no choice of encryption
} else {
menuMucDetails.setVisible(false);
@@ -1021,6 +1068,7 @@ public class ConversationActivity extends XmppActivity
sendReadMarkerIfNecessary(getSelectedConversation());
}
+ AppUpdate();
}
@Override
diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java
index 64101539b..3a52cf36c 100644
--- a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java
+++ b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java
@@ -540,7 +540,7 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
shareIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
String mime = message.getMimeType();
if (mime == null) {
- mime = "image/webp";
+ mime = "image/jpeg";
}
shareIntent.setType(mime);
}
@@ -1017,18 +1017,18 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
if (conversation.getMode() == Conversation.MODE_SINGLE) {
ChatState state = conversation.getIncomingChatState();
if (state == ChatState.COMPOSING) {
- this.messageList.add(Message.createStatusMessage(conversation, getString(R.string.contact_is_typing, conversation.getName())));
+ //this.messageList.add(Message.createStatusMessage(conversation, getString(R.string.contact_is_typing, conversation.getName())));
} else if (state == ChatState.PAUSED) {
- this.messageList.add(Message.createStatusMessage(conversation, getString(R.string.contact_has_stopped_typing, conversation.getName())));
+ //this.messageList.add(Message.createStatusMessage(conversation, getString(R.string.contact_has_stopped_typing, conversation.getName())));
} else {
for (int i = this.messageList.size() - 1; i >= 0; --i) {
if (this.messageList.get(i).getStatus() == Message.STATUS_RECEIVED) {
return;
} else {
if (this.messageList.get(i).getStatus() == Message.STATUS_SEND_DISPLAYED) {
- this.messageList.add(i + 1,
- Message.createStatusMessage(conversation, getString(R.string.contact_has_read_up_to_this_point, conversation.getName())));
- return;
+// this.messageList.add(i + 1,
+// Message.createStatusMessage(conversation, getString(R.string.contact_has_read_up_to_this_point, conversation.getName())));
+// return;
}
}
}
diff --git a/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java b/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java
index d962c57ea..2ab60800d 100644
--- a/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java
+++ b/src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java
@@ -28,9 +28,9 @@ import android.widget.RelativeLayout;
import android.widget.TableLayout;
import android.widget.TextView;
import android.widget.Toast;
-
+import eu.siacs.conversations.Config;
+import org.whispersystems.libaxolotl.IdentityKey;
import java.util.Set;
-
import eu.siacs.conversations.Config;
import eu.siacs.conversations.R;
import eu.siacs.conversations.crypto.axolotl.AxolotlService;
@@ -362,7 +362,7 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate
this.mAxolotlFingerprint = (TextView) findViewById(R.id.axolotl_fingerprint);
this.mAxolotlFingerprintBox = (RelativeLayout) findViewById(R.id.axolotl_fingerprint_box);
this.mAxolotlFingerprintToClipboardButton = (ImageButton) findViewById(R.id.action_copy_axolotl_to_clipboard);
- this.mRegenerateAxolotlKeyButton = (ImageButton) findViewById(R.id.action_regenerate_axolotl_key);
+ this.mRegenerateAxolotlKeyButton = (ImageButton) findViewById(R.id.action_regenerate_omemo_key);
this.keysCard = (LinearLayout) findViewById(R.id.other_device_keys_card);
this.keys = (LinearLayout) findViewById(R.id.other_device_keys);
this.mSaveButton = (Button) findViewById(R.id.save_button);
@@ -528,7 +528,7 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate
}
if (!mInitMode) {
this.mAvatar.setVisibility(View.VISIBLE);
- this.mAvatar.setImageBitmap(avatarService().get(this.mAccount, getPixel(72)));
+ this.mAvatar.setImageBitmap(avatarService().get(this.mAccount, getPixel(Config.AVATAR_SIZE)));
}
if (this.mAccount.isOptionSet(Account.OPTION_REGISTER)) {
this.mRegisterNew.setVisibility(View.VISIBLE);
diff --git a/src/main/java/eu/siacs/conversations/ui/PublishProfilePictureActivity.java b/src/main/java/eu/siacs/conversations/ui/PublishProfilePictureActivity.java
index e01490f90..9e64a6805 100644
--- a/src/main/java/eu/siacs/conversations/ui/PublishProfilePictureActivity.java
+++ b/src/main/java/eu/siacs/conversations/ui/PublishProfilePictureActivity.java
@@ -172,7 +172,7 @@ public class PublishProfilePictureActivity extends XmppActivity {
if (this.account.getAvatar() != null
|| this.defaultUri == null) {
this.avatar.setImageBitmap(avatarService().get(account,
- getPixel(194)));
+ getPixel(Config.AVATAR_SIZE)));
if (this.defaultUri != null) {
this.avatar
.setOnLongClickListener(this.backToDefaultListener);
@@ -219,7 +219,7 @@ public class PublishProfilePictureActivity extends XmppActivity {
protected void loadImageIntoPreview(Uri uri) {
Bitmap bm = xmppConnectionService.getFileBackend().cropCenterSquare(
- uri, 384);
+ uri, Config.AVATAR_SIZE);
if (bm == null) {
disablePublishButton();
this.hintOrWarning.setTextColor(getWarningTextColor());
diff --git a/src/main/java/eu/siacs/conversations/ui/UpdaterActivity.java b/src/main/java/eu/siacs/conversations/ui/UpdaterActivity.java
new file mode 100644
index 000000000..769451007
--- /dev/null
+++ b/src/main/java/eu/siacs/conversations/ui/UpdaterActivity.java
@@ -0,0 +1,258 @@
+package eu.siacs.conversations.ui;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.DownloadManager;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Environment;
+import android.util.Log;
+import android.view.WindowManager;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.io.File;
+
+import eu.siacs.conversations.Config;
+import eu.siacs.conversations.R;
+import eu.siacs.conversations.services.UpdaterWebService;
+
+public class UpdaterActivity extends Activity {
+
+ private UpdateReceiver receiver = null;
+ private int versionCode = 0;
+ String appURI = "";
+
+
+ /*
+ // run AppUpdater
+ Log.d(Config.LOGTAG, "Start automatic AppUpdater");
+ Intent AppUpdater = new Intent(this, UpdaterActivity.class);
+ startActivity(AppUpdater);
+ */
+
+ private DownloadManager downloadManager;
+ private long downloadReference;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ //set activity
+ setContentView(R.layout.activity_updater);
+ TextView textView = (TextView) findViewById(R.id.updater);
+ textView.setText(R.string.update_info);
+
+ //Broadcast receiver for our Web Request
+ IntentFilter filter = new IntentFilter(UpdateReceiver.PROCESS_RESPONSE);
+ filter.addCategory(Intent.CATEGORY_DEFAULT);
+ receiver = new UpdateReceiver();
+ registerReceiver(receiver, filter);
+
+ //Broadcast receiver for the download manager
+ filter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE);
+ registerReceiver(downloadReceiver, filter);
+
+ //check of internet is available before making a web service request
+ if(isNetworkAvailable(this)){
+ Intent msgIntent = new Intent(this, UpdaterWebService.class);
+ msgIntent.putExtra(UpdaterWebService.REQUEST_STRING, Config.UPDATE_URL);
+
+ Toast.makeText(getApplicationContext(),
+ getText(R.string.checking_for_updates),
+ Toast.LENGTH_SHORT).show();
+ startService(msgIntent);
+ }
+ }
+
+ @Override
+ public void onDestroy() {
+ //unregister your receivers
+ this.unregisterReceiver(receiver);
+ this.unregisterReceiver(downloadReceiver);
+ super.onDestroy();
+ //enable touch events
+ getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
+ }
+
+ @Override
+ public void onSaveInstanceState(Bundle savedInstanceState) {
+ super.onSaveInstanceState(savedInstanceState);
+ }
+
+ @Override
+ public void onRestoreInstanceState(Bundle savedInstanceState) {
+ super.onRestoreInstanceState(savedInstanceState);
+ }
+
+ //check for internet connection
+ private boolean isNetworkAvailable(Context context) {
+ ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
+ if (connectivity != null) {
+ NetworkInfo[] info = connectivity.getAllNetworkInfo();
+ if (info != null) {
+ for (int i = 0; i < info.length; i++) {
+ Log.d(Config.LOGTAG, "AppUpdater: " + String.valueOf(i));
+ if (info[i].getState() == NetworkInfo.State.CONNECTED) {
+ Log.d(Config.LOGTAG, "AppUpdater: connected to update Server!");
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ //broadcast receiver to get notification when the web request finishes
+ public class UpdateReceiver extends BroadcastReceiver {
+
+ public static final String PROCESS_RESPONSE = "eu.siacs.conversations.intent.action.PROCESS_RESPONSE";
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ //disable touch events
+ getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
+ WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
+
+ String reponseMessage = intent.getStringExtra(UpdaterWebService.RESPONSE_MESSAGE);
+ Log.d(Config.LOGTAG, "AppUpdater: " + reponseMessage);
+
+ //parse the JSON response
+ JSONObject responseObj;
+ try {
+ responseObj = new JSONObject(reponseMessage);
+ boolean success = responseObj.getBoolean("success");
+ //if the reponse was successful check further
+ if(success){
+ //Overall information about the contents of a package
+ //This corresponds to all of the information collected from AndroidManifest.xml.
+ PackageInfo pInfo = null;
+ try {
+ pInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
+ }
+ catch (PackageManager.NameNotFoundException e) {
+ e.printStackTrace();
+ }
+ //get the app version Name for display
+ final String versionName = pInfo.versionName;
+ final int versionCode = pInfo.versionCode;
+ //get the latest version from the JSON string
+ int latestVersionCode = responseObj.getInt("latestVersionCode");
+ String latestVersion = responseObj.getString("latestVersion");
+ String changelog = responseObj.getString("changelog");
+ //get the lastest application URI from the JSON string
+ appURI = responseObj.getString("appURI");
+ //check if we need to upgrade?
+ if(latestVersionCode > versionCode){
+ Log.d(Config.LOGTAG, "AppUpdater: update available");
+ //delete old downloaded version files
+ File dir = new File(getExternalFilesDir(null), Environment.DIRECTORY_DOWNLOADS);
+ Log.d(Config.LOGTAG, "AppUpdater - Delete old update files in: " + dir);
+ if (dir.isDirectory())
+ {
+ String[] children = dir.list();
+ for (int i = 0; i < children.length; i++)
+ {
+ new File(dir, children[i]).delete();
+ }
+ }
+ //enable touch events
+ getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
+
+ //oh yeah we do need an upgrade, let the user know send an alert message
+ AlertDialog.Builder builder = new AlertDialog.Builder(UpdaterActivity.this);
+ builder.setCancelable(false);
+
+ String UpdateMessageInfo = getResources().getString(R.string.update_available);
+ builder.setMessage(String.format(UpdateMessageInfo, latestVersion, changelog, versionName))
+ .setPositiveButton(R.string.update, new DialogInterface.OnClickListener() {
+ //if the user agrees to upgrade
+ public void onClick(DialogInterface dialog, int id) {
+ //disable touch events
+ getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
+ WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
+ //start downloading the file using the download manager
+ downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
+ Uri Download_Uri = Uri.parse(appURI);
+ DownloadManager.Request request = new DownloadManager.Request(Download_Uri);
+ request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI);
+ request.setAllowedOverRoaming(false);
+ request.setTitle("Conversations Update");
+ request.setDestinationInExternalFilesDir(UpdaterActivity.this, Environment.DIRECTORY_DOWNLOADS, "Conversations" + versionName + ".apk");
+ downloadReference = downloadManager.enqueue(request);
+ Toast.makeText(getApplicationContext(),
+ getText(R.string.download_started),
+ Toast.LENGTH_LONG).show();
+ }
+ })
+ .setNegativeButton(R.string.remind_later, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ // User cancelled the dialog
+ UpdaterActivity.this.finish();
+ }
+ });
+ //show the alert message
+ builder.create().show();
+ }
+ else
+ {
+ Toast.makeText(getApplicationContext(),
+ getText(R.string.no_update_available),
+ Toast.LENGTH_SHORT).show();
+ Log.d(Config.LOGTAG, "AppUpdater: no update available");
+ UpdaterActivity.this.finish();
+ }
+
+ } else {
+ Toast.makeText(getApplicationContext(),
+ getText(R.string.failed),
+ Toast.LENGTH_LONG).show();
+ Log.d(Config.LOGTAG, "AppUpdater: contact to server not successfull");
+ UpdaterActivity.this.finish();
+ }
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
+
+ }
+
+ }
+
+ //broadcast receiver to get notification about ongoing downloads
+ private BroadcastReceiver downloadReceiver = new BroadcastReceiver() {
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ //check if the broadcast message is for our Enqueued download
+ long referenceId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
+ if(downloadReference == referenceId){
+
+ Log.d(Config.LOGTAG, "AppUpdater: Downloading of the new app version complete. Starting installation");
+ //start the installation of the latest version
+ Intent installIntent = new Intent(Intent.ACTION_VIEW);
+ installIntent.setDataAndType(downloadManager.getUriForDownloadedFile(downloadReference),
+ "application/vnd.android.package-archive");
+ installIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ startActivity(installIntent);
+ UpdaterActivity.this.finish();
+ }
+ }
+ };
+
+ //disable back button
+ @Override
+ public void onBackPressed() {
+ }
+}
diff --git a/src/main/java/eu/siacs/conversations/ui/XmppActivity.java b/src/main/java/eu/siacs/conversations/ui/XmppActivity.java
index 0cdae2cdc..de4d261c5 100644
--- a/src/main/java/eu/siacs/conversations/ui/XmppActivity.java
+++ b/src/main/java/eu/siacs/conversations/ui/XmppActivity.java
@@ -334,6 +334,9 @@ public abstract class XmppActivity extends Activity {
case R.id.action_settings:
startActivity(new Intent(this, SettingsActivity.class));
break;
+ case R.id.action_check_updates:
+ startActivity(new Intent(this, UpdaterActivity.class));
+ break;
case R.id.action_accounts:
startActivity(new Intent(this, ManageAccountActivity.class));
break;
diff --git a/src/main/java/eu/siacs/conversations/ui/adapter/AccountAdapter.java b/src/main/java/eu/siacs/conversations/ui/adapter/AccountAdapter.java
index 98250af94..c1b9cbdf6 100644
--- a/src/main/java/eu/siacs/conversations/ui/adapter/AccountAdapter.java
+++ b/src/main/java/eu/siacs/conversations/ui/adapter/AccountAdapter.java
@@ -43,7 +43,7 @@ public class AccountAdapter extends ArrayAdapter<Account> {
}
TextView statusView = (TextView) view.findViewById(R.id.account_status);
ImageView imageView = (ImageView) view.findViewById(R.id.account_image);
- imageView.setImageBitmap(activity.avatarService().get(account, activity.getPixel(48)));
+ imageView.setImageBitmap(activity.avatarService().get(account, activity.getPixel(56)));
statusView.setText(getContext().getString(account.getStatus().getReadableId()));
switch (account.getStatus()) {
case ONLINE:
diff --git a/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java b/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java
index a31adf187..99af14cd8 100644
--- a/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java
+++ b/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java
@@ -113,6 +113,7 @@ public class MessageAdapter extends ArrayAdapter<Message> {
boolean error = false;
if (viewHolder.indicatorReceived != null) {
viewHolder.indicatorReceived.setVisibility(View.GONE);
+ viewHolder.indicatorRead.setVisibility(View.GONE);
}
boolean multiReceived = message.getConversation().getMode() == Conversation.MODE_MULTI
&& message.getMergedStatus() <= Message.STATUS_RECEIVED;
@@ -150,6 +151,7 @@ public class MessageAdapter extends ArrayAdapter<Message> {
case Message.STATUS_SEND_DISPLAYED:
if (mIndicateReceived) {
viewHolder.indicatorReceived.setVisibility(View.VISIBLE);
+ viewHolder.indicatorRead.setVisibility(View.VISIBLE);
}
break;
case Message.STATUS_SEND_FAILED:
@@ -388,7 +390,7 @@ public class MessageAdapter extends ArrayAdapter<Message> {
viewHolder.messageBody.setVisibility(View.GONE);
viewHolder.image.setVisibility(View.VISIBLE);
FileParams params = message.getFileParams();
- double target = metrics.density * 288;
+ double target = metrics.density * 200;
int scalledW;
int scalledH;
if (params.width <= params.height) {
@@ -442,6 +444,8 @@ public class MessageAdapter extends ArrayAdapter<Message> {
.findViewById(R.id.message_time);
viewHolder.indicatorReceived = (ImageView) view
.findViewById(R.id.indicator_received);
+ viewHolder.indicatorRead = (ImageView) view
+ .findViewById(R.id.indicator_read);
break;
case RECEIVED:
view = activity.getLayoutInflater().inflate(
@@ -658,6 +662,7 @@ public class MessageAdapter extends ArrayAdapter<Message> {
protected ImageView image;
protected ImageView indicator;
protected ImageView indicatorReceived;
+ protected ImageView indicatorRead;
protected TextView time;
protected TextView messageBody;
protected ImageView contact_picture;
diff --git a/src/main/java/eu/siacs/conversations/utils/ExceptionHelper.java b/src/main/java/eu/siacs/conversations/utils/ExceptionHelper.java
index 0f1828473..6d1d1074d 100644
--- a/src/main/java/eu/siacs/conversations/utils/ExceptionHelper.java
+++ b/src/main/java/eu/siacs/conversations/utils/ExceptionHelper.java
@@ -94,7 +94,7 @@ public class ExceptionHelper {
Conversation conversation = null;
try {
conversation = service.findOrCreateConversation(finalAccount,
- Jid.fromString("bugs@siacs.eu"), false);
+ Jid.fromString("bugs@pix-art.de"), false);
} catch (final InvalidJidException ignored) {
}
Message message = new Message(conversation, report
diff --git a/src/main/java/eu/siacs/conversations/utils/GeoHelper.java b/src/main/java/eu/siacs/conversations/utils/GeoHelper.java
index 74f91a98b..cd97e1105 100644
--- a/src/main/java/eu/siacs/conversations/utils/GeoHelper.java
+++ b/src/main/java/eu/siacs/conversations/utils/GeoHelper.java
@@ -9,6 +9,7 @@ import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import eu.siacs.conversations.entities.Contact;
import eu.siacs.conversations.entities.Conversation;
import eu.siacs.conversations.entities.Message;
@@ -40,6 +41,7 @@ public class GeoHelper {
return intents;
}
final Conversation conversation = message.getConversation();
+ final Contact contact = message.getContact();
String label;
if (conversation.getMode() == Conversation.MODE_SINGLE && message.getStatus() == Message.STATUS_RECEIVED) {
try {
@@ -62,6 +64,16 @@ public class GeoHelper {
else {
locationPluginIntent.putExtra("jid",conversation.getAccount().getJid().toString());
}
+ } else {
+ if (message.getStatus() == Message.STATUS_RECEIVED) {
+ if (contact != null) {
+ locationPluginIntent.putExtra("name",contact.getDisplayName());
+ }
+ locationPluginIntent.putExtra("jid",message.getCounterpart().toString());
+ }
+ else {
+ locationPluginIntent.putExtra("jid",conversation.getAccount().getJid().toString());
+ }
}
intents.add(locationPluginIntent);
@@ -74,4 +86,4 @@ public class GeoHelper {
intents.add(httpIntent);
return intents;
}
-}
+} \ No newline at end of file
diff --git a/src/main/java/eu/siacs/conversations/xmpp/OnNewKeysAvailable.java b/src/main/java/eu/siacs/conversations/xmpp/OnNewKeysAvailable.java
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/src/main/java/eu/siacs/conversations/xmpp/OnNewKeysAvailable.java
diff --git a/src/main/res/drawable-hdpi/ic_read_indicator.png b/src/main/res/drawable-hdpi/ic_read_indicator.png
new file mode 100644
index 000000000..21fbf4eb9
--- /dev/null
+++ b/src/main/res/drawable-hdpi/ic_read_indicator.png
Binary files differ
diff --git a/src/main/res/drawable-mdpi/ic_read_indicator.png b/src/main/res/drawable-mdpi/ic_read_indicator.png
new file mode 100644
index 000000000..4cabf6ec2
--- /dev/null
+++ b/src/main/res/drawable-mdpi/ic_read_indicator.png
Binary files differ
diff --git a/src/main/res/drawable-xhdpi/ic_read_indicator.png b/src/main/res/drawable-xhdpi/ic_read_indicator.png
new file mode 100644
index 000000000..216c33128
--- /dev/null
+++ b/src/main/res/drawable-xhdpi/ic_read_indicator.png
Binary files differ
diff --git a/src/main/res/drawable-xxhdpi/ic_read_indicator.png b/src/main/res/drawable-xxhdpi/ic_read_indicator.png
new file mode 100644
index 000000000..66caba6ae
--- /dev/null
+++ b/src/main/res/drawable-xxhdpi/ic_read_indicator.png
Binary files differ
diff --git a/src/main/res/drawable-xxxhdpi/ic_read_indicator.png b/src/main/res/drawable-xxxhdpi/ic_read_indicator.png
new file mode 100644
index 000000000..aef5c7bdc
--- /dev/null
+++ b/src/main/res/drawable-xxxhdpi/ic_read_indicator.png
Binary files differ
diff --git a/src/main/res/drawable/message_border.xml b/src/main/res/drawable/message_border.xml
new file mode 100644
index 000000000..990d02886
--- /dev/null
+++ b/src/main/res/drawable/message_border.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="rectangle" >
+
+ <corners android:radius="2dp" />
+
+ <padding
+ android:bottom="1.5dp"
+ android:left="1.5dp"
+ android:right="1.5dp"
+ android:top="1.5dp" />
+
+ <solid android:color="@color/black12" />
+
+</shape> \ No newline at end of file
diff --git a/src/main/res/layout/account_row.xml b/src/main/res/layout/account_row.xml
index cac9a9fa6..f0d0c903d 100644
--- a/src/main/res/layout/account_row.xml
+++ b/src/main/res/layout/account_row.xml
@@ -15,6 +15,8 @@
android:layout_alignParentLeft="true"
android:src="@drawable/ic_profile"
android:contentDescription="@string/account_image_description"
+ android:background="@drawable/message_border"
+ android:padding="1dp"
app:riv_corner_radius="2dp" />
<LinearLayout
diff --git a/src/main/res/layout/activity_contact_details.xml b/src/main/res/layout/activity_contact_details.xml
index 5f6a2dd09..77fb91f2f 100644
--- a/src/main/res/layout/activity_contact_details.xml
+++ b/src/main/res/layout/activity_contact_details.xml
@@ -21,18 +21,28 @@
<QuickContactBadge
android:id="@+id/details_contact_badge"
- android:layout_width="72dp"
- android:layout_height="72dp"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:maxHeight="384dp"
+ android:maxWidth="384dp"
+ android:scaleType="centerCrop"
android:layout_alignParentTop="true"
- android:scaleType="centerCrop" />
+ android:layout_centerHorizontal="true"
+ android:background="@drawable/message_border"
+ android:padding="1dp"
+ android:adjustViewBounds="true"/>
<LinearLayout
android:id="@+id/details_jidbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginLeft="16dp"
- android:layout_toRightOf="@+id/details_contact_badge"
- android:orientation="vertical" >
+ android:orientation="vertical"
+ android:layout_below="@+id/details_contact_badge"
+ android:layout_alignParentRight="true"
+ android:layout_alignParentEnd="true"
+ android:layout_marginTop="16dp"
+ android:layout_alignParentLeft="true"
+ android:layout_alignParentStart="true">
<TextView
android:id="@+id/details_contactjid"
@@ -41,12 +51,14 @@
android:text="@string/account_settings_example_jabber_id"
android:textColor="@color/black87"
android:textSize="?attr/TextSizeHeadline"
- android:textStyle="bold" />
+ android:textStyle="bold"
+ android:layout_gravity="center_horizontal" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:orientation="vertical" >
+ android:orientation="vertical"
+ android:layout_gravity="center_horizontal">
<LinearLayout
android:id="@+id/tags"
@@ -54,7 +66,8 @@
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:layout_marginBottom="4dp"
- android:orientation="horizontal">
+ android:orientation="horizontal"
+ android:layout_gravity="center_horizontal">
</LinearLayout>
<TextView
@@ -62,7 +75,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/black54"
- android:textSize="?attr/TextSizeBody" />
+ android:textSize="?attr/TextSizeBody"
+ android:layout_gravity="center_horizontal" />
</LinearLayout>
<Button
@@ -70,7 +84,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
- android:text="@string/add_contact"/>
+ android:text="@string/add_contact"
+ android:layout_gravity="center_horizontal" />
<CheckBox
android:id="@+id/details_send_presence"
diff --git a/src/main/res/layout/activity_edit_account.xml b/src/main/res/layout/activity_edit_account.xml
index 0be934a85..bcbe7a7fb 100644
--- a/src/main/res/layout/activity_edit_account.xml
+++ b/src/main/res/layout/activity_edit_account.xml
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@color/grey200">
+ xmlns:tools="http://schemas.android.com/tools"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="@color/grey200">
<ScrollView
android:layout_width="fill_parent"
@@ -30,86 +30,92 @@
android:padding="@dimen/infocard_padding">
<com.makeramen.roundedimageview.RoundedImageView
android:id="@+id/avater"
- android:layout_width="72dp"
- android:layout_height="72dp"
- android:layout_alignParentTop="true"
- android:layout_marginRight="16dp"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:maxHeight="384dp"
+ android:maxWidth="384dp"
android:contentDescription="@string/account_image_description"
- app:riv_corner_radius="2dp"/>
+ app:riv_corner_radius="2dp"
+ android:background="@drawable/message_border"
+ android:padding="1dp"
+ android:adjustViewBounds="true"
+ android:layout_alignParentTop="true"
+ android:layout_centerHorizontal="true"
+ android:layout_marginBottom="16dp" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
- android:layout_toRightOf="@+id/avater">
- <TextView
- android:id="@+id/account_jid_label"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/account_settings_jabber_id"
- android:textColor="@color/black87"
- android:textSize="?attr/TextSizeBody" />
-
- <AutoCompleteTextView
- android:id="@+id/account_jid"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:hint="@string/account_settings_example_jabber_id"
- android:inputType="textEmailAddress"
- android:textColor="@color/black87"
- android:textColorHint="@color/black54"
- android:textSize="?attr/TextSizeBody" />
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="8dp"
- android:text="@string/account_settings_password"
- android:textColor="@color/black87"
- android:textSize="?attr/TextSizeBody" />
-
- <EditText
- android:id="@+id/account_password"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:hint="@string/password"
- android:inputType="textPassword"
- android:textColor="@color/black87"
- android:textColorHint="@color/black54"
- android:textSize="?attr/TextSizeBody" />
+ android:layout_below="@+id/avater">
+ <TextView
+ android:id="@+id/account_jid_label"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/account_settings_jabber_id"
+ android:textColor="@color/black87"
+ android:textSize="?attr/TextSizeBody" />
- <CheckBox
- android:id="@+id/account_register_new"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="8dp"
- android:text="@string/register_account"
- android:textColor="@color/black87"
- android:textSize="?attr/TextSizeBody" />
+ <AutoCompleteTextView
+ android:id="@+id/account_jid"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:hint="@string/account_settings_example_jabber_id"
+ android:inputType="textEmailAddress"
+ android:textColor="@color/black87"
+ android:textColorHint="@color/black54"
+ android:textSize="?attr/TextSizeBody" />
- <TextView
- android:id="@+id/account_confirm_password_desc"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/account_settings_confirm_password"
- android:textColor="@color/black87"
- android:textSize="?attr/TextSizeBody"
- android:visibility="gone" />
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="8dp"
+ android:text="@string/account_settings_password"
+ android:textColor="@color/black87"
+ android:textSize="?attr/TextSizeBody" />
+
+ <EditText
+ android:id="@+id/account_password"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:hint="@string/password"
+ android:inputType="textPassword"
+ android:textColor="@color/black87"
+ android:textColorHint="@color/black54"
+ android:textSize="?attr/TextSizeBody" />
+
+ <CheckBox
+ android:id="@+id/account_register_new"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="8dp"
+ android:text="@string/register_account"
+ android:textColor="@color/black87"
+ android:textSize="?attr/TextSizeBody" />
- <EditText
- android:id="@+id/account_password_confirm"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="8dp"
- android:hint="@string/confirm_password"
- android:inputType="textPassword"
- android:visibility="gone"
- android:textColor="@color/black87"
- android:textColorHint="@color/black54"
- android:textSize="?attr/TextSizeBody" />
+ <TextView
+ android:id="@+id/account_confirm_password_desc"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/account_settings_confirm_password"
+ android:textColor="@color/black87"
+ android:textSize="?attr/TextSizeBody"
+ android:visibility="gone" />
+
+ <EditText
+ android:id="@+id/account_password_confirm"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="8dp"
+ android:hint="@string/confirm_password"
+ android:inputType="textPassword"
+ android:visibility="gone"
+ android:textColor="@color/black87"
+ android:textColorHint="@color/black54"
+ android:textSize="?attr/TextSizeBody" />
</LinearLayout>
</RelativeLayout>
- <LinearLayout
+ <LinearLayout
android:id="@+id/stats"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
@@ -367,65 +373,65 @@
android:visibility="visible"
android:contentDescription="@string/copy_otr_clipboard_description"/>
</RelativeLayout>
- <RelativeLayout
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:id="@+id/axolotl_fingerprint_box"
- android:layout_marginTop="32dp">
-
- <LinearLayout
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentLeft="true"
- android:layout_toLeftOf="@+id/axolotl_actions"
- android:orientation="vertical">
-
- <TextView
- android:id="@+id/axolotl_fingerprint"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textColor="@color/black87"
- android:textSize="?attr/TextSizeBody"
- android:typeface="monospace"
- android:fontFamily="monospace"/>
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textColor="@color/black54"
- android:textSize="?attr/TextSizeInfo"
- android:text="@string/this_device_omemo_fingerprint"/>
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:id="@+id/axolotl_actions"
- android:layout_centerVertical="true"
- android:layout_alignParentRight="true"
- android:orientation="vertical">
-
- <ImageButton
- android:id="@+id/action_copy_axolotl_to_clipboard"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:background="?android:selectableItemBackground"
- android:padding="@dimen/image_button_padding"
- android:src="?attr/icon_copy"
- android:visibility="visible"
- android:contentDescription="@string/copy_omemo_clipboard_description"/>
- <ImageButton
- android:id="@+id/action_regenerate_axolotl_key"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:background="?android:selectableItemBackground"
- android:padding="@dimen/image_button_padding"
- android:src="?attr/icon_refresh"
- android:visibility="gone"
- android:contentDescription="@string/regenerate_omemo_key"/>
-
- </LinearLayout>
- </RelativeLayout>
+ <RelativeLayout
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:id="@+id/axolotl_fingerprint_box"
+ android:layout_marginTop="32dp">
+
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentLeft="true"
+ android:layout_toLeftOf="@+id/axolotl_actions"
+ android:orientation="vertical">
+
+ <TextView
+ android:id="@+id/axolotl_fingerprint"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textColor="@color/black87"
+ android:textSize="?attr/TextSizeBody"
+ android:typeface="monospace"
+ android:fontFamily="monospace"/>
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textColor="@color/black54"
+ android:textSize="?attr/TextSizeInfo"
+ android:text="@string/this_device_omemo_fingerprint"/>
+ </LinearLayout>
+
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:id="@+id/axolotl_actions"
+ android:layout_centerVertical="true"
+ android:layout_alignParentRight="true"
+ android:orientation="vertical">
+
+ <ImageButton
+ android:id="@+id/action_copy_axolotl_to_clipboard"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:background="?android:selectableItemBackground"
+ android:padding="@dimen/image_button_padding"
+ android:src="?attr/icon_copy"
+ android:visibility="visible"
+ android:contentDescription="@string/copy_omemo_clipboard_description"/>
+ <ImageButton
+ android:id="@+id/action_regenerate_omemo_key"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:background="?android:selectableItemBackground"
+ android:padding="@dimen/image_button_padding"
+ android:src="?attr/icon_refresh"
+ android:visibility="gone"
+ android:contentDescription="@string/regenerate_omemo_key"/>
+
+ </LinearLayout>
+ </RelativeLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/other_device_keys_card"
diff --git a/src/main/res/layout/activity_muc_details.xml b/src/main/res/layout/activity_muc_details.xml
index 1a88424e4..3c7027ff3 100644
--- a/src/main/res/layout/activity_muc_details.xml
+++ b/src/main/res/layout/activity_muc_details.xml
@@ -1,184 +1,186 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:background="@color/grey200">
-
- <LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical">
-
- <LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_marginLeft="@dimen/activity_horizontal_margin"
- android:layout_marginRight="@dimen/activity_horizontal_margin"
- android:layout_marginTop="@dimen/activity_vertical_margin"
- android:layout_marginBottom="@dimen/activity_vertical_margin"
- android:background="@drawable/infocard_border"
- android:orientation="vertical"
- android:padding="@dimen/infocard_padding">
-
- <TextView
- android:id="@+id/muc_jabberid"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginBottom="16dp"
- android:text="@string/account_settings_example_jabber_id"
- android:textColor="@color/black87"
- android:textSize="?attr/TextSizeHeadline"
- android:textStyle="bold"/>
-
- <RelativeLayout
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_marginBottom="32dp">
-
- <com.makeramen.roundedimageview.RoundedImageView
- android:id="@+id/your_photo"
- android:layout_width="48dp"
- android:layout_height="48dp"
- android:layout_alignParentLeft="true"
- android:src="@drawable/ic_profile"
- app:riv_corner_radius="2dp" />
-
- <LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_centerVertical="true"
- android:layout_toRightOf="@+id/your_photo"
- android:orientation="vertical"
- android:paddingLeft="8dp">
-
- <TextView
- android:id="@+id/muc_your_nick"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:textColor="@color/black87"
- android:textSize="?attr/TextSizeHeadline"/>
-
- <TextView
- android:id="@+id/muc_role"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:textColor="@color/black87"
- android:textSize="?attr/TextSizeBody"/>
- </LinearLayout>
-
- <ImageButton
- android:id="@+id/edit_nick_button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentRight="true"
- android:layout_centerVertical="true"
- android:background="?android:selectableItemBackground"
- android:padding="@dimen/image_button_padding"
- android:src="?attr/icon_edit_dark"/>
- </RelativeLayout>
-
- <RelativeLayout
- android:layout_width="fill_parent"
- android:layout_height="wrap_content">
- <TextView
- android:id="@+id/muc_conference_type"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/private_conference"
- android:layout_centerVertical="true"
- android:textColor="@color/black87"
- android:textSize="?attr/TextSizeBody"
- android:layout_alignParentLeft="true"
- android:layout_toLeftOf="@+id/change_conference_button"
- />
- <ImageButton
- android:id="@+id/change_conference_button"
- style="?android:attr/buttonStyleSmall"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_horizontal"
- android:layout_alignParentRight="true"
- android:layout_centerVertical="true"
- android:background="?android:selectableItemBackground"
- android:padding="@dimen/image_button_padding"
- android:src="?attr/icon_settings"/>
- </RelativeLayout>
-
- <TableLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:id="@+id/muc_info_more"
- android:stretchColumns="1"
- android:visibility="gone">
-
- <TableRow
- android:layout_width="fill_parent"
- android:layout_height="match_parent">
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/server_info_mam"
- android:textColor="@color/black87"
- android:textSize="?attr/TextSizeBody" />
-
- <TextView
- android:id="@+id/muc_info_mam"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="right"
- android:textColor="@color/black87"
- android:textSize="?attr/TextSizeBody" />
- </TableRow>
-
- </TableLayout>
-
- <TextView
- android:id="@+id/details_account"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="right"
- android:layout_marginTop="32dp"
- android:text="@string/using_account"
- android:textColor="@color/black54"
- android:textSize="?attr/TextSizeInfo"/>
- </LinearLayout>
-
- <LinearLayout
- android:id="@+id/muc_more_details"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_marginLeft="@dimen/activity_horizontal_margin"
- android:layout_marginRight="@dimen/activity_horizontal_margin"
- android:layout_marginTop="@dimen/activity_vertical_margin"
- android:layout_marginBottom="@dimen/activity_vertical_margin"
- android:background="@drawable/infocard_border"
- android:orientation="vertical"
- android:padding="@dimen/infocard_padding">
-
-
- <LinearLayout
- android:id="@+id/muc_members"
- android:layout_width="fill_parent"
- android:layout_height="0dp"
- android:layout_weight="1"
- android:divider="?android:dividerHorizontal"
- android:orientation="vertical"
- android:showDividers="middle">
- </LinearLayout>
-
- <Button
- android:id="@+id/invite"
- style="?android:attr/buttonStyleSmall"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_horizontal"
- android:layout_marginTop="24dp"
- android:text="@string/invite_contact"/>
- </LinearLayout>
-
- </LinearLayout>
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:background="@color/grey200">
+
+ <LinearLayout
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <LinearLayout
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="@dimen/activity_vertical_margin"
+ android:layout_marginLeft="@dimen/activity_horizontal_margin"
+ android:layout_marginRight="@dimen/activity_horizontal_margin"
+ android:layout_marginTop="@dimen/activity_vertical_margin"
+ android:background="@drawable/infocard_border"
+ android:orientation="vertical"
+ android:padding="@dimen/infocard_padding">
+
+ <TextView
+ android:id="@+id/muc_jabberid"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="16dp"
+ android:text="@string/account_settings_example_jabber_id"
+ android:textColor="@color/black87"
+ android:textSize="?attr/TextSizeHeadline"
+ android:textStyle="bold" />
+
+ <RelativeLayout
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="32dp">
+
+ <com.makeramen.roundedimageview.RoundedImageView
+ android:id="@+id/your_photo"
+ android:layout_width="72dp"
+ android:layout_height="72dp"
+ android:layout_alignParentEnd="false"
+ android:layout_alignParentLeft="true"
+ android:background="@drawable/message_border"
+ android:padding="1dp"
+ android:src="@drawable/ic_profile"
+ app:riv_corner_radius="2dp" />
+
+ <LinearLayout
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_centerVertical="true"
+ android:layout_toRightOf="@+id/your_photo"
+ android:orientation="vertical"
+ android:paddingLeft="8dp">
+
+ <TextView
+ android:id="@+id/muc_your_nick"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:singleLine="true"
+ android:textColor="@color/black87"
+ android:textSize="?attr/TextSizeHeadline" />
+
+ <TextView
+ android:id="@+id/muc_role"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:singleLine="true"
+ android:textColor="@color/black87"
+ android:textSize="?attr/TextSizeBody" />
+ </LinearLayout>
+
+ <ImageButton
+ android:id="@+id/edit_nick_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentRight="true"
+ android:layout_centerVertical="true"
+ android:background="?android:selectableItemBackground"
+ android:padding="@dimen/image_button_padding"
+ android:src="?attr/icon_edit_dark" />
+ </RelativeLayout>
+
+ <RelativeLayout
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content">
+
+ <TextView
+ android:id="@+id/muc_conference_type"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentLeft="true"
+ android:layout_centerVertical="true"
+ android:layout_toLeftOf="@+id/change_conference_button"
+ android:text="@string/private_conference"
+ android:textColor="@color/black87"
+ android:textSize="?attr/TextSizeBody" />
+
+ <ImageButton
+ android:id="@+id/change_conference_button"
+ style="?android:attr/buttonStyleSmall"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentRight="true"
+ android:layout_centerVertical="true"
+ android:layout_gravity="center_horizontal"
+ android:background="?android:selectableItemBackground"
+ android:padding="@dimen/image_button_padding"
+ android:src="?attr/icon_settings" />
+ </RelativeLayout>
+ <TableLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:id="@+id/muc_info_more"
+ android:stretchColumns="1"
+ android:visibility="gone">
+
+ <TableRow
+ android:layout_width="fill_parent"
+ android:layout_height="match_parent">
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/server_info_mam"
+ android:textColor="@color/black87"
+ android:textSize="?attr/TextSizeBody" />
+
+ <TextView
+ android:id="@+id/muc_info_mam"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="right"
+ android:textColor="@color/black87"
+ android:textSize="?attr/TextSizeBody" />
+ </TableRow>
+
+ </TableLayout>
+
+ <TextView
+ android:id="@+id/details_account"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="right"
+ android:layout_marginTop="32dp"
+ android:text="@string/using_account"
+ android:textColor="@color/black54"
+ android:textSize="?attr/TextSizeInfo" />
+ </LinearLayout>
+
+ <LinearLayout
+ android:id="@+id/muc_more_details"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="@dimen/activity_vertical_margin"
+ android:layout_marginLeft="@dimen/activity_horizontal_margin"
+ android:layout_marginRight="@dimen/activity_horizontal_margin"
+ android:layout_marginTop="@dimen/activity_vertical_margin"
+ android:background="@drawable/infocard_border"
+ android:orientation="vertical"
+ android:padding="@dimen/infocard_padding">
+
+
+ <LinearLayout
+ android:id="@+id/muc_members"
+ android:layout_width="fill_parent"
+ android:layout_height="0dp"
+ android:layout_weight="1"
+ android:divider="?android:dividerHorizontal"
+ android:orientation="vertical"
+ android:showDividers="middle"></LinearLayout>
+
+ <Button
+ android:id="@+id/invite"
+ style="?android:attr/buttonStyleSmall"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:layout_marginTop="24dp"
+ android:text="@string/invite_contact" />
+ </LinearLayout>
+
+ </LinearLayout>
</ScrollView> \ No newline at end of file
diff --git a/src/main/res/layout/activity_publish_profile_picture.xml b/src/main/res/layout/activity_publish_profile_picture.xml
index 3b249a665..e5113dab9 100644
--- a/src/main/res/layout/activity_publish_profile_picture.xml
+++ b/src/main/res/layout/activity_publish_profile_picture.xml
@@ -1,43 +1,107 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:background="@color/grey50" >
-
+ android:background="@color/grey200">
+ <ScrollView
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_above="@+id/button_bar"
+ android:layout_alignParentTop="true" >
<LinearLayout
- android:id="@+id/account_image_wrapper"
- android:layout_width="wrap_content"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_alignParentTop="true"
- android:layout_centerHorizontal="true"
- android:layout_marginBottom="8dp"
- android:layout_marginTop="24dp"
- android:background="@drawable/account_image_border" >
-
- <ImageView
- android:id="@+id/account_image"
- android:layout_width="194dp"
- android:layout_height="194dp" />
- </LinearLayout>
+ android:orientation="vertical"
+ android:gravity="center_horizontal">
- <TextView
- android:id="@+id/hint"
- android:layout_width="wrap_content"
+ <LinearLayout
+ android:layout_width="fill_parent"
android:layout_height="wrap_content"
- android:layout_below="@id/account_image_wrapper"
- android:layout_centerHorizontal="true"
- android:text="@string/touch_to_choose_picture"
- android:textColor="@color/black54" />
+ android:layout_above="@+id/button_bar"
+ android:layout_alignParentLeft="true"
+ android:layout_alignParentRight="true"
+ android:layout_below="@+id/secondary_hint"
+ android:gravity="center_vertical"
+ android:orientation="vertical"
+ android:paddingLeft="8dp"
+ android:paddingRight="8dp"
+ android:layout_marginRight="@dimen/activity_horizontal_margin"
+ android:layout_marginLeft="@dimen/activity_horizontal_margin"
+ android:layout_marginTop="@dimen/activity_vertical_margin"
+ android:layout_marginBottom="@dimen/activity_vertical_margin"
+ android:background="@drawable/infocard_border">
- <TextView
- android:id="@+id/secondary_hint"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_below="@id/hint"
- android:layout_centerHorizontal="true"
- android:text="@string/or_long_press_for_default"
- android:textColor="@color/black54" />
+ <LinearLayout
+ android:id="@+id/account_image_wrapper"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentTop="true"
+ android:layout_centerHorizontal="true"
+ android:layout_marginBottom="8dp"
+ android:layout_marginTop="24dp"
+ android:background="@drawable/account_image_border"
+ android:layout_gravity="center_horizontal">
+
+ <ImageView
+ android:id="@+id/account_image"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:maxHeight="384dp"
+ android:maxWidth="384dp"
+ android:adjustViewBounds="true"
+ android:padding="1dp"
+ android:background="@drawable/message_border" />
+ </LinearLayout>
+
+ <TextView
+ android:id="@+id/hint"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_below="@id/account_image_wrapper"
+ android:layout_centerHorizontal="true"
+ android:text="@string/touch_to_choose_picture"
+ android:textColor="@color/black54"
+ android:layout_marginLeft="@dimen/activity_horizontal_margin"
+ android:layout_marginRight="@dimen/activity_horizontal_margin"
+ android:layout_marginTop="@dimen/activity_vertical_margin"
+ android:layout_marginBottom="@dimen/activity_vertical_margin"
+ android:layout_gravity="center_horizontal" />
+
+ <TextView
+ android:id="@+id/secondary_hint"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_below="@id/hint"
+ android:layout_centerHorizontal="true"
+ android:text="@string/or_long_press_for_default"
+ android:textColor="@color/black54"
+ android:layout_marginBottom="@dimen/activity_vertical_margin"
+ android:layout_marginTop="@dimen/activity_vertical_margin"
+ android:layout_marginLeft="@dimen/activity_horizontal_margin"
+ android:layout_marginRight="@dimen/activity_horizontal_margin"
+ android:layout_gravity="center_horizontal" />
+
+ <TextView
+ android:id="@+id/account"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textColor="@color/black87"
+ android:textSize="?attr/TextSizeHeadline" />
+ <TextView
+ android:id="@+id/hint_or_warning"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="8dp"
+ android:minLines="3"
+ android:text="@string/publish_avatar_explanation"
+ android:textColor="@color/black87"
+ android:textSize="?attr/TextSizeBody" />
+ </LinearLayout>
+</LinearLayout>
+ </ScrollView>
<LinearLayout
android:id="@+id/button_bar"
android:layout_width="wrap_content"
@@ -73,34 +137,4 @@
android:textColor="@color/black54" />
</LinearLayout>
- <LinearLayout
- android:layout_width="wrap_content"
- android:layout_height="fill_parent"
- android:layout_above="@+id/button_bar"
- android:layout_alignParentLeft="true"
- android:layout_alignParentRight="true"
- android:layout_below="@+id/secondary_hint"
- android:gravity="center_vertical"
- android:orientation="vertical"
- android:paddingLeft="8dp"
- android:paddingRight="8dp" >
-
- <TextView
- android:id="@+id/account"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textColor="@color/black87"
- android:textSize="?attr/TextSizeHeadline" />
-
- <TextView
- android:id="@+id/hint_or_warning"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="8dp"
- android:minLines="3"
- android:text="@string/publish_avatar_explanation"
- android:textColor="@color/black87"
- android:textSize="?attr/TextSizeBody" />
- </LinearLayout>
-
-</RelativeLayout> \ No newline at end of file
+</RelativeLayout>
diff --git a/src/main/res/layout/activity_updater.xml b/src/main/res/layout/activity_updater.xml
new file mode 100644
index 000000000..50bdf0695
--- /dev/null
+++ b/src/main/res/layout/activity_updater.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ tools:context="eu.siacs.conversations.ui.UpdaterActivity">
+
+ <TextView android:id="@+id/updater" android:layout_width="wrap_content"
+ android:layout_height="wrap_content" android:layout_alignParentLeft="true"
+ android:layout_alignParentTop="true" android:layout_marginTop="6dp"
+ android:text="Current" android:textAppearance="?android:attr/textAppearanceMedium"
+ android:textStyle="normal"
+ android:layout_marginLeft="4dp"
+ android:layout_marginRight="4dp" />
+
+</RelativeLayout>
diff --git a/src/main/res/layout/contact.xml b/src/main/res/layout/contact.xml
index 56443c346..653bb9176 100644
--- a/src/main/res/layout/contact.xml
+++ b/src/main/res/layout/contact.xml
@@ -8,11 +8,12 @@
<com.makeramen.roundedimageview.RoundedImageView
android:id="@+id/contact_photo"
- android:layout_width="48dp"
- android:layout_height="48dp"
+ android:layout_width="56dp"
+ android:layout_height="56dp"
android:layout_alignParentLeft="true"
- android:scaleType="centerCrop"
android:src="@drawable/ic_profile"
+ android:background="@drawable/message_border"
+ android:padding="1dp"
app:riv_corner_radius="2dp" />
<LinearLayout
diff --git a/src/main/res/layout/conversation_list_row.xml b/src/main/res/layout/conversation_list_row.xml
index 7321b0f66..575647f0a 100644
--- a/src/main/res/layout/conversation_list_row.xml
+++ b/src/main/res/layout/conversation_list_row.xml
@@ -28,6 +28,8 @@
android:layout_height="56dp"
android:layout_alignParentLeft="true"
android:scaleType="centerCrop"
+ android:background="@drawable/message_border"
+ android:padding="1dp"
app:riv_corner_radius="2dp" />
<RelativeLayout
@@ -68,7 +70,7 @@
<ImageView
android:id="@+id/conversation_lastimage"
android:layout_width="fill_parent"
- android:layout_height="36dp"
+ android:layout_height="14dp"
android:background="@color/black87"
android:scaleType="centerCrop" />
</LinearLayout>
diff --git a/src/main/res/layout/message_received.xml b/src/main/res/layout/message_received.xml
index 76df710bf..07cca2c1e 100644
--- a/src/main/res/layout/message_received.xml
+++ b/src/main/res/layout/message_received.xml
@@ -17,6 +17,8 @@
android:layout_alignParentTop="true"
android:scaleType="fitXY"
android:src="@drawable/ic_profile"
+ android:background="@drawable/message_border"
+ android:padding="1dp"
app:riv_corner_radius="2dp" />
<LinearLayout
@@ -94,5 +96,4 @@
</LinearLayout>
</LinearLayout>
</LinearLayout>
-
</RelativeLayout> \ No newline at end of file
diff --git a/src/main/res/layout/message_sent.xml b/src/main/res/layout/message_sent.xml
index e3b38cd97..aa3aad722 100644
--- a/src/main/res/layout/message_sent.xml
+++ b/src/main/res/layout/message_sent.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="3dp"
android:paddingLeft="8dp"
@@ -14,7 +14,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="fitXY"
- android:paddingBottom="3dp"
+ android:background="@drawable/message_border"
+ android:padding="1dp"
android:src="@drawable/ic_profile"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
@@ -99,11 +100,18 @@
android:layout_height="?attr/TextSizeInfo"
android:layout_gravity="center_vertical"
android:layout_marginLeft="4sp"
- android:alpha="0.54"
android:gravity="center_vertical"
android:src="@drawable/ic_received_indicator" />
+ <ImageView
+ android:id="@+id/indicator_read"
+ android:layout_width="?attr/TextSizeInfo"
+ android:layout_height="?attr/TextSizeInfo"
+ android:layout_gravity="center_vertical"
+ android:gravity="center_vertical"
+ android:src="@drawable/ic_read_indicator"
+ android:layout_marginLeft="-8sp"
+ android:adjustViewBounds="false" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
-
</RelativeLayout> \ No newline at end of file
diff --git a/src/main/res/layout/message_status.xml b/src/main/res/layout/message_status.xml
index ad2579faa..2f14cbf54 100644
--- a/src/main/res/layout/message_status.xml
+++ b/src/main/res/layout/message_status.xml
@@ -16,9 +16,10 @@
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginRight="-1.5dp"
- android:padding="0dp"
+ android:padding="1dp"
android:scaleType="fitXY"
android:src="@drawable/ic_profile"
+ android:background="@drawable/message_border"
app:riv_corner_radius="1dp"/>
<TextView
diff --git a/src/main/res/menu/conversations.xml b/src/main/res/menu/conversations.xml
index 4c724d27d..47214a6b7 100644
--- a/src/main/res/menu/conversations.xml
+++ b/src/main/res/menu/conversations.xml
@@ -20,14 +20,15 @@
android:title="@string/attach_file"/>
<item
android:id="@+id/action_contact_details"
+ android:icon="?attr/icon_group"
android:orderInCategory="40"
- android:showAsAction="never"
+ android:showAsAction="always"
android:title="@string/action_contact_details"/>
<item
android:id="@+id/action_muc_details"
android:icon="?attr/icon_group"
android:orderInCategory="40"
- android:showAsAction="ifRoom"
+ android:showAsAction="always"
android:title="@string/action_muc_details"/>
<item
android:id="@+id/action_invite"
@@ -66,5 +67,10 @@
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/action_settings"/>
+ <item
+ android:id="@+id/action_check_updates"
+ android:orderInCategory="100"
+ android:showAsAction="never"
+ android:title="@string/action_check_update"/>
</menu> \ No newline at end of file
diff --git a/src/main/res/menu/menu_updater.xml b/src/main/res/menu/menu_updater.xml
new file mode 100644
index 000000000..f52657372
--- /dev/null
+++ b/src/main/res/menu/menu_updater.xml
@@ -0,0 +1,7 @@
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ tools:context="eu.siacs.conversations.ui.UpdaterActivity">
+ <item android:id="@+id/action_settings" android:title="@string/action_settings"
+ android:orderInCategory="100" app:showAsAction="never" />
+</menu>
diff --git a/src/main/res/menu/muc_details_context.xml b/src/main/res/menu/muc_details_context.xml
index af5e691b7..4a8b13d16 100644
--- a/src/main/res/menu/muc_details_context.xml
+++ b/src/main/res/menu/muc_details_context.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
- <item
+ <item
android:id="@+id/start_conversation"
android:title="@string/start_conversation"
android:visible="false"/>
diff --git a/src/main/res/values-bg/strings.xml b/src/main/res/values-bg/strings.xml
index 030432ad6..11c3446b9 100644
--- a/src/main/res/values-bg/strings.xml
+++ b/src/main/res/values-bg/strings.xml
@@ -443,6 +443,7 @@
<string name="hide_offline">Скриване на тези извън линия</string>
<string name="disable_account">Деактивиране на профила</string>
<string name="contact_is_typing">%s пише...</string>
+ <string name="is_typing">пише...</string>
<string name="contact_has_stopped_typing">%s спря да пише</string>
<string name="pref_chat_states">Известия за писането</string>
<string name="pref_chat_states_summary">Позволяване на контакта Ви да вижда, когато пишете ново съобщение</string>
diff --git a/src/main/res/values-ca/strings.xml b/src/main/res/values-ca/strings.xml
index 806ed7a03..43db6f5fb 100644
--- a/src/main/res/values-ca/strings.xml
+++ b/src/main/res/values-ca/strings.xml
@@ -407,6 +407,7 @@
<string name="hide_offline">Amaga el fora de línia</string>
<string name="disable_account">Deshabilita el compte</string>
<string name="contact_is_typing">%s està escrivint...</string>
+ <string name="is_typing">està escrivint...</string>
<string name="contact_has_stopped_typing">%s ha deixat d\'escriure</string>
<string name="pref_chat_states">Notificacions d\'escriptura</string>
<string name="pref_chat_states_summary">Permet el teu contacte saber quan estàs escrivint un missatge nou</string>
diff --git a/src/main/res/values-cs/strings.xml b/src/main/res/values-cs/strings.xml
index 0c5dca552..57f93f5cd 100644
--- a/src/main/res/values-cs/strings.xml
+++ b/src/main/res/values-cs/strings.xml
@@ -439,6 +439,7 @@
<string name="hide_offline">Skrýt offline</string>
<string name="disable_account">Vypnout účet</string>
<string name="contact_is_typing">%s píše...</string>
+ <string name="is_typing">píše...</string>
<string name="contact_has_stopped_typing">%s přestal(a) psát</string>
<string name="pref_chat_states">Upozornění při psaní</string>
<string name="pref_chat_states_summary">Oznamovat kontaktům že píšete novou zprávu</string>
diff --git a/src/main/res/values-de/strings.xml b/src/main/res/values-de/strings.xml
index b7cc4440f..25d5d814b 100644
--- a/src/main/res/values-de/strings.xml
+++ b/src/main/res/values-de/strings.xml
@@ -1,4 +1,4 @@
-<?xml version='1.0' encoding='UTF-8'?>
+<?xml version='1.0' encoding='UTF-8'?>
<resources>
<string name="action_settings">Einstellungen</string>
<string name="action_add">Neue Unterhaltung</string>
@@ -76,12 +76,12 @@
<string name="delete_messages">Nachrichten löschen</string>
<string name="also_end_conversation">Diese Unterhaltung danach beenden</string>
<string name="choose_presence">Ressource des Kontakts auswählen</string>
- <string name="send_unencrypted_message">Unverschlüsselt schreiben…</string>
+ <string name="send_unencrypted_message">Normal schreiben…</string>
<string name="send_otr_message">OTR-verschlüsselt schreiben…</string>
<string name="send_omemo_message">OMEMO-verschlüsselt schreiben…</string>
<string name="send_pgp_message">OpenPGP-verschlüsselt schreiben…</string>
<string name="your_nick_has_been_changed">Dein Nickname wurde geändert</string>
- <string name="send_unencrypted">Unverschlüsselt senden</string>
+ <string name="send_unencrypted">Normal verschicken</string>
<string name="decryption_failed">Entschlüsselung fehlgeschlagen. Vielleicht hast du nicht den richtigen privaten Schlüssel.</string>
<string name="openkeychain_required">OpenKeychain</string>
<string name="openkeychain_required_long">Conversations benutzt eine Drittanwendung namens <b>OpenKeychain</b>, um Nachrichten zu ver- und entschlüsseln und um deine Schlüssel zu verwalten.\n\nOpenKeychain ist GPLv3-lizenziert und kann über F-Droid oder Google Play bezogen werden.\n\n<small>(Bitte starte Conversations danach neu.)</small></string>
@@ -212,7 +212,7 @@
<string name="this_device_omemo_fingerprint">Eigener OMEMO-Fingerabdruck</string>
<string name="other_devices">Andere Geräte</string>
<string name="trust_omemo_fingerprints">OMEMO-Fingerabdruck vertrauen</string>
- <string name="fetching_keys">Schlüssel abrufen...</string>
+ <string name="fetching_keys">Schlüssel abrufen…</string>
<string name="done">Erledigt</string>
<string name="verify">Überprüfen</string>
<string name="decrypt">Entschlüsseln</string>
@@ -443,6 +443,7 @@
<string name="hide_offline">Offline verstecken</string>
<string name="disable_account">Konto abschalten</string>
<string name="contact_is_typing">%s schreibt…</string>
+ <string name="is_typing">schreibt…</string>
<string name="contact_has_stopped_typing">%s schreibt nicht mehr</string>
<string name="pref_chat_states">Tipp-Benachrichtigung</string>
<string name="pref_chat_states_summary">Informiere deine Kontakte, wenn du eine Nachricht eintippst.</string>
@@ -475,6 +476,7 @@
<string name="recently_used">zuletzt verwendet</string>
<string name="choose_quick_action">wähle Schnell-Taste</string>
<string name="search_for_contacts_or_groups">Nach Kontakten oder Konferenzen suchen</string>
+ <string name="elv_undo">Rückgängig</string>
<string name="send_private_message">Private Nachricht senden</string>
<string name="user_has_left_conference">%s hat die Konferenz verlassen!</string>
<string name="username">Benutzername</string>
@@ -485,8 +487,29 @@
<string name="download_failed_could_not_connect">Download fehlgeschlagen: keine Verbindung zum Host</string>
<string name="pref_use_white_background">Weißen Hintergrund benutzen</string>
<string name="pref_use_white_background_summary">Empfangene Nachrichten als schwarzen Text auf weißem Hintergrund anzeigen</string>
+ <string name="action_check_update">Auf Updates prüfen</string>
+ <string name="current_version">Installierte Version:</string>
+ <string name="new_version">Neue Version: </string>
+ <string name="remind_later">später</string>
+ <string name="checking_for_updates">Auf Conversations Updates prüfen</string>
+ <string name="title_activity_updater">Update Dienst</string>
+ <string name="update">Aktualisieren</string>
+ <string name="update_available">Conversations %1$s mit folgenden Änderungen ist verfügbar:\n\n%2$s\n\nMöchtest Du von Conversations %3$s auf Conversations %1$s aktualisieren?</string>
+ <string name="download_started">Download gestartet</string>
+ <string name="no_update_available">Kein Update verfügbar</string>
<string name="account_status_dns_timeout">Zeitüberschreitung bei der Namensauflösung</string>
<string name="server_info_broken">Fehlerhaft</string>
+<<<<<<< HEAD
+ <string name="update_info">Conversation prüft auf eine neuere Version. Wenn ein Update verfügbar ist, wirst du gefragt, ob du deine Version aktualisieren möchtest. Der Update Dienst lädt und installiert die neue Version automatisch.</string>
+ <string name="notification_export_logs_title">Schreibe Chats auf SD Karte</string>
+ <string name="pref_away_when_screen_off">Abwesend</string>
+ <string name="pref_away_when_screen_off_summary">Setze deinen Status auf abwesend, wenn dein Bildschirm abgeschaltet ist</string>
+ <string name="pref_export_logs">Exportiere Chats</string>
+ <string name="pref_export_logs_summary">Schreibe Chats auf SD Karte</string>
+ <string name="pref_presence_settings">Status Einstellungen</string>
+ <string name="pref_xa_on_silent_mode">Nicht verfügbar</string>
+ <string name="pref_xa_on_silent_mode_summary">Setze deinen Status auf nicht verfügbar, wenn dein Gerät stumm geschaltet ist</string>
+=======
<string name="pref_presence_settings">Status Einstellungen</string>
<string name="pref_away_when_screen_off">Abwesend</string>
<string name="pref_away_when_screen_off_summary">Setze deinen Status auf abwesend, wenn dein Bildschirm abgeschaltet ist</string>
@@ -501,4 +524,5 @@
<string name="certificate_chain_is_not_trusted">Zertifikat wird nicht vertraut</string>
<string name="jid_does_not_match_certificate">Jabber-ID stimmt nicht dem Zertifikat überein</string>
<string name="action_renew_certificate">Zertifikat erneuern</string>
+>>>>>>> refs/remotes/siacs/master
</resources>
diff --git a/src/main/res/values-el/strings.xml b/src/main/res/values-el/strings.xml
index ed38d0c06..ef1e9532b 100644
--- a/src/main/res/values-el/strings.xml
+++ b/src/main/res/values-el/strings.xml
@@ -407,6 +407,7 @@
<string name="hide_offline">Απόκρυψη των εκτός σύνδεσης</string>
<string name="disable_account">Απενεργοποίηση λογαριασμού</string>
<string name="contact_is_typing">Ο χρήστης %s γράφει...</string>
+ <string name="is_typing">Ο χρήστης γράφει...</string>
<string name="contact_has_stopped_typing">Ο χρήστης %s σταμάτησε να γράφει</string>
<string name="pref_chat_states">Ειδοποιήσεις πληκτρολόγησης</string>
<string name="pref_chat_states_summary">Επιτρέψτε στην επαφή σας να γνωρίζει πότε γράφετε ένα νέο μήνυμα</string>
diff --git a/src/main/res/values-es/strings.xml b/src/main/res/values-es/strings.xml
index cdddfb164..0494225cd 100644
--- a/src/main/res/values-es/strings.xml
+++ b/src/main/res/values-es/strings.xml
@@ -443,6 +443,7 @@
<string name="hide_offline">Ocultar desconectados</string>
<string name="disable_account">Deshabilitar Cuenta</string>
<string name="contact_is_typing">%s está escribiendo...</string>
+ <string name="is_typing">está escribiendo...</string>
<string name="contact_has_stopped_typing">%s ha dejado de escribir</string>
<string name="pref_chat_states">Notificación de escritura</string>
<string name="pref_chat_states_summary">Permite a tus contactos saber cuando estás escribiendo un nuevo mensaje</string>
diff --git a/src/main/res/values-eu/strings.xml b/src/main/res/values-eu/strings.xml
index 86f39b0f6..d3dfa995f 100644
--- a/src/main/res/values-eu/strings.xml
+++ b/src/main/res/values-eu/strings.xml
@@ -439,6 +439,7 @@
<string name="hide_offline">Lineaz kanpokoak ezkutatu</string>
<string name="disable_account">Kontua ezgaitu</string>
<string name="contact_is_typing">%s idazten ari da...</string>
+ <string name="is_typing">idazten ari da...</string>
<string name="contact_has_stopped_typing">%s(e)k idazteari utzi dio</string>
<string name="pref_chat_states">Idazketa jakinarazpenak</string>
<string name="pref_chat_states_summary">Zure kontaktuak mezu berri bat noiz idazten ari zaren jakin dezan baimendu</string>
diff --git a/src/main/res/values-fr/strings.xml b/src/main/res/values-fr/strings.xml
index b6c5f0daf..90ce584db 100644
--- a/src/main/res/values-fr/strings.xml
+++ b/src/main/res/values-fr/strings.xml
@@ -439,6 +439,7 @@
<string name="hide_offline">Se cacher hors-ligne</string>
<string name="disable_account">Désactiver le compte</string>
<string name="contact_is_typing">%s écrit un message...</string>
+ <string name="is_typing">écrit un message...</string>
<string name="contact_has_stopped_typing">%s a arrêté d\'écrire</string>
<string name="pref_chat_states">Notifications d\'écriture</string>
<string name="pref_chat_states_summary">Permettre à votre contact de savoir que vous écrivez un message</string>
diff --git a/src/main/res/values-id/strings.xml b/src/main/res/values-id/strings.xml
index 894c18a71..6c22c1323 100644
--- a/src/main/res/values-id/strings.xml
+++ b/src/main/res/values-id/strings.xml
@@ -412,6 +412,7 @@
<string name="hide_offline">Sembunyikan Offline</string>
<string name="disable_account">Nonaktifkan Akun</string>
<string name="contact_is_typing">%s sedang mengetik...</string>
+ <string name="is_typing">sedang mengetik...</string>
<string name="contact_has_stopped_typing">%s telah berhenti mengetik</string>
<string name="pref_chat_states">Notifikasi ketik pesan</string>
<string name="pref_chat_states_summary">Biarkan kontak Anda tahu ketika Anda sedang menulis pesan baru</string>
diff --git a/src/main/res/values-it/strings.xml b/src/main/res/values-it/strings.xml
index 97311427c..31d4a29ef 100644
--- a/src/main/res/values-it/strings.xml
+++ b/src/main/res/values-it/strings.xml
@@ -408,6 +408,7 @@
<string name="hide_offline">Nascondi i contatti offline</string>
<string name="disable_account">Disabilita l\'account</string>
<string name="contact_is_typing">%s sta digitando...</string>
+ <string name="is_typing">sta digitando...</string>
<string name="contact_has_stopped_typing">%s ha smesso di digitare</string>
<string name="pref_chat_states_summary">Permetti al tuo contatto di vedere quando stai digitando</string>
<string name="send_location">Invia la posizione</string>
diff --git a/src/main/res/values-ja/strings.xml b/src/main/res/values-ja/strings.xml
index 45c67940e..c30c87ff2 100644
--- a/src/main/res/values-ja/strings.xml
+++ b/src/main/res/values-ja/strings.xml
@@ -439,6 +439,7 @@
<string name="hide_offline">オフラインを非表示にする</string>
<string name="disable_account">アカウントを無効にする</string>
<string name="contact_is_typing">%s は入力中...</string>
+ <string name="is_typing">は入力中...</string>
<string name="contact_has_stopped_typing">%s は入力を停止しました</string>
<string name="pref_chat_states">入力中通知</string>
<string name="pref_chat_states_summary">あなたが新しいメッセージを書いている時に、連絡先に知らせます</string>
diff --git a/src/main/res/values-ko/strings.xml b/src/main/res/values-ko/strings.xml
index 6f654dcf7..6566724b0 100644
--- a/src/main/res/values-ko/strings.xml
+++ b/src/main/res/values-ko/strings.xml
@@ -407,6 +407,7 @@
<string name="hide_offline">오프라인 숨기기 </string>
<string name="disable_account">계정 해제 </string>
<string name="contact_is_typing">%s 이(가) 입력중입니다... </string>
+ <string name="is_typing">이(가) 입력중입니다... </string>
<string name="contact_has_stopped_typing">%s 이(가) 입력을 중단했습니다 </string>
<string name="pref_chat_states">입력 알림 </string>
<string name="pref_chat_states_summary">새 메세지를 작성할 때 이를 연락처에게 알립니다 </string>
diff --git a/src/main/res/values-ms/strings.xml b/src/main/res/values-ms/strings.xml
new file mode 100644
index 000000000..c757504ac
--- /dev/null
+++ b/src/main/res/values-ms/strings.xml
@@ -0,0 +1,2 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<resources/>
diff --git a/src/main/res/values-nl/strings.xml b/src/main/res/values-nl/strings.xml
index 61d57b260..1507865bf 100644
--- a/src/main/res/values-nl/strings.xml
+++ b/src/main/res/values-nl/strings.xml
@@ -439,6 +439,7 @@
<string name="hide_offline">Offline contacten verbergen</string>
<string name="disable_account">Account uitschakelen</string>
<string name="contact_is_typing">%s is aan het typen...</string>
+ <string name="is_typing">is aan het typen...</string>
<string name="contact_has_stopped_typing">%s is gestopt met typen</string>
<string name="pref_chat_states">Aan-het-typen-meldingen</string>
<string name="pref_chat_states_summary">Laat je contacten weten wanneer je een nieuw bericht aan het schrijven bent</string>
diff --git a/src/main/res/values-pl/strings.xml b/src/main/res/values-pl/strings.xml
index 408672ca1..16df1b3b3 100644
--- a/src/main/res/values-pl/strings.xml
+++ b/src/main/res/values-pl/strings.xml
@@ -439,6 +439,7 @@
<string name="hide_offline">Ukryj niedostępnych</string>
<string name="disable_account">Wyłącz konto</string>
<string name="contact_is_typing">%s pisze...</string>
+ <string name="is_typing">pisze...</string>
<string name="contact_has_stopped_typing">%s przestał(a) pisać</string>
<string name="pref_chat_states">Powiadomienia pisania</string>
<string name="pref_chat_states_summary">Powiadamiaj rozmówcę, kiedy rozpoczynasz nową wiadomość</string>
diff --git a/src/main/res/values-pt/strings.xml b/src/main/res/values-pt/strings.xml
index 57f9d7c6e..c0614d88f 100644
--- a/src/main/res/values-pt/strings.xml
+++ b/src/main/res/values-pt/strings.xml
@@ -282,6 +282,7 @@
<string name="sending_x_file">Enviando %s</string>
<string name="offering_x_file">Oferecendo %s</string>
<string name="contact_is_typing">%s está digitando...</string>
+ <string name="is_typing">está digitando...</string>
<string name="contact_has_stopped_typing">%s parou de digitar</string>
<string name="pref_chat_states">Notificações de digitação</string>
<string name="send_location">Enviar localização</string>
diff --git a/src/main/res/values-ru/strings.xml b/src/main/res/values-ru/strings.xml
index 4c5c205fe..54ea80bc8 100644
--- a/src/main/res/values-ru/strings.xml
+++ b/src/main/res/values-ru/strings.xml
@@ -421,6 +421,7 @@
<string name="hide_offline">Скрыть пользователей вне сети</string>
<string name="disable_account">Отключить учётную запись</string>
<string name="contact_is_typing">%s набирает сообщение...</string>
+ <string name="is_typing">набирает сообщение...</string>
<string name="contact_has_stopped_typing">%s прекратил набор</string>
<string name="pref_chat_states">Оповещения о наборе</string>
<string name="pref_chat_states_summary">Позволяет вашим контактам видеть когда вы пишете новое сообщение</string>
diff --git a/src/main/res/values-sk/strings.xml b/src/main/res/values-sk/strings.xml
index b0f982c20..b8a3993e0 100644
--- a/src/main/res/values-sk/strings.xml
+++ b/src/main/res/values-sk/strings.xml
@@ -409,6 +409,7 @@
<string name="hide_offline">Skryť neprihlásených</string>
<string name="disable_account">Vypnúť účet</string>
<string name="contact_is_typing">%s píše...</string>
+ <string name="is_typing">píše...</string>
<string name="contact_has_stopped_typing">%s prestal písať</string>
<string name="pref_chat_states">Upozornenia pri písaní</string>
<string name="pref_chat_states_summary">Upozorniť kontakt, keď píšete novú správu</string>
diff --git a/src/main/res/values-sr/strings.xml b/src/main/res/values-sr/strings.xml
index 5cf49475f..a251fbcd8 100644
--- a/src/main/res/values-sr/strings.xml
+++ b/src/main/res/values-sr/strings.xml
@@ -439,6 +439,7 @@
<string name="hide_offline">Сакриј неповезане</string>
<string name="disable_account">Онемогући налог</string>
<string name="contact_is_typing">%s куца...</string>
+ <string name="is_typing">куца...</string>
<string name="contact_has_stopped_typing">%s престаде да куца</string>
<string name="pref_chat_states">Обавештења о куцању</string>
<string name="pref_chat_states_summary">Обзнаните контакту кад куцате нову поруку</string>
diff --git a/src/main/res/values-sv/strings.xml b/src/main/res/values-sv/strings.xml
index 90a0248ed..34a11698c 100644
--- a/src/main/res/values-sv/strings.xml
+++ b/src/main/res/values-sv/strings.xml
@@ -439,6 +439,7 @@
<string name="hide_offline">Dölj ej anslutna</string>
<string name="disable_account">Deaktivera konton</string>
<string name="contact_is_typing">%s skriver...</string>
+ <string name="is_typing">skriver...</string>
<string name="contact_has_stopped_typing">%s har slutat skriva</string>
<string name="pref_chat_states">Skriv-notifieringar</string>
<string name="pref_chat_states_summary">Låter dina kontakter veta när du skriver ett nytt meddelande</string>
diff --git a/src/main/res/values-w820dp/dimens.xml b/src/main/res/values-w820dp/dimens.xml
new file mode 100644
index 000000000..63fc81644
--- /dev/null
+++ b/src/main/res/values-w820dp/dimens.xml
@@ -0,0 +1,6 @@
+<resources>
+ <!-- Example customization of dimensions originally defined in res/values/dimens.xml
+ (such as screen margins) for screens with more than 820dp of available width. This
+ would include 7" and 10" devices in landscape (~960dp and ~1280dp respectively). -->
+ <dimen name="activity_horizontal_margin">64dp</dimen>
+</resources>
diff --git a/src/main/res/values-zh-rCN/strings.xml b/src/main/res/values-zh-rCN/strings.xml
index 455d13a8b..8c41f1950 100644
--- a/src/main/res/values-zh-rCN/strings.xml
+++ b/src/main/res/values-zh-rCN/strings.xml
@@ -282,6 +282,8 @@
<string name="conference_members_only">此讨论组只允许成员加入</string>
<string name="conference_kicked">你被从此讨论组踢出</string>
<string name="using_account">用账户 %s</string>
+ <string name="checking_file">正在 HTTP 托管中检查图片</string>
+ <string name="image_file_deleted">此图片已经被删除</string>
<string name="not_connected_try_again">你没有连接。请稍后重试</string>
<string name="message_options">消息选项</string>
<string name="copy_text">拷贝文本</string>
diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml
index 3f3e29d14..e6cc222a4 100644
--- a/src/main/res/values/strings.xml
+++ b/src/main/res/values/strings.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name" translatable="false">Conversations</string>
@@ -214,7 +214,7 @@
<string name="this_device_omemo_fingerprint">Own OMEMO fingerprint</string>
<string name="other_devices">Other devices</string>
<string name="trust_omemo_fingerprints">Trust OMEMO Fingerprints</string>
- <string name="fetching_keys">Fetching keys...</string>
+ <string name="fetching_keys">Fetching keys…</string>
<string name="done">Done</string>
<string name="verify">Verify</string>
<string name="decrypt">Decrypt</string>
@@ -283,7 +283,7 @@
<string name="pref_about_conversations_summary">Build and licensing information</string>
<string name="pref_about_message" translatable="false">
Conversations • the very last word in instant messaging.
- \n\nCopyright © 2014-2015 Daniel Gultsch
+ \n\nCopyright © 2014 Daniel Gultsch
\n\nThis program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
@@ -474,7 +474,8 @@
<string name="offering_x_file">Offering %s</string>
<string name="hide_offline">Hide offline</string>
<string name="disable_account">Disable Account</string>
- <string name="contact_is_typing">%s is typing...</string>
+ <string name="contact_is_typing">%s is typing…</string>
+ <string name="is_typing">is typing…</string>
<string name="contact_has_stopped_typing">%s has stopped typing</string>
<string name="pref_chat_states">Typing notifications</string>
<string name="pref_chat_states_summary">Let your contact know when you are writing a new message</string>
@@ -515,15 +516,27 @@
<string name="download_failed_server_not_found">Download failed: Server not found</string>
<string name="download_failed_file_not_found">Download failed: File not found</string>
<string name="download_failed_could_not_connect">Download failed: Could not connect to host</string>
+ <string name="elv_undo">undo</string>
<string name="pref_use_white_background">Use white background</string>
<string name="pref_use_white_background_summary">Show received messages as black text on a white background</string>
<string name="account_status_dns_timeout">Timeout in DNS</string>
+ <string name="action_check_update">Check for Updates</string>
+ <string name="title_activity_updater">Update Service</string>
+ <string name="update_available">Conversations %1$s with the following changes is available:\n\n%2$s\n\nUpdate Conversations %3$s to Conversations %1$s now?</string>
+ <string name="checking_for_updates">Checking for Conversations updates</string>
+ <string name="remind_later">later</string>
+ <string name="update">Update</string>
+ <string name="new_version">New version:</string>
+ <string name="current_version">installed version:</string>
+ <string name="no_update_available">No update available</string>
+ <string name="download_started">Download started</string>
<string name="server_info_broken">Broken</string>
<string name="pref_presence_settings">Presence settings</string>
<string name="pref_away_when_screen_off">Away when screen is off</string>
<string name="pref_away_when_screen_off_summary">Marks your resource as away when the screen is turned off</string>
<string name="pref_xa_on_silent_mode">Not available in silent mode</string>
<string name="pref_xa_on_silent_mode_summary">Marks your resource as not available when phone is in silent mode</string>
+ <string name="update_info">Conversation is checking for an update. If an update is available you will be asked, if you want to update your version. The update process is downloading and installing the new version automatically.</string>
<string name="action_add_account_with_certificate">Add account with certificate</string>
<string name="unable_to_parse_certificate">Unable to parse certificate</string>
<string name="authenticate_with_certificate">Leave empty to authenticate w/ certificate</string>
@@ -533,4 +546,5 @@
<string name="certificate_chain_is_not_trusted">Certificate chain is not trusted</string>
<string name="jid_does_not_match_certificate">Jabber ID does not match certificate</string>
<string name="action_renew_certificate">Renew certificate</string>
+
</resources>
diff --git a/src/main/res/xml/preferences.xml b/src/main/res/xml/preferences.xml
index f05738ac5..5c7b885b6 100644
--- a/src/main/res/xml/preferences.xml
+++ b/src/main/res/xml/preferences.xml
@@ -16,7 +16,7 @@
android:summary="@string/pref_xmpp_resource_summary"
android:title="@string/pref_xmpp_resource"/>
<ListPreference
- android:defaultValue="524288"
+ android:defaultValue="1048576"
android:entries="@array/filesizes"
android:entryValues="@array/filesizes_values"
android:key="auto_accept_file_size"
@@ -30,7 +30,7 @@
android:title="@string/pref_confirm_messages"/>
<CheckBoxPreference
- android:defaultValue="false"
+ android:defaultValue="true"
android:key="chat_states"
android:summary="@string/pref_chat_states_summary"
android:title="@string/pref_chat_states"/>
@@ -106,7 +106,7 @@
android:summary="@string/pref_use_larger_font_summary"
android:title="@string/pref_use_larger_font"/>
<CheckBoxPreference
- android:defaultValue="false"
+ android:defaultValue="true"
android:key="send_button_status"
android:summary="@string/pref_use_send_button_to_indicate_status_summary"
android:title="@string/pref_use_send_button_to_indicate_status"/>
@@ -173,12 +173,12 @@
</PreferenceCategory>
<PreferenceCategory android:title="@string/pref_expert_options_other">
<CheckBoxPreference
- android:defaultValue="false"
+ android:defaultValue="true"
android:key="indicate_received"
android:summary="@string/pref_use_indicate_received_summary"
android:title="@string/pref_use_indicate_received"/>
<CheckBoxPreference
- android:defaultValue="false"
+ android:defaultValue="true"
android:key="keep_foreground_service"
android:summary="@string/pref_keep_foreground_service_summary"
android:title="@string/pref_keep_foreground_service"/>
@@ -190,7 +190,7 @@
</PreferenceScreen>
<CheckBoxPreference
- android:defaultValue="false"
+ android:defaultValue="true"
android:key="never_send"
android:summary="@string/pref_never_send_crash_summary"
android:title="@string/pref_never_send_crash"/>