Browse Source

Version 5.5

Threema 1 year ago
parent
commit
c75e9942b3
100 changed files with 924 additions and 370 deletions
  1. 4 11
      app/build.gradle
  2. 4 4
      app/src/androidTest/java/ch/threema/app/tasks/PersistableTasksTest.kt
  3. 11 23
      app/src/blue/res/layout/activity_enter_serial.xml
  4. 1 2
      app/src/blue/res/values-de/strings.xml
  5. 1 2
      app/src/blue/res/values/strings.xml
  6. 1 2
      app/src/libre/play/release-notes/de/default.txt
  7. 1 2
      app/src/libre/play/release-notes/en-US/default.txt
  8. 7 1
      app/src/main/AndroidManifest.xml
  9. 6 0
      app/src/main/java/ch/threema/app/BuildFlavor.java
  10. 1 31
      app/src/main/java/ch/threema/app/activities/EnterSerialActivity.java
  11. 15 1
      app/src/main/java/ch/threema/app/activities/HomeActivity.java
  12. 1 0
      app/src/main/java/ch/threema/app/activities/ThreemaActivity.java
  13. 122 0
      app/src/main/java/ch/threema/app/activities/WorkIntroActivity.kt
  14. 38 11
      app/src/main/java/ch/threema/app/fragments/ComposeMessageFragment.java
  15. 17 4
      app/src/main/java/ch/threema/app/messagereceiver/ContactMessageReceiver.java
  16. 6 4
      app/src/main/java/ch/threema/app/messagereceiver/GroupMessageReceiver.java
  17. 1 27
      app/src/main/java/ch/threema/app/preference/SettingsRateFragment.java
  18. 12 5
      app/src/main/java/ch/threema/app/preference/ThreemaPreferenceFragment.kt
  19. 6 4
      app/src/main/java/ch/threema/app/services/ConversationServiceImpl.java
  20. 5 1
      app/src/main/java/ch/threema/app/services/GroupServiceImpl.java
  21. 11 6
      app/src/main/java/ch/threema/app/tasks/OutgoingContactDeleteMessageTask.kt
  22. 16 11
      app/src/main/java/ch/threema/app/tasks/OutgoingContactEditMessageTask.kt
  23. 20 9
      app/src/main/java/ch/threema/app/tasks/OutgoingGroupDeleteMessageTask.kt
  24. 22 18
      app/src/main/java/ch/threema/app/tasks/OutgoingGroupEditMessageTask.kt
  25. 32 0
      app/src/main/java/ch/threema/app/utils/ConfigUtils.java
  26. 1 1
      app/src/main/java/ch/threema/app/utils/LinkifyUtil.java
  27. 1 1
      app/src/main/res/color/wizard_button_text_inverse.xml
  28. 8 0
      app/src/main/res/color/wizard_button_text_inverse_consumer.xml
  29. 9 0
      app/src/main/res/drawable/ic_app_icon_consumer.xml
  30. 8 0
      app/src/main/res/drawable/logo_main_consumer.xml
  31. 8 0
      app/src/main/res/drawable/work_intro_consumer_notice_background.xml
  32. 1 1
      app/src/main/res/layout-h533dp/activity_wizard_intro.xml
  33. 12 21
      app/src/main/res/layout/activity_enter_serial.xml
  34. 46 0
      app/src/main/res/layout/activity_work_intro.xml
  35. 75 0
      app/src/main/res/layout/work_intro_consumer_notice.xml
  36. 65 0
      app/src/main/res/layout/work_intro_login.xml
  37. 9 0
      app/src/main/res/values-cs/strings.xml
  38. 10 0
      app/src/main/res/values-de/strings.xml
  39. 9 0
      app/src/main/res/values-es/strings.xml
  40. 9 0
      app/src/main/res/values-fr/strings.xml
  41. 7 0
      app/src/main/res/values-gsw/strings.xml
  42. 1 1
      app/src/main/res/values-it/strings.xml
  43. 9 0
      app/src/main/res/values-nl-rNL/strings.xml
  44. 9 0
      app/src/main/res/values-pl/strings.xml
  45. 9 0
      app/src/main/res/values-pt-rBR/strings.xml
  46. 120 1
      app/src/main/res/values-rm/strings.xml
  47. 10 1
      app/src/main/res/values-ru/strings.xml
  48. 9 0
      app/src/main/res/values-uk/strings.xml
  49. 4 4
      app/src/main/res/values-zh-rCN/strings.xml
  50. 3 1
      app/src/main/res/values/colors.xml
  51. 11 1
      app/src/main/res/values/strings.xml
  52. 6 1
      app/src/main/res/values/styles.xml
  53. 5 0
      app/src/main/res/values/untranslatable_strings.xml
  54. 0 4
      app/src/main/res/values/work_placeholders.xml
  55. 11 23
      app/src/onprem/res/layout/activity_enter_serial.xml
  56. 1 2
      app/src/onprem/res/values-cs/strings.xml
  57. 1 2
      app/src/onprem/res/values-de/strings.xml
  58. 1 2
      app/src/onprem/res/values-es/strings.xml
  59. 1 2
      app/src/onprem/res/values-fr/strings.xml
  60. 1 2
      app/src/onprem/res/values-it/strings.xml
  61. 1 2
      app/src/onprem/res/values-nl-rNL/strings.xml
  62. 1 2
      app/src/onprem/res/values-pl/strings.xml
  63. 1 2
      app/src/onprem/res/values-pt-rBR/strings.xml
  64. 1 2
      app/src/onprem/res/values-rm/strings.xml
  65. 1 2
      app/src/onprem/res/values-ru/strings.xml
  66. 1 2
      app/src/onprem/res/values/strings.xml
  67. 11 23
      app/src/onprem_internal/res/layout/activity_enter_serial.xml
  68. 18 0
      app/src/onprem_internal/res/layout/toolbar_home.xml
  69. 1 2
      app/src/onprem_internal/res/values-cs/strings.xml
  70. 1 2
      app/src/onprem_internal/res/values-de/strings.xml
  71. 1 2
      app/src/onprem_internal/res/values-es/strings.xml
  72. 1 2
      app/src/onprem_internal/res/values-fr/strings.xml
  73. 1 2
      app/src/onprem_internal/res/values-it/strings.xml
  74. 1 2
      app/src/onprem_internal/res/values-nl-rNL/strings.xml
  75. 1 2
      app/src/onprem_internal/res/values-pl/strings.xml
  76. 1 2
      app/src/onprem_internal/res/values-pt-rBR/strings.xml
  77. 1 2
      app/src/onprem_internal/res/values-rm/strings.xml
  78. 1 2
      app/src/onprem_internal/res/values-ru/strings.xml
  79. 1 2
      app/src/onprem_internal/res/values/strings.xml
  80. 11 23
      app/src/store_google_work/res/layout/activity_enter_serial.xml
  81. 1 2
      app/src/store_google_work/res/values-cs/strings.xml
  82. 1 2
      app/src/store_google_work/res/values-de/strings.xml
  83. 1 2
      app/src/store_google_work/res/values-es/strings.xml
  84. 1 2
      app/src/store_google_work/res/values-fr/strings.xml
  85. 1 2
      app/src/store_google_work/res/values-it/strings.xml
  86. 0 1
      app/src/store_google_work/res/values-ja/strings.xml
  87. 1 2
      app/src/store_google_work/res/values-nl-rNL/strings.xml
  88. 0 1
      app/src/store_google_work/res/values-no/strings.xml
  89. 1 2
      app/src/store_google_work/res/values-pl/strings.xml
  90. 1 2
      app/src/store_google_work/res/values-pt-rBR/strings.xml
  91. 0 1
      app/src/store_google_work/res/values-rm/strings.xml
  92. 1 2
      app/src/store_google_work/res/values-ru/strings.xml
  93. 1 2
      app/src/store_google_work/res/values-sk/strings.xml
  94. 1 2
      app/src/store_google_work/res/values-tr/strings.xml
  95. 1 2
      app/src/store_google_work/res/values-uk/strings.xml
  96. 1 2
      app/src/store_google_work/res/values-zh-rCN/strings.xml
  97. 1 2
      app/src/store_google_work/res/values-zh-rTW/strings.xml
  98. 1 1
      app/src/store_google_work/res/values/colors.xml
  99. 1 2
      app/src/store_google_work/res/values/strings.xml
  100. 0 6
      app/src/store_google_work/res/values/untranslateable_strings.xml

+ 4 - 11
app/build.gradle

@@ -18,14 +18,14 @@ if (getGradle().getStartParameter().getTaskRequests().toString().contains("Hms")
 // version codes
 
 // Only use the scheme "<major>.<minor>.<patch>" for the app_version
-def app_version = "5.4.1"
+def app_version = "5.5"
 
 // beta_suffix with leading dash (e.g. `-beta1`)
 // should be one of (alpha|beta|rc) and an increasing number or empty for a regular release.
 // Note: in nightly builds this will be overwritten with a nightly version "-n12345"
 def beta_suffix = ""
 
-def defaultVersionCode = 974
+def defaultVersionCode = 996
 
 /**
  * Return the git hash, if git is installed.
@@ -146,8 +146,8 @@ android {
 
         buildConfigField "String[]", "ONPREM_CONFIG_TRUSTED_PUBLIC_KEYS", "null"
         buildConfigField "boolean", "MD_ENABLED", "false"
-        buildConfigField "boolean", "EDIT_MESSAGES_ENABLED", "false"
-        buildConfigField "boolean", "DELETE_MESSAGES_ENABLED", "false"
+        buildConfigField "boolean", "EDIT_MESSAGES_ENABLED", "true"
+        buildConfigField "boolean", "DELETE_MESSAGES_ENABLED", "true"
 
         // config fields for action URLs / deep links
         buildConfigField "String", "uriScheme", "\"threema\""
@@ -266,8 +266,6 @@ android {
             buildConfigField "String", "AVATAR_FETCH_URL", "\"https://avatar.test.threema.ch/\""
             buildConfigField "String", "APP_RATING_URL", "\"https://test.threema.ch/app-rating/android/{rating}\""
             buildConfigField "boolean", "MD_ENABLED", "true"
-            buildConfigField "boolean", "EDIT_MESSAGES_ENABLED", "true"
-            buildConfigField "boolean", "DELETE_MESSAGES_ENABLED", "true"
         }
         sandbox_work {
             versionName "${app_version}k${beta_suffix}"
@@ -300,8 +298,6 @@ android {
             buildConfigField "String", "actionUrl", "\"work.test.threema.ch\""
 
             buildConfigField "boolean", "MD_ENABLED", "true"
-            buildConfigField "boolean", "EDIT_MESSAGES_ENABLED", "true"
-            buildConfigField "boolean", "DELETE_MESSAGES_ENABLED", "true"
 
 
             manifestPlaceholders = [
@@ -410,9 +406,6 @@ android {
             buildConfigField "String", "APP_RATING_URL", "\"https://test.threema.ch/app-rating/android-work/{rating}\""
             buildConfigField "String", "LOG_TAG", "\"3mablue\""
 
-            buildConfigField "boolean", "EDIT_MESSAGES_ENABLED", "true"
-            buildConfigField "boolean", "DELETE_MESSAGES_ENABLED", "true"
-
             // config fields for action URLs / deep links
             buildConfigField "String", "uriScheme", "\"threemablue\""
             buildConfigField "String", "actionUrl", "\"blue.threema.ch\""

+ 4 - 4
app/src/androidTest/java/ch/threema/app/tasks/PersistableTasksTest.kt

@@ -236,7 +236,7 @@ class PersistableTasksTest {
     fun testOutgoingContactEditMessageTask() {
         assertValidEncoding(
             OutgoingContactEditMessageTask::class.java,
-            "{\"type\":\"ch.threema.app.tasks.OutgoingContactEditMessageTask.OutgoingContactEditMessageData\",\"toIdentity\":\"01234567\",\"messageId\":0, \"text\":\"test\", \"editedAt\":0}"
+            "{\"type\":\"ch.threema.app.tasks.OutgoingContactEditMessageTask.OutgoingContactEditMessageData\",\"toIdentity\":\"01234567\",\"messageModelId\":0, \"messageId\":[0,0,0,0,0,0,0,0], \"editedText\":\"test\", \"editedAt\":0}"
         )
     }
 
@@ -244,7 +244,7 @@ class PersistableTasksTest {
     fun testOutgoingGroupEditMessageTask() {
         assertValidEncoding(
             OutgoingGroupEditMessageTask::class.java,
-            "{\"type\":\"ch.threema.app.tasks.OutgoingGroupEditMessageTask.OutgoingGroupEditMessageData\",\"messageId\":0, \"text\":\"test\", \"editedAt\":0,\"recipientIdentities\":[\"01234567\",\"01234567\"]}"
+            "{\"type\":\"ch.threema.app.tasks.OutgoingGroupEditMessageTask.OutgoingGroupEditMessageData\",\"messageModelId\":0, \"messageId\":[0,0,0,0,0,0,0,0], \"editedText\":\"test\", \"editedAt\":0,\"recipientIdentities\":[\"01234567\",\"01234567\"]}"
         )
     }
 
@@ -252,7 +252,7 @@ class PersistableTasksTest {
     fun testOutgoingContactDeleteMessageTask() {
         assertValidEncoding(
             OutgoingContactDeleteMessageTask::class.java,
-            "{\"type\":\"ch.threema.app.tasks.OutgoingContactDeleteMessageTask.OutgoingContactDeleteMessageData\",\"toIdentity\":\"01234567\",\"messageId\":0, \"deletedAt\":0}"
+            "{\"type\":\"ch.threema.app.tasks.OutgoingContactDeleteMessageTask.OutgoingContactDeleteMessageData\",\"toIdentity\":\"01234567\",\"messageModelId\":0, \"messageId\":[0,0,0,0,0,0,0,0], \"deletedAt\":0}"
         )
     }
 
@@ -260,7 +260,7 @@ class PersistableTasksTest {
     fun testOutgoingGroupDeleteMessageTask() {
         assertValidEncoding(
             OutgoingGroupDeleteMessageTask::class.java,
-            "{\"type\":\"ch.threema.app.tasks.OutgoingGroupDeleteMessageTask.OutgoingGroupDeleteMessageData\",\"messageId\":0,\"deletedAt\":0,\"recipientIdentities\":[\"01234567\",\"01234567\"]}"
+            "{\"type\":\"ch.threema.app.tasks.OutgoingGroupDeleteMessageTask.OutgoingGroupDeleteMessageData\",\"messageModelId\":0,\"messageId\":[0,0,0,0,0,0,0,0],\"deletedAt\":0,\"recipientIdentities\":[\"01234567\",\"01234567\"]}"
         )
     }
 

+ 11 - 23
app/src/blue/res/layout/activity_enter_serial.xml

@@ -4,7 +4,8 @@
             android:id="@+id/top_view"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:fillViewport="true">
+            android:fillViewport="true"
+            android:background="@android:color/black">
 
 	<FrameLayout android:layout_width="match_parent"
 				 android:layout_height="wrap_content">
@@ -28,16 +29,15 @@
 				android:paddingTop="@dimen/wizard_contents_padding"
 				android:paddingBottom="@dimen/wizard_contents_padding">
 
-			<TextView
-					style="@style/WizardTitleText"
-					android:id="@+id/enter_serial_welcome_title"
-					android:layout_width="wrap_content"
-					android:layout_height="wrap_content"
-					android:text="@string/app_name"
-					android:gravity="center_horizontal"
-					android:layout_centerHorizontal="true"
-					android:layout_marginTop="8dp"
-			/>
+            <ImageView
+                android:id="@+id/enter_serial_welcome_title"
+                android:src="@drawable/logo_main_white"
+                android:layout_width="wrap_content"
+                android:layout_height="64dp"
+                android:importantForAccessibility="no"
+                android:scaleX="1.5"
+                android:scaleY="1.5"
+                android:layout_centerHorizontal="true" />
 
 			<TextView
 					style="@style/WizardMediumText"
@@ -50,7 +50,6 @@
 					android:linksClickable="true"
 					android:autoLink="web"
 					android:text="@string/enter_serial_body"
-					android:layout_marginTop="@dimen/wizard_paragraph_height"
 					android:layout_marginBottom="5dp"
 			/>
 
@@ -157,17 +156,6 @@
 				android:gravity="center_horizontal"
 				android:layout_marginTop="32dp" />
 
-			<TextView
-				style="@style/WizardMediumText"
-				android:id="@+id/private_explain"
-				android:visibility="visible"
-				android:layout_width="fill_parent"
-				android:layout_height="wrap_content"
-				android:layout_below="@id/work_lost_credential_help"
-				android:layout_alignParentBottom="true"
-				android:gravity="center_horizontal|bottom"
-				android:layout_marginTop="32dp"/>
-
 		</RelativeLayout>
 
 	</FrameLayout>

+ 1 - 2
app/src/blue/res/values-de/strings.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
 	<string name="about_title">Threema Blue für Android</string>
-	<string name="enter_serial_body">Geben Sie die Zugangsdaten ein, die Sie von Ihrem Unternehmen bzw. Ihrer Organisation erhalten haben</string>
+	<string name="enter_serial_body">Geben Sie Ihre Threema Work-Zugangsdaten ein, die Sie von Ihrem Unternehmen erhalten haben.</string>
 	<string name="serial_required_want_exit">Die Lizenz ist ungültig. Möchten Sie es nochmals versuchen oder Threema verlassen?</string>
 	<string name="checking_serial">Zugangsberechtigung wird überprüft</string>
 	<string name="username_hint">Benutzername</string>
@@ -25,7 +25,6 @@
 	</string>
 	<string name="threema_contact">Threema Work-Kontakt</string>
 	<string name="menu_about">Über Threema Blue</string>
-	<string name="private_threema_download"><![CDATA[Wenn Sie die App privat nutzen möchten, laden Sie Threema bitte <a href=%s>hier</a> herunter.]]></string>
 	<string name="directory_search">Im Verzeichnis suchen</string>
 	<string name="directory_title">Unternehmensverzeichnis</string>
 	<string name="directory_empty_view_text">Bitte geben Sie mindestens 3 Zeichen eines Namens ein, um mit der Suche im Unternehmensverzeichnis zu beginnen oder wählen Sie eine Kategorie, indem Sie auf das Filter-Symbol tippen.</string>

+ 1 - 2
app/src/blue/res/values/strings.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
 	<string name="about_title">Threema Blue for Android</string>
-	<string name="enter_serial_body">Please enter the credentials provided by your company or organization</string>
+	<string name="enter_serial_body">Please enter the Threema Work credentials provided by your company.</string>
 	<string name="serial_required_want_exit">License is invalid. Would you like to try again or quit Threema?</string>
 	<string name="checking_serial">Checking credentials</string>
 	<string name="username_hint">Username</string>
@@ -25,7 +25,6 @@
 	</string>
 	<string name="threema_contact">Threema Work Contact</string>
 	<string name="menu_about">About Threema Blue</string>
-	<string name="private_threema_download"><![CDATA[If you are a private user, please <a href=%s>tap here</a> to download Threema.]]></string>
 	<string name="directory_search">Search in the directory</string>
 	<string name="directory_title">Company directory</string>
 	<string name="directory_empty_view_text">Please enter at least 3 characters of a name to begin searching in your company\'s directory or select a category by tapping on the filter icon.</string>

+ 1 - 2
app/src/libre/play/release-notes/de/default.txt

@@ -1,2 +1 @@
-* Behebung verschiedener Fehler
-* Behebung eines Fehlers, wodurch die App sporadisch einfrieren konnte
+* Bereits gesendete Nachrichten können neu bearbeitet und für alle gelöscht werden

+ 1 - 2
app/src/libre/play/release-notes/en-US/default.txt

@@ -1,2 +1 @@
-* Various bug fixes
-* Fixed a bug that could cause the app to freeze occasionally
+* Sent messages can now be edited or deleted on the recipient’s end

+ 7 - 1
app/src/main/AndroidManifest.xml

@@ -375,10 +375,16 @@
 			android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize|uiMode"
 			android:launchMode="singleTop"
 			android:theme="@style/Theme.Threema.Translucent"/>
+        <activity
+            android:name=".activities.WorkIntroActivity"
+            android:theme="@style/Theme.Threema.Wizard"
+            android:screenOrientation="sensorPortrait"
+            android:exported="false">
+
+        </activity>
 		<activity
 			android:name=".activities.EnterSerialActivity"
 			android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize|uiMode"
-			android:excludeFromRecents="true"
 			android:launchMode="singleTop"
 			android:screenOrientation="sensorPortrait"
 			android:theme="@style/Theme.Threema.Wizard"

+ 6 - 0
app/src/main/java/ch/threema/app/BuildFlavor.java

@@ -29,6 +29,7 @@ public class BuildFlavor {
 	private final static String FLAVOR_GREEN = "green";
 	private final static String FLAVOR_SANDBOX_WORK = "sandbox_work";
 	private final static String FLAVOR_ONPREM = "onprem";
+	private final static String FLAVOR_ONPREM_INTERNAL = "onprem_internal";
 	private final static String FLAVOR_BLUE = "blue";
 	private final static String FLAVOR_HMS = "hms";
 	private final static String FLAVOR_HMS_WORK = "hms_work";
@@ -114,6 +115,7 @@ public class BuildFlavor {
 					licenseType = LicenseType.GOOGLE_WORK;
 					break;
 				case FLAVOR_ONPREM:
+				case FLAVOR_ONPREM_INTERNAL:
 					licenseType = LicenseType.ONPREM;
 					break;
 				case FLAVOR_HMS:
@@ -138,6 +140,7 @@ public class BuildFlavor {
 					buildEnvironment = BuildEnvironment.SANDBOX;
 					break;
 				case FLAVOR_ONPREM:
+				case FLAVOR_ONPREM_INTERNAL:
 					buildEnvironment = BuildEnvironment.ONPREM;
 					break;
 				case FLAVOR_NONE:
@@ -176,6 +179,9 @@ public class BuildFlavor {
 				case FLAVOR_ONPREM:
 					name = "OnPrem";
 					break;
+				case FLAVOR_ONPREM_INTERNAL:
+					name = "OnPrem Internal";
+					break;
 				case FLAVOR_BLUE:
 					name = "Blue";
 					break;

+ 1 - 31
app/src/main/java/ch/threema/app/activities/EnterSerialActivity.java

@@ -28,7 +28,6 @@ import android.net.Uri;
 import android.os.AsyncTask;
 import android.os.Bundle;
 import android.text.Editable;
-import android.text.Html;
 import android.text.InputFilter;
 import android.text.InputType;
 import android.text.TextWatcher;
@@ -63,7 +62,6 @@ import ch.threema.app.utils.AppRestrictionUtil;
 import ch.threema.app.utils.ConfigUtils;
 import ch.threema.app.utils.DialogUtil;
 import ch.threema.app.utils.EditTextUtil;
-import ch.threema.app.utils.LocaleUtil;
 import ch.threema.app.utils.TestUtil;
 import ch.threema.base.utils.LoggingUtil;
 
@@ -75,7 +73,7 @@ public class EnterSerialActivity extends ThreemaActivity {
 	private static final String BUNDLE_LICENSE_KEY = "bulk";
 	private static final String BUNDLE_SERVER = "busv";
 	private static final String DIALOG_TAG_CHECKING = "check";
-	private TextView stateTextView, privateExplainText = null;
+	private TextView stateTextView = null;
 	private EditText licenseKeyOrUsernameText, passwordText, serverText;
 	private MaterialButton unlockButton;
 	private Button loginButton;
@@ -166,20 +164,6 @@ public class EnterSerialActivity extends ThreemaActivity {
 
 	@SuppressLint("StringFormatInvalid")
 	private void setupForWorkBuild() {
-		privateExplainText = findViewById(R.id.private_explain);
-
-		if (privateExplainText != null) {
-			final String workInfoUrl = String.format(getString(R.string.threema_work_url), LocaleUtil.getAppLanguage());
-			privateExplainText.setText(Html.fromHtml(
-				String.format(
-					getString(R.string.private_threema_download),
-					workInfoUrl,
-					getString(R.string.private_download_url)
-				)
-			));
-			privateExplainText.setClickable(true);
-			privateExplainText.setMovementMethod(LinkMovementMethod.getInstance());
-		}
 		licenseKeyOrUsernameText.addTextChangedListener(new TextChangeWatcher());
 		passwordText.addTextChangedListener(new TextChangeWatcher());
 		loginButton = findViewById(getResources().getIdentifier("unlock_button_work", "id", getPackageName()));
@@ -356,9 +340,6 @@ public class EnterSerialActivity extends ThreemaActivity {
 			if (stateTextView != null) {
 				stateTextView.setText("");
 			}
-			if (privateExplainText != null) {
-				privateExplainText.setVisibility(View.VISIBLE);
-			}
 		}
 	}
 
@@ -441,17 +422,6 @@ public class EnterSerialActivity extends ThreemaActivity {
 		this.stateTextView.setText(state);
 	}
 
-	@Override
-	protected boolean enableOnBackPressedCallback() {
-		return true;
-	}
-
-	@Override
-	protected void handleOnBackPressed() {
-		moveTaskToBack(true);
-		finish();
-	}
-
 	@Override
 	public void onConfigurationChanged(@NonNull Configuration newConfig) {
 		// We override this method to avoid restarting the entire

+ 15 - 1
app/src/main/java/ch/threema/app/activities/HomeActivity.java

@@ -621,7 +621,12 @@ public class HomeActivity extends ThreemaAppCompatActivity implements
 			startActivityForResult(new Intent(this, UnlockMasterKeyActivity.class), ThreemaActivity.ACTIVITY_ID_UNLOCK_MASTER_KEY);
 		} else {
 			if (ConfigUtils.isSerialLicensed() && !ConfigUtils.isSerialLicenseValid()) {
-				startActivityForResult(new Intent(this, EnterSerialActivity.class), ThreemaActivity.ACTIVITY_ID_ENTER_SERIAL);
+				boolean isInstalledFromStore = ConfigUtils.isInstalledFromStore(ThreemaApplication.getAppContext());
+				if (ConfigUtils.isWorkBuild() && !ConfigUtils.isWorkRestricted() && !hasIdentity() && isInstalledFromStore) {
+					startActivityForResult(new Intent(this, WorkIntroActivity.class), ThreemaActivity.ACTIVITY_ID_WORK_INTRO);
+				} else {
+					startActivityForResult(new Intent(this, EnterSerialActivity.class), ThreemaActivity.ACTIVITY_ID_ENTER_SERIAL);
+				}
 				finish();
 			} else {
 				this.startMainActivity(savedInstanceState);
@@ -689,6 +694,15 @@ public class HomeActivity extends ThreemaAppCompatActivity implements
 		}
 	}
 
+	private boolean hasIdentity() {
+		try {
+			return ThreemaApplication.requireServiceManager().getUserService().hasIdentity();
+		} catch (NullPointerException npe) {
+			logger.error("user service not available");
+			return false;
+		}
+	}
+
 	private void reconfigureSafe(@NonNull ThreemaSafeService threemaSafeService, @NonNull ThreemaSafeMDMConfig newConfig) {
 		// dispose of old backup, if any
 		try {

+ 1 - 0
app/src/main/java/ch/threema/app/activities/ThreemaActivity.java

@@ -65,6 +65,7 @@ public abstract class ThreemaActivity extends ThreemaAppCompatActivity {
 	public static final int ACTIVITY_ID_PAINT = 20049;
 	public static final int ACTIVITY_ID_PICK_MEDIA = 20050;
 	public static final int ACTIVITY_ID_MANAGE_GROUP_LINKS = 20051;
+	final static public int ACTIVITY_ID_WORK_INTRO = 20052;
 
 	public static final int RESULT_RESTART = 40005;
 

+ 122 - 0
app/src/main/java/ch/threema/app/activities/WorkIntroActivity.kt

@@ -0,0 +1,122 @@
+/*  _____ _
+ * |_   _| |_  _ _ ___ ___ _ __  __ _
+ *   | | | ' \| '_/ -_) -_) '  \/ _` |_
+ *   |_| |_||_|_| \___\___|_|_|_\__,_(_)
+ *
+ * Threema for Android
+ * Copyright (c) 2024 Threema GmbH
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+package ch.threema.app.activities
+
+import android.content.Intent
+import android.net.Uri
+import android.os.Bundle
+import android.text.method.LinkMovementMethod
+import android.widget.Button
+import android.widget.TextView
+import android.widget.Toast
+import androidx.core.text.HtmlCompat
+import ch.threema.app.BuildFlavor
+import ch.threema.app.R
+import ch.threema.app.utils.LinkifyUtil
+
+class WorkIntroActivity : ThreemaActivity() {
+
+    companion object {
+        private const val HTML_LINK_FORMAT_TEMPLATE_PREFIX = "<a href='%1\$s'> "
+        private const val HTML_LINK_FORMAT_TEMPLATE_POSTFIX = " </a>"
+    }
+
+    private val loginButton: Button by lazy { findViewById(R.id.work_intro_login_button) }
+    private val consumerStoreButton: Button by lazy { findViewById(R.id.consumer_notice_app_store_button) }
+    private val workInfoLinkTextView: TextView by lazy { findViewById(R.id.work_intro_more_link) }
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+
+        setContentView(R.layout.activity_work_intro)
+
+        initLoginButton()
+        initWorkInfoLink()
+        initConsumerStoreButton()
+    }
+
+    private fun initLoginButton() {
+        loginButton.text = getString(R.string.work_intro_login).format(getString(R.string.app_name))
+        loginButton.setOnClickListener {
+            val intent = Intent(this, EnterSerialActivity::class.java)
+            startActivity(intent)
+        }
+    }
+
+    private fun initWorkInfoLink() {
+        val workInfoLinkTemplate = HTML_LINK_FORMAT_TEMPLATE_PREFIX
+            .plus(getString(R.string.work_intro_more_link_text))
+            .plus(HTML_LINK_FORMAT_TEMPLATE_POSTFIX)
+
+        val workInfoLink = getString(R.string.threema_work_url)
+
+        val workInfoHtmlLink = String.format(
+            workInfoLinkTemplate,
+            workInfoLink
+        )
+
+        workInfoLinkTextView.text = HtmlCompat.fromHtml(workInfoHtmlLink, HtmlCompat.FROM_HTML_MODE_COMPACT)
+        workInfoLinkTextView.movementMethod = LinkMovementMethod.getInstance()
+        workInfoLinkTextView.setOnClickListener {
+            LinkifyUtil.getInstance().openLink(Uri.parse(workInfoLink), null, this)
+        }
+    }
+
+    private fun initConsumerStoreButton() {
+        val appStoreText: String
+        val onButtonClick: () -> Unit
+
+        if (BuildFlavor.getLicenseType() == BuildFlavor.LicenseType.HMS_WORK) {
+            appStoreText = getString(R.string.consumer_notice_appgallery_link_description)
+            onButtonClick = { openConsumerAppInHuaweiAppGallery() }
+        } else {
+            appStoreText = getString(R.string.consumer_notice_playstore_link_description)
+            onButtonClick = { openConsumerAppInPlayStore() }
+        }
+
+        consumerStoreButton.text = appStoreText
+        consumerStoreButton.setOnClickListener {
+            try {
+                onButtonClick()
+            } catch (e: Exception) {
+                Toast
+                    .makeText(this, getString(R.string.no_activity_for_intent), Toast.LENGTH_SHORT)
+                    .show()
+            }
+        }
+    }
+
+    private fun openConsumerAppInPlayStore() {
+        val intent = Intent(Intent.ACTION_VIEW)
+        intent.setData(Uri.parse(getString(R.string.private_download_url)))
+        intent.setPackage("com.android.vending")
+        startActivity(intent)
+    }
+
+    private fun openConsumerAppInHuaweiAppGallery() {
+        val intent = Intent(Intent.ACTION_VIEW)
+        val uri = Uri.parse("market://details?id=" + this.packageName)
+        intent.setData(uri)
+        intent.setPackage("com.huawei.appmarket")
+        startActivity(intent)
+    }
+}

+ 38 - 11
app/src/main/java/ch/threema/app/fragments/ComposeMessageFragment.java

@@ -1531,7 +1531,9 @@ public class ComposeMessageFragment extends Fragment implements
 		}
 
 		// save unfinished text
-		saveMessageDraft();
+		if (editMessageActionMode == null) {
+			saveMessageDraft();
+		}
 
 		if(this.typingIndicatorTextWatcher != null) {
 			this.typingIndicatorTextWatcher.stopTyping();
@@ -2506,7 +2508,7 @@ public class ComposeMessageFragment extends Fragment implements
 			getResources().getString(R.string.really_delete_message_title),
 			ConfigUtils.getSafeQuantityString(requireContext(), R.plurals.delete_messages, 1, 1),
 			R.string.delete_for_all,
-			R.string.delete,
+			R.string.delete_from_this_device,
 			R.string.cancel
 		);
 
@@ -3718,6 +3720,11 @@ public class ComposeMessageFragment extends Fragment implements
 	}
 
 	private void startEditingGroupMessage(@NonNull GroupModel groupModel, @NonNull AbstractMessageModel message) {
+		if (groupService.isNotesGroup(groupModel)) {
+			startMessageEditor(message);
+			return;
+		}
+
 		GroupFeatureSupport featureSupport = groupService.getFeatureSupport(groupModel, ThreemaFeature.EDIT_MESSAGES);
 		if (featureSupport.getAdoptionRate() == GroupFeatureAdoptionRate.ALL) {
 			startMessageEditor(message);
@@ -4667,16 +4674,27 @@ public class ComposeMessageFragment extends Fragment implements
 		}
 
 		private boolean isDeletableRemotely(AbstractMessageModel message) {
-			boolean canDelete = canDeleteRemotely(message);
+			// check receiver support
 			if (messageReceiver instanceof GroupMessageReceiver) {
-				GroupFeatureSupport featureSupport = groupService.getFeatureSupport(((GroupMessageReceiver) messageReceiver).getGroup(), ThreemaFeature.DELETE_MESSAGES);
-				if (featureSupport.getAdoptionRate() == GroupFeatureAdoptionRate.NONE) {
-					canDelete = false;
+				GroupModel group = ((GroupMessageReceiver) messageReceiver).getGroup();
+				if (groupService.isNotesGroup(group)) {
+					// delete for all is pointless in notes group
+					return false;
+				} else {
+					GroupFeatureSupport featureSupport = groupService.getFeatureSupport(group, ThreemaFeature.DELETE_MESSAGES);
+					if (featureSupport.getAdoptionRate() == GroupFeatureAdoptionRate.NONE) {
+						// no feature support in group
+						return false;
+					}
 				}
-			} else if (messageReceiver instanceof ContactMessageReceiver && !ThreemaFeature.canDeleteMessages(((ContactMessageReceiver) messageReceiver).getContact().getFeatureMask())) {
-				canDelete = false;
+			} else if (messageReceiver instanceof ContactMessageReceiver
+				&& !ThreemaFeature.canDeleteMessages(((ContactMessageReceiver) messageReceiver).getContact().getFeatureMask())
+			) {
+				// no feature support in 1:1 chat
+				return false;
 			}
-			return canDelete;
+			// check message support
+			return canDeleteRemotely(message);
 		}
 
 		@Override
@@ -4785,6 +4803,15 @@ public class ComposeMessageFragment extends Fragment implements
 		}
 	}
 
+	private void setMessageTextMaxLength(int max) {
+		for (int i = 0; i < messageText.getFilters().length; i++) {
+			if (messageText.getFilters()[i] instanceof InputFilter.LengthFilter) {
+				messageText.getFilters()[i] = new InputFilter.LengthFilter(max);
+				break;
+			}
+		}
+	}
+
 	private class EditMessageActionMode implements ActionMode.Callback {
 
 		private final AbstractMessageModel messageModel;
@@ -4878,7 +4905,7 @@ public class ComposeMessageFragment extends Fragment implements
 			});
 
 			// usually messages are split into multiple messages if they are too long, but this is not possible when editing a message
-			messageText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(ProtocolDefines.MAX_TEXT_MESSAGE_LEN)});
+			setMessageTextMaxLength(ProtocolDefines.MAX_TEXT_MESSAGE_LEN);
 
 			return true;
 		}
@@ -4938,7 +4965,7 @@ public class ComposeMessageFragment extends Fragment implements
 
 			// restore default max length so long messages can be split again
 			int defaultEditTextMaxLength = getResources().getInteger(R.integer.message_edittext_max_length);
-			messageText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(defaultEditTextMaxLength)});
+			setMessageTextMaxLength(defaultEditTextMaxLength);
 
 			if (typingIndicatorTextWatcher != null) {
 				messageText.addTextChangedListener(typingIndicatorTextWatcher);

+ 17 - 4
app/src/main/java/ch/threema/app/messagereceiver/ContactMessageReceiver.java

@@ -413,15 +413,28 @@ public class ContactMessageReceiver implements MessageReceiver<MessageModel> {
 		);
 	}
 
-	public void sendEditMessage(int messageId, @NonNull String newText, @NonNull Date editedAt) {
+	public void sendEditMessage(int messageModelId, @NonNull String newText, @NonNull Date editedAt) {
 		scheduleTask(
-			new OutgoingContactEditMessageTask(contactModel.getIdentity(), messageId, newText, editedAt, serviceManager)
+			new OutgoingContactEditMessageTask(
+				contactModel.getIdentity(),
+				messageModelId,
+				new MessageId(),
+				newText,
+				editedAt,
+				serviceManager
+			)
 		);
 	}
 
-	public void sendDeleteMessage(int messageId, @NonNull Date deletedAt) {
+	public void sendDeleteMessage(int messageModelId, @NonNull Date deletedAt) {
 		scheduleTask(
-			new OutgoingContactDeleteMessageTask(contactModel.getIdentity(), messageId, deletedAt, serviceManager)
+			new OutgoingContactDeleteMessageTask(
+				contactModel.getIdentity(),
+				messageModelId,
+				new MessageId(),
+				deletedAt,
+				serviceManager
+			)
 		);
 	}
 

+ 6 - 4
app/src/main/java/ch/threema/app/messagereceiver/GroupMessageReceiver.java

@@ -285,10 +285,11 @@ public class GroupMessageReceiver implements MessageReceiver<GroupMessageModel>
 		));
 	}
 
-	public void sendEditMessage(int messageId, @NonNull String body, @NonNull Date editedAt) {
+	public void sendEditMessage(int messageModelId, @NonNull String body, @NonNull Date editedAt) {
 		taskManager.schedule(
 			new OutgoingGroupEditMessageTask(
-				messageId,
+				messageModelId,
+				new MessageId(),
 				body,
 				editedAt,
 				GroupUtil.getRecipientIdentitiesByFeatureSupport(
@@ -299,10 +300,11 @@ public class GroupMessageReceiver implements MessageReceiver<GroupMessageModel>
 		);
 	}
 
-	public void sendDeleteMessage(int messageId, @NonNull Date deletedAt) {
+	public void sendDeleteMessage(int messageModelId, @NonNull Date deletedAt) {
 		taskManager.schedule(
 			new OutgoingGroupDeleteMessageTask(
-				messageId,
+				messageModelId,
+				new MessageId(),
 				deletedAt,
 				GroupUtil.getRecipientIdentitiesByFeatureSupport(
 					groupService.getFeatureSupport(group, ThreemaFeature.DELETE_MESSAGES)

+ 1 - 27
app/src/main/java/ch/threema/app/preference/SettingsRateFragment.java

@@ -22,11 +22,8 @@
 package ch.threema.app.preference;
 
 import android.content.ActivityNotFoundException;
-import android.content.Context;
 import android.content.Intent;
-import android.content.pm.PackageManager;
 import android.net.Uri;
-import android.os.Build;
 import android.widget.Toast;
 
 import org.slf4j.Logger;
@@ -133,32 +130,9 @@ public class SettingsRateFragment extends ThreemaPreferenceFragment implements R
 			case NONE:
 				return true;
 			case GOOGLE_WORK:
-				return isInstalledFromPlayStore();
+				return ConfigUtils.isInstalledFromPlayStore(getAppContext());
 			default:
 				return false;
 		}
 	}
-
-	private boolean isInstalledFromPlayStore() {
-		Context context = getAppContext();
-		if (context == null) {
-			logger.warn("Could not get app context.");
-			return false;
-		}
-
-		try {
-			String installerPackageName;
-			PackageManager packageManager = context.getPackageManager();
-			if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
-				installerPackageName = packageManager.getInstallSourceInfo(context.getPackageName()).getInstallingPackageName();
-			} else {
-				installerPackageName = packageManager.getInstallerPackageName(context.getPackageName());
-			}
-
-			return "com.android.vending".equals(installerPackageName);
-		} catch (Exception e) {
-			logger.error("Could not determine package source", e);
-			return false;
-		}
-	}
 }

+ 12 - 5
app/src/main/java/ch/threema/app/preference/ThreemaPreferenceFragment.kt

@@ -61,13 +61,13 @@ abstract class ThreemaPreferenceFragment : PreferenceFragmentCompat(), Connectio
     private var colorTransparent = 0
     private var initialized = false
 
-    var settingsScrollView: NestedScrollView? = null
-    var appBar: AppBarLayout? = null
+    private var settingsScrollView: NestedScrollView? = null
+    private var appBar: AppBarLayout? = null
     var toolbar: MaterialToolbar? = null
-    var toolbarTitle: TextView? = null
+    private var toolbarTitle: TextView? = null
     var title: TextView? = null
-    var connectionIndicator: View? = null
-    var serverConnection: ServerConnection? = null
+    private var connectionIndicator: View? = null
+    private var serverConnection: ServerConnection? = null
 
     override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
         initialized = true
@@ -337,4 +337,11 @@ abstract class ThreemaPreferenceFragment : PreferenceFragmentCompat(), Connectio
     override fun updateConnectionState(connectionState: ConnectionState?) {
         RuntimeUtil.runOnUiThread { ConnectionIndicatorUtil.getInstance().updateConnectionIndicator(connectionIndicator, connectionState) }
     }
+
+    override fun onDestroyView() {
+        appBar = null
+        settingsScrollView = null
+
+        super.onDestroyView()
+    }
 }

+ 6 - 4
app/src/main/java/ch/threema/app/services/ConversationServiceImpl.java

@@ -167,6 +167,7 @@ public class ConversationServiceImpl implements ConversationService {
 		ListenerManager.conversationListeners.handle(listener -> listener.onRemoved(conversationModel));
 	}
 
+	@NonNull
 	@Override
 	public synchronized List<ConversationModel> getAll(boolean forceReloadFromDatabase) {
 		return this.getAll(forceReloadFromDatabase, null);
@@ -177,12 +178,12 @@ public class ConversationServiceImpl implements ConversationService {
 		boolean forceReloadFromDatabase,
 		final @Nullable Filter filter
 	) {
-		logger.debug("getAll forceReloadFromDatabase = " + forceReloadFromDatabase);
+		logger.debug("getAll forceReloadFromDatabase = {}", forceReloadFromDatabase);
 		synchronized (this.conversationCache) {
 			if (forceReloadFromDatabase || !this.initAllLoaded) {
 				this.conversationCache.clear();
 			}
-			if (this.conversationCache.size() == 0) {
+			if (this.conversationCache.isEmpty()) {
 
 				logger.debug("start selecting");
 				for(ConversationModelParser<?, ?, ?> parser: new ConversationModelParser<?, ?, ?>[] {
@@ -639,6 +640,7 @@ public class ConversationServiceImpl implements ConversationService {
 		synchronized (this.conversationCache) {
 			this.conversationCache.clear();
 			logger.debug("Conversation cache reset");
+			this.initAllLoaded = false;
 		}
 		return true;
 	}
@@ -646,7 +648,7 @@ public class ConversationServiceImpl implements ConversationService {
 	@Override
 	public boolean hasConversations() {
 		synchronized (this.conversationCache) {
-			if(this.conversationCache.size() > 0) {
+			if (!this.conversationCache.isEmpty()) {
 				return true;
 			}
 		}
@@ -1108,7 +1110,7 @@ public class ConversationServiceImpl implements ConversationService {
 			boolean addToCache
 		) {
 			// Look up group and create receiver
-			final GroupModel groupModel = groupService.getById(Integer.valueOf(result.identifier));
+			final GroupModel groupModel = groupService.getById(Integer.parseInt(result.identifier));
 			if (groupModel == null) {
 				logger.warn("GroupConversationModelParser: Group with ID {} not found", result.identifier);
 				return null;

+ 5 - 1
app/src/main/java/ch/threema/app/services/GroupServiceImpl.java

@@ -47,6 +47,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.UUID;
+import java.util.stream.Collectors;
 
 import androidx.annotation.AnyThread;
 import androidx.annotation.ColorInt;
@@ -1437,7 +1438,10 @@ public class GroupServiceImpl implements GroupService {
 	public GroupFeatureSupport getFeatureSupport(@NonNull GroupModel groupModel, @ThreemaFeature.Feature long feature) {
 		return new GroupFeatureSupport(
 			feature,
-			new ArrayList<>(OutgoingCspMessageUtilsKt.filterBroadcastIdentity(getMembers(groupModel), groupModel))
+			new ArrayList<>(
+				OutgoingCspMessageUtilsKt.filterBroadcastIdentity(getMembers(groupModel), groupModel)
+					.stream().filter((member) -> !userService.isMe(member.getIdentity())).collect(Collectors.toList())
+			)
 		);
 	}
 }

+ 11 - 6
app/src/main/java/ch/threema/app/tasks/OutgoingContactDeleteMessageTask.kt

@@ -34,7 +34,8 @@ import java.util.Date
 
 class OutgoingContactDeleteMessageTask(
     private val toIdentity: String,
-    private val messageId: Int,
+    private val messageModelId: Int,
+    private val messageId: MessageId,
     private val deletedAt: Date,
     serviceManager: ServiceManager,
 ) : OutgoingCspMessageTask(serviceManager) {
@@ -43,14 +44,15 @@ class OutgoingContactDeleteMessageTask(
     val messageService by lazy { serviceManager.messageService }
 
     override suspend fun invoke(handle: ActiveTaskCodec) {
-        val message = messageService.getContactMessageModel(messageId, true)
-            ?: throw ThreemaException("No contact message model found for messageId=$messageId")
+        val message = messageService.getContactMessageModel(messageModelId, true)
+            ?: throw ThreemaException("No contact message model found for messageId=$messageModelId")
 
         val deleteMessage = DeleteMessage(
             DeleteMessageData(messageId = MessageId.fromString(message.apiMessageId).messageIdLong)
         )
         deleteMessage.toIdentity = toIdentity
         deleteMessage.date = deletedAt
+        deleteMessage.messageId = messageId
 
         sendContactMessage(deleteMessage, null, handle)
     }
@@ -58,20 +60,23 @@ class OutgoingContactDeleteMessageTask(
     override fun serialize(): SerializableTaskData =
         OutgoingContactDeleteMessageData(
             toIdentity,
-            messageId,
+            messageModelId,
+            messageId.messageId,
             deletedAt.time
         )
 
     @Serializable
     class OutgoingContactDeleteMessageData(
         private val toIdentity: String,
-        private val messageId: Int,
+        private val messageModelId: Int,
+        private val messageId: ByteArray,
         private val deletedAt: Long,
     ) : SerializableTaskData {
         override fun createTask(serviceManager: ServiceManager): Task<*, TaskCodec> =
             OutgoingContactDeleteMessageTask(
                 toIdentity,
-                messageId,
+                messageModelId,
+                MessageId(messageId),
                 Date(deletedAt),
                 serviceManager
             )

+ 16 - 11
app/src/main/java/ch/threema/app/tasks/OutgoingContactEditMessageTask.kt

@@ -34,8 +34,9 @@ import java.util.Date
 
 class OutgoingContactEditMessageTask(
     private val toIdentity: String,
-    private val messageId: Int,
-    private val text: String,
+    private val messageModelId: Int,
+    private val messageId: MessageId,
+    private val editedText: String,
     private val editedAt: Date,
     serviceManager: ServiceManager,
 ) : OutgoingCspMessageTask(serviceManager) {
@@ -44,40 +45,44 @@ class OutgoingContactEditMessageTask(
     private val messageService by lazy { serviceManager.messageService }
 
     override suspend fun invoke(handle: ActiveTaskCodec) {
-        val message = messageService.getContactMessageModel(messageId, true)
-                ?: throw ThreemaException("No contact message model found for messageId=$messageId")
+        val message = messageService.getContactMessageModel(messageModelId, true)
+                ?: throw ThreemaException("No contact message model found for messageId=$messageModelId")
 
         val editMessage = EditMessage(
             EditMessageData(
                 messageId = MessageId.fromString(message.apiMessageId).messageIdLong,
-                text = text
+                text = editedText
             )
         )
         editMessage.toIdentity = toIdentity
         editMessage.date = editedAt
+        editMessage.messageId = messageId
 
         sendContactMessage(editMessage, null, handle)
     }
 
     override fun serialize(): SerializableTaskData = OutgoingContactEditMessageData(
         toIdentity,
-        messageId,
-        text,
+        messageModelId,
+        messageId.messageId,
+        editedText,
         editedAt.time
     )
 
     @Serializable
     class OutgoingContactEditMessageData(
         private val toIdentity: String,
-        private val messageId: Int,
-        private val text: String,
+        private val messageModelId: Int,
+        private val messageId: ByteArray,
+        private val editedText: String,
         private val editedAt: Long
     ) : SerializableTaskData {
         override fun createTask(serviceManager: ServiceManager): Task<*, TaskCodec> =
             OutgoingContactEditMessageTask(
                 toIdentity,
-                messageId,
-                text,
+                messageModelId,
+                MessageId(messageId),
+                editedText,
                 Date(editedAt),
                 serviceManager
             )

+ 20 - 9
app/src/main/java/ch/threema/app/tasks/OutgoingGroupDeleteMessageTask.kt

@@ -33,7 +33,8 @@ import kotlinx.serialization.Serializable
 import java.util.Date
 
 class OutgoingGroupDeleteMessageTask(
-    private val messageId: Int,
+    private val messageModelId: Int,
+    private val messageId: MessageId,
     private val deletedAt: Date,
     private val recipientIdentities: Set<String>,
     serviceManager: ServiceManager,
@@ -45,10 +46,10 @@ class OutgoingGroupDeleteMessageTask(
     private val messageService by lazy { serviceManager.messageService }
 
     override suspend fun invoke(handle: ActiveTaskCodec) {
-        val message = messageService.getGroupMessageModel(messageId, true)
-            ?: throw ThreemaException("No group message model found for messageId=$messageId")
+        val message = messageService.getGroupMessageModel(messageModelId, true)
+            ?: throw ThreemaException("No group message model found for messageId=$messageModelId")
 
-        val apiMessageId = MessageId.fromString(message.apiMessageId)
+        val editedMessageIdLong = MessageId.fromString(message.apiMessageId).messageIdLong
 
         val group = groupService.getById(message.groupId)
             ?: throw ThreemaException("No group model found for groupId=${message.groupId}")
@@ -57,8 +58,11 @@ class OutgoingGroupDeleteMessageTask(
             group,
             recipientIdentities,
             null,
-            apiMessageId,
-            createAbstractMessage =  { createDeleteMessage(apiMessageId.messageIdLong, deletedAt) },
+            messageId,
+            createAbstractMessage =  { createDeleteMessage(
+                editedMessageIdLong,
+                deletedAt
+            ) },
             handle
         )
     }
@@ -71,17 +75,24 @@ class OutgoingGroupDeleteMessageTask(
         return deleteMessage
     }
 
-    override fun serialize(): SerializableTaskData = OutgoingGroupDeleteMessageData(messageId, deletedAt.time, recipientIdentities)
+    override fun serialize(): SerializableTaskData = OutgoingGroupDeleteMessageData(
+        messageModelId,
+        messageId.messageId,
+        deletedAt.time,
+        recipientIdentities
+    )
 
     @Serializable
     class OutgoingGroupDeleteMessageData(
-        private val messageId: Int,
+        private val messageModelId: Int,
+        private val messageId: ByteArray,
         private val deletedAt: Long,
         private val recipientIdentities: Set<String>
     ) : SerializableTaskData {
         override fun createTask(serviceManager: ServiceManager): Task<*, TaskCodec> =
             OutgoingGroupDeleteMessageTask(
-                messageId,
+                messageModelId,
+                MessageId(messageId),
                 Date(deletedAt),
                 recipientIdentities,
                 serviceManager

+ 22 - 18
app/src/main/java/ch/threema/app/tasks/OutgoingGroupEditMessageTask.kt

@@ -33,11 +33,12 @@ import kotlinx.serialization.Serializable
 import java.util.Date
 
 class OutgoingGroupEditMessageTask(
-        private val messageId: Int,
-        private val text: String,
-        private val editedAt: Date,
-        private val recipientIdentities: Set<String>,
-        serviceManager: ServiceManager,
+    private val messageModelId: Int,
+    private val messageId: MessageId,
+    private val editedText: String,
+    private val editedAt: Date,
+    private val recipientIdentities: Set<String>,
+    serviceManager: ServiceManager,
 ) : OutgoingCspMessageTask(serviceManager) {
 
     override val type: String = "OutgoingGroupEditMessageTask"
@@ -46,20 +47,20 @@ class OutgoingGroupEditMessageTask(
     private val messageService by lazy { serviceManager.messageService }
 
     override suspend fun invoke(handle: ActiveTaskCodec) {
-        val message = messageService.getGroupMessageModel(messageId, true)
-                ?: throw ThreemaException("No group message model found for messageId=$messageId")
-
-        val apiMessageId = MessageId.fromString(message.apiMessageId)
+        val message = messageService.getGroupMessageModel(messageModelId, true)
+                ?: throw ThreemaException("No group message model found for messageId=$messageModelId")
 
         val group = groupService.getById(message.groupId)
             ?: throw ThreemaException("No group model found for groupId=${message.groupId}")
 
+        val editedMessageId = MessageId.fromString(message.apiMessageId).messageIdLong
+
         sendGroupMessage(
                 group,
                 groupService.getGroupIdentities(group).toSet(),
                 null,
-                apiMessageId,
-                createAbstractMessage =  { createEditMessage(apiMessageId.messageIdLong, editedAt) },
+                messageId,
+                createAbstractMessage =  { createEditMessage(editedMessageId, editedAt) },
                 handle
         )
     }
@@ -68,7 +69,7 @@ class OutgoingGroupEditMessageTask(
         val editMessage = GroupEditMessage(
             EditMessageData(
                 messageId = messageId,
-                text = text
+                text = editedText
             )
         )
         editMessage.date = date
@@ -76,23 +77,26 @@ class OutgoingGroupEditMessageTask(
     }
 
     override fun serialize(): SerializableTaskData = OutgoingGroupEditMessageData(
-        messageId,
-        text,
+        messageModelId,
+        messageId.messageId,
+        editedText,
         editedAt.time,
         recipientIdentities
     )
 
     @Serializable
     class OutgoingGroupEditMessageData(
-        private val messageId: Int,
-        private val text: String,
+        private val messageModelId: Int,
+        private val messageId: ByteArray,
+        private val editedText: String,
         private val editedAt: Long,
         private val recipientIdentities: Set<String>
     ) : SerializableTaskData {
         override fun createTask(serviceManager: ServiceManager): Task<*, TaskCodec> =
             OutgoingGroupEditMessageTask(
-                messageId,
-                text,
+                messageModelId,
+                MessageId(messageId),
+                editedText,
                 Date(editedAt),
                 recipientIdentities,
                 serviceManager

+ 32 - 0
app/src/main/java/ch/threema/app/utils/ConfigUtils.java

@@ -1650,4 +1650,36 @@ public class ConfigUtils {
 
 		return new int[]{x, y, viewableHeight};
 	}
+
+	public static boolean isInstalledFromStore(@Nullable Context context) {
+		String installerPackageName = getInstallerPackageName(context);
+		return "com.android.vending".equals(installerPackageName) || "com.huawei.appmarket".equals(installerPackageName);
+	}
+
+	public static boolean isInstalledFromPlayStore(@Nullable Context context) {
+		String installerPackageName = getInstallerPackageName(context);
+		return "com.android.vending".equals(installerPackageName);
+	}
+
+	private static @Nullable String getInstallerPackageName(@Nullable Context context) {
+		if (context == null) {
+			logger.warn("Could not get context.");
+			return  null;
+		}
+
+		try {
+			String installerPackageName;
+			PackageManager packageManager = context.getPackageManager();
+			if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+				installerPackageName = packageManager.getInstallSourceInfo(context.getPackageName()).getInstallingPackageName();
+			} else {
+				installerPackageName = packageManager.getInstallerPackageName(context.getPackageName());
+			}
+
+			return installerPackageName;
+		} catch (Exception e) {
+			logger.error("Could not determine package source", e);
+			return null;
+		}
+	}
 }

+ 1 - 1
app/src/main/java/ch/threema/app/utils/LinkifyUtil.java

@@ -395,7 +395,7 @@ public class LinkifyUtil {
 		try {
 			context.startActivity(intent);
 		} catch (ActivityNotFoundException e) {
-			Toast.makeText(context, R.string.no_activity_for_mime_type, Toast.LENGTH_SHORT).show();
+			Toast.makeText(context, R.string.no_activity_for_intent, Toast.LENGTH_SHORT).show();
 		}
 	}
 

+ 1 - 1
app/src/main/res/color/wizard_button_text_inverse.xml

@@ -4,5 +4,5 @@
 		  android:color="@color/wizard_color_accent"/>
 	<item android:state_focused="true"
 		  android:color="@color/wizard_color_accent"/>
-	<item android:color="@color/wizard_color_primary" />
+	<item android:color="@color/wizard_color_text_on_primary" />
 </selector>

+ 8 - 0
app/src/main/res/color/wizard_button_text_inverse_consumer.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_pressed="true"
+        android:color="@color/wizard_color_accent_consumer"/>
+    <item android:state_focused="true"
+        android:color="@color/wizard_color_accent_consumer"/>
+    <item android:color="@color/wizard_color_text_on_primary" />
+</selector>

+ 9 - 0
app/src/main/res/drawable/ic_app_icon_consumer.xml

@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="256dp" android:viewportHeight="1024" android:viewportWidth="1024" android:width="256dp">
+      
+    <path android:fillColor="#323232" android:fillType="evenOdd" android:pathData="M85,0h854c47,0 85,38.1 85,85v854c0,47 -38.1,85 -85,85H85c-47,0 -85,-38.1 -85,-85V85C0,38.1 38.1,0 85,0z"/>
+      
+    <path android:fillColor="#FFFFFF" android:fillType="evenOdd" android:pathData="M367.8,688.8L203,730l35.2,-140.9c-34.9,-46 -55.2,-101.2 -55.2,-160.6C183,268.6 330.3,139 512,139s329,129.6 329,289.5S693.7,718 512,718C460.3,718 411.4,707.5 367.8,688.8L367.8,688.8zM418.7,404.5H415c-8.3,0 -15,6.7 -15,15V551c0,8.3 6.7,15 15,15h194c8.3,0 15,-6.7 15,-15V419.5c0,-8.3 -6.7,-15 -15,-15h-3.7v-37.3c0,-51.4 -41.8,-93.2 -93.4,-93.2c-51.5,0 -93.3,41.8 -93.3,93.2v37.3H418.7zM568,404.5H456v-37.3c0,-30.9 25.1,-55.9 56,-55.9c31,0 56,25.1 56,55.9C568,387.8 568,400.2 568,404.5z"/>
+      
+    <path android:fillColor="#05A63F" android:fillType="evenOdd" android:pathData="M568,848c0,30.9 -25,56 -56,56c-30.9,0 -55.9,-25.1 -55.9,-56s25,-56 55.9,-56S568,817.1 568,848zM366,848c0,30.9 -25,56 -56,56c-30.9,0 -55.9,-25.1 -55.9,-56s25,-56 55.9,-56C341,792 366,817.1 366,848zM769.9,848c0,30.9 -25,56 -56,56c-30.9,0 -55.9,-25.1 -55.9,-56s25,-56 55.9,-56C744.9,792 769.9,817.1 769.9,848z"/>
+    
+</vector>

File diff suppressed because it is too large
+ 8 - 0
app/src/main/res/drawable/logo_main_consumer.xml


+ 8 - 0
app/src/main/res/drawable/work_intro_consumer_notice_background.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+
+    <corners android:radius="8dp" />
+    <solid android:color="@color/md_theme_light_surface" />
+</shape>

+ 1 - 1
app/src/main/res/layout-h533dp/activity_wizard_intro.xml

@@ -46,7 +46,7 @@
 			android:layout_height="wrap_content"
 			android:layout_marginTop="8dp"
 			android:text="@string/new_wizard_lets_get_started"
-			android:textColor="@color/wizard_color_primary"
+			android:textColor="@color/wizard_color_text_on_primary"
 			android:textSize="30dp" />
 
 		<TextView

+ 12 - 21
app/src/main/res/layout/activity_enter_serial.xml

@@ -4,11 +4,11 @@
             android:id="@+id/top_view"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:fillViewport="true">
+            android:fillViewport="true"
+            android:background="@android:color/black">
 
 	<FrameLayout android:layout_width="match_parent"
-				 android:layout_height="wrap_content"
-				 android:background="@android:color/black">
+				 android:layout_height="wrap_content">
 
 	<ImageView
 			android:id="@+id/wizard_background"
@@ -29,16 +29,15 @@
 			android:paddingRight="@dimen/wizard_contents_padding_horizontal"
 			android:paddingTop="@dimen/wizard_contents_padding">
 
-		<TextView
-				style="@style/WizardTitleText"
-				android:id="@+id/enter_serial_welcome_title"
-				android:layout_width="wrap_content"
-				android:layout_height="wrap_content"
-				android:text="@string/new_wizard_welcome"
-				android:gravity="center_horizontal"
-				android:layout_centerHorizontal="true"
-				android:layout_marginTop="8dp"
-				/>
+        <ImageView
+            android:id="@+id/enter_serial_welcome_title"
+            android:src="@drawable/logo_main_white"
+            android:layout_width="wrap_content"
+            android:layout_height="64dp"
+            android:importantForAccessibility="no"
+            android:scaleX="1.5"
+            android:scaleY="1.5"
+            android:layout_centerHorizontal="true" />
 
 		<TextView
 			style="@style/WizardMediumText"
@@ -48,7 +47,6 @@
 			android:layout_below="@id/enter_serial_welcome_title"
 			android:layout_centerHorizontal="true"
 			android:layout_marginBottom="5dp"
-			android:layout_marginTop="@dimen/wizard_paragraph_height"
 			android:gravity="center_horizontal" />
 
 		<LinearLayout android:id="@+id/unlock_layout"
@@ -114,13 +112,6 @@
 				android:textColor="@color/material_red"
 				android:id="@+id/unlock_state"/>
 
-		<TextView
-			style="@style/WizardMediumText"
-			android:id="@+id/private_explain"
-			android:visibility="visible"
-			android:layout_width="0dp"
-			android:layout_height="0dp"/>
-
 	</RelativeLayout>
 
 	</FrameLayout>

+ 46 - 0
app/src/main/res/layout/activity_work_intro.xml

@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@android:color/black">
+
+    <ImageView
+        android:id="@+id/work_intro_background"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:adjustViewBounds="true"
+        android:clickable="false"
+        android:src="@drawable/background_pic"
+        android:scaleType="centerCrop"
+        android:importantForAccessibility="no"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintLeft_toLeftOf="parent" />
+
+    <include
+        android:id="@+id/work_intro_login"
+        layout="@layout/work_intro_login"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="@dimen/wizard_contents_padding"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintWidth_max="480dp" />
+
+    <include
+        layout="@layout/work_intro_consumer_notice"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="48dp"
+        android:layout_marginRight="16dp"
+        android:layout_marginLeft="16dp"
+        app:layout_constraintTop_toBottomOf="@id/work_intro_login"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintWidth_max="480dp" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 75 - 0
app/src/main/res/layout/work_intro_consumer_notice.xml

@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:background="@drawable/work_intro_consumer_notice_background"
+    android:padding="12dp">
+
+    <ImageView
+        android:id="@+id/consumer_notice_app_icon"
+        android:src="@drawable/ic_app_icon_consumer"
+        android:layout_width="64dp"
+        android:layout_height="64dp"
+        android:importantForAccessibility="no"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintLeft_toLeftOf="parent" />
+
+    <ImageView
+        android:id="@+id/consumer_notice_app_logo"
+        android:layout_width="wrap_content"
+        android:layout_height="48dp"
+        android:src="@drawable/logo_main_consumer"
+        android:contentDescription="Threema"
+        android:scaleX=".6"
+        android:scaleY=".6"
+        app:layout_constraintTop_toBottomOf="@id/consumer_notice_app_icon"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintLeft_toLeftOf="parent" />
+
+    <!--  negative marginTop because of weird padding around logo  -->
+    <TextView
+        android:textAppearance="@style/TextAppearance.AppCompat.Medium"
+        android:id="@+id/consumer_notice_subtitle"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="-6dp"
+        android:text="@string/consumer_notice_subtitle"
+        android:gravity="center_horizontal"
+        android:textColor="@color/md_theme_light_onSurface"
+        app:layout_constraintTop_toBottomOf="@id/consumer_notice_app_logo"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintLeft_toLeftOf="parent" />
+
+    <TextView
+        style="@style/WizardSmallText"
+        android:id="@+id/consumer_notice_description"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="@string/consumer_notice_description"
+        android:gravity="center_horizontal"
+        android:layout_marginTop="16dp"
+        android:textColor="@color/md_theme_light_onSurface"
+        app:layout_constraintTop_toBottomOf="@id/consumer_notice_subtitle"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintLeft_toLeftOf="parent" />
+
+    <androidx.appcompat.widget.AppCompatButton
+        style="@style/WizardButtonRegular"
+        android:id="@+id/consumer_notice_app_store_button"
+        android:layout_height="wrap_content"
+        android:layout_width="0dp"
+        android:text="@string/consumer_notice_playstore_link_description"
+        android:gravity="center"
+        android:layout_marginTop="16dp"
+        android:textColor="@color/wizard_button_text_inverse_consumer"
+        android:backgroundTint="@color/wizard_color_accent_consumer"
+        android:clickable="true"
+        android:focusable="true"
+        app:layout_constraintTop_toBottomOf="@id/consumer_notice_description"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintLeft_toLeftOf="parent" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 65 - 0
app/src/main/res/layout/work_intro_login.xml

@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:background="@color/md_theme_dark_background">
+
+    <ImageView
+        android:id="@+id/work_intro_logo"
+        android:src="@drawable/logo_main_white"
+        android:layout_width="wrap_content"
+        android:layout_height="64dp"
+        android:importantForAccessibility="no"
+        android:scaleX="1.5"
+        android:scaleY="1.5"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintLeft_toLeftOf="parent" />
+
+    <TextView
+        style="@style/WorkIntroSubTitleText"
+        android:id="@+id/work_intro_slogan"
+        android:text="@string/work_intro_subtitle"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:textColor="@color/md_theme_dark_onSurface"
+        android:layout_marginRight="32dp"
+        android:layout_marginLeft="32dp"
+        android:gravity="center"
+        app:layout_constraintTop_toBottomOf="@id/work_intro_logo"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintLeft_toLeftOf="parent" />
+
+    <TextView
+        style="@style/WizardSmallText"
+        android:id="@+id/work_intro_more_link"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="@string/work_intro_more_link_text"
+        android:gravity="center"
+        android:clickable="true"
+        android:focusable="true"
+        android:linksClickable="true"
+        android:layout_marginTop="32dp"
+        android:layout_marginRight="32dp"
+        android:layout_marginLeft="32dp"
+        app:layout_constraintTop_toBottomOf="@id/work_intro_slogan"
+        tools:textColor="@color/md_theme_dark_primary"/>
+
+    <androidx.appcompat.widget.AppCompatButton
+        style="@style/WizardButtonRegular"
+        android:id="@+id/work_intro_login_button"
+        android:layout_height="wrap_content"
+        android:layout_width="0dp"
+        android:text="@string/work_intro_login"
+        android:gravity="center"
+        android:layout_marginTop="48dp"
+        android:layout_marginRight="16dp"
+        android:layout_marginLeft="16dp"
+        app:layout_constraintTop_toBottomOf="@id/work_intro_more_link"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintLeft_toLeftOf="parent" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 9 - 0
app/src/main/res/values-cs/strings.xml

@@ -513,6 +513,7 @@ https://myid.threema.ch/revoke</string>
     <string name="file_placeholder">Soubor</string>
     <string name="internal_storage">Vnitřní úložiště</string>
     <string name="no_activity_for_mime_type">Nebyla nalezena žádná aplikace schopná otevřít tento soubor.</string>
+    <string name="no_activity_for_intent">Nebyla nalezena žádná aplikace.</string>
     <string name="open_from">Otevřít z</string>
     <string name="file_one_contact_not_supported">Kontakt %1$s nemůže přijímat soubory.</string>
     <string name="file_x_contact_not_supported">Upozornění: Následující počet kontaktů: %1$d nemůže přijmout váš soubor.</string>
@@ -1018,6 +1019,7 @@ přátelům vás automaticky najít, pokud vás mají v adresáři svého telef
     <string name="system_default">Systémové nastavení</string>
     <string name="open_in_maps_app">Otevřít v aplikaci Mapy</string>
     <string name="delete">Odstranit</string>
+    <string name="delete_from_this_device">Odstranit z tohoto zařízení</string>
     <string name="delete_for_all">Odstranit u všech</string>
     <string name="message_was_deleted">Tato zpráva byla odstraněna</string>
     <string name="continue_recording">Pokračovat v nahrávání</string>
@@ -1550,6 +1552,13 @@ přátelům vás automaticky najít, pokud vás mají v adresáři svého telef
     <string name="edit_message_not_supported_for_all_group_members">Následující členové skupiny nebudou moci vidět vaše úpravy: %1$s</string>
     <string name="edit_message_not_supported_for_any_group_members">Zprávu nelze upravit, protože žádný z členů skupiny nemá verzi aplikace, která podporuje tuto funkci.</string>
     <string name="delete_message_not_supported_for_all_group_members">Tato zpráva nebude smazána pro následující členy skupiny: %1$s</string>
+    <string name="work_intro_more_link_text">Zjistěte více o Threema Work</string>
+    <string name="work_intro_subtitle">Bezpečný messenger pro firmy.</string>
+    <string name="work_intro_login">Přihlášení %1$s</string>
+    <string name="consumer_notice_description">Jestliže jste soukromý uživatel, stáhněte si standardní aplikaci Threema.</string>
+    <string name="consumer_notice_playstore_link_description">Threema v Obchodu Google Play</string>
+    <string name="consumer_notice_appgallery_link_description">Threema v AppGallery</string>
+    <string name="consumer_notice_subtitle">Pro soukromé účely</string>
     <plurals name="contacts_counter_label">
         <item quantity="few">%d kontakty</item>
         <item quantity="many">%d kontaktů</item>

+ 10 - 0
app/src/main/res/values-de/strings.xml

@@ -588,6 +588,7 @@ sicheren Ort gesichert oder ausgedruckt haben.</string>
 	<string name="file_placeholder">Datei</string>
 	<string name="internal_storage">Int. Speicher</string>
 	<string name="no_activity_for_mime_type">Keine passende App für diese Datei gefunden.</string>
+    <string name="no_activity_for_intent">Keine passende App gefunden.</string>
 	<string name="open_from">Öffnen von</string>
 	<string name="file_one_contact_not_supported">%1$s kann noch keine Dateien erhalten.</string>
 	<string name="file_x_contact_not_supported">Warnung: %1$d Kontakte können keine Dateien erhalten.</string>
@@ -1127,6 +1128,7 @@ sicheren Ort gesichert oder ausgedruckt haben.</string>
 	<string name="system_default">Systemstandard</string>
 	<string name="open_in_maps_app">In Maps-App öffnen</string>
 	<string name="delete">Löschen</string>
+    <string name="delete_from_this_device">Von diesem Gerät löschen</string>
     <string name="delete_for_all">Für alle löschen</string>
     <string name="message_was_deleted">Diese Nachricht wurde gelöscht</string>
 	<string name="continue_recording">Weiter aufnehmen</string>
@@ -1657,6 +1659,14 @@ sicheren Ort gesichert oder ausgedruckt haben.</string>
 
     <string name="delete_message_not_supported_for_all_group_members">Bei folgenden Gruppenmitgliedern wird diese Nachricht nicht gelöscht: %1$s</string>
 
+    <string name="work_intro_more_link_text">Mehr über Threema Work erfahren</string>
+    <string name="work_intro_subtitle">Der sichere Business-Messenger\nfür Unternehmen.</string>
+    <string name="work_intro_login">Anmeldung %1$s</string>
+    <string name="consumer_notice_description">Wenn Sie die App privat nutzen möchten, laden Sie bitte die reguläre Threema-App herunter.</string>
+    <string name="consumer_notice_playstore_link_description">Threema im Play Store</string>
+    <string name="consumer_notice_appgallery_link_description">Threema in AppGallery</string>
+    <string name="consumer_notice_subtitle">Für private Nutzung</string>
+
 	<plurals name="contacts_counter_label">
 		<item quantity="one">%d Kontakt</item>
 		<item quantity="other">%d Kontakte</item>

+ 9 - 0
app/src/main/res/values-es/strings.xml

@@ -515,6 +515,7 @@ Introduzca una pregunta para su sondeo.</string>
     <string name="file_placeholder">Archivo</string>
     <string name="internal_storage">Almacenamiento interno</string>
     <string name="no_activity_for_mime_type">No hay aplicaciones que puedan abrir este archivo.</string>
+    <string name="no_activity_for_intent">No se encontró ninguna app.</string>
     <string name="open_from">Abrir desde</string>
     <string name="file_one_contact_not_supported">%1$s no puede recibir archivos.</string>
     <string name="file_x_contact_not_supported">Aviso: %1$d contactos no pueden recibir el archivo.</string>
@@ -1026,6 +1027,7 @@ almacenado.</string>
     <string name="system_default">Estándar del sistema</string>
     <string name="open_in_maps_app">Abrir en Maps</string>
     <string name="delete">Borrar</string>
+    <string name="delete_from_this_device">Eliminar de este dispositivo</string>
     <string name="delete_for_all">Eliminar para todos</string>
     <string name="message_was_deleted">Este mensaje se ha eliminado</string>
     <string name="continue_recording">Continuar grabando</string>
@@ -1558,6 +1560,13 @@ almacenado.</string>
     <string name="edit_message_not_supported_for_all_group_members">Los siguientes miembros del grupo no podrán ver tus ediciones: %1$s</string>
     <string name="edit_message_not_supported_for_any_group_members">No es posible editar el mensaje porque ningún miembro del grupo tiene una versión de la aplicación que admita esta función.</string>
     <string name="delete_message_not_supported_for_all_group_members">Este mensaje no se eliminará para los siguientes miembros del grupo: %1$s</string>
+    <string name="work_intro_more_link_text">Obtener más información sobre Threema Work</string>
+    <string name="work_intro_subtitle">El mensajero empresarial seguro\npara empresas.</string>
+    <string name="work_intro_login">Iniciar sesión %1$s</string>
+    <string name="consumer_notice_description">Descarga la aplicación normal de Threema si eres un particular.</string>
+    <string name="consumer_notice_playstore_link_description">Threema en Google Play Store</string>
+    <string name="consumer_notice_appgallery_link_description">Threema en la AppGallery</string>
+    <string name="consumer_notice_subtitle">Para uso privado</string>
     <plurals name="contacts_counter_label">
         <item quantity="one">%d contacto</item>
         <item quantity="other">%d contactos</item>

+ 9 - 0
app/src/main/res/values-fr/strings.xml

@@ -513,6 +513,7 @@ Veuillez saisir une question pour votre enquête.</string>
     <string name="file_placeholder">Fichier</string>
     <string name="internal_storage">Stockage interne</string>
     <string name="no_activity_for_mime_type">Aucune application trouvée pour ouvrir ce fichier.</string>
+    <string name="no_activity_for_intent">Aucune application trouvée.</string>
     <string name="open_from">Ouvrir depuis</string>
     <string name="file_one_contact_not_supported">%1$s ne peut pas recevoir de fichiers.</string>
     <string name="file_x_contact_not_supported">Attention : %1$d contacts ne peuvent pas recevoir votre fichier.</string>
@@ -1017,6 +1018,7 @@ Veuillez saisir une question pour votre enquête.</string>
     <string name="system_default">Paramètre système par défaut</string>
     <string name="open_in_maps_app">Ouvrir dans l\'app de cartes</string>
     <string name="delete">Supprimer</string>
+    <string name="delete_from_this_device">Supprimer de cet appareil</string>
     <string name="delete_for_all">Supprimer pour tous</string>
     <string name="message_was_deleted">Ce message a été supprimé</string>
     <string name="continue_recording">Continuer l\'enregistrement</string>
@@ -1549,6 +1551,13 @@ Veuillez saisir une question pour votre enquête.</string>
     <string name="edit_message_not_supported_for_all_group_members">Les membres suivants groupe ne pourront pas voir vos modifications : %1$s</string>
     <string name="edit_message_not_supported_for_any_group_members">Impossible de modifier le message, car aucun membre du groupe ne dispose d\'une version de l\'application prenant en charge cette fonctionnalité.</string>
     <string name="delete_message_not_supported_for_all_group_members">Ce message ne sera pas supprimé pour les membres suivants du groupe : %1$s</string>
+    <string name="work_intro_more_link_text">En savoir plus sur Threema Work</string>
+    <string name="work_intro_subtitle">La messagerie instantanée sécurisée\npour les entreprises.</string>
+    <string name="work_intro_login">Connecter %1$s</string>
+    <string name="consumer_notice_description">Veuillez télécharger l\'application Threema standard si vous êtes un utilisateur privé.</string>
+    <string name="consumer_notice_playstore_link_description">Threema sur le Play Store</string>
+    <string name="consumer_notice_appgallery_link_description">Threema dans l\'AppGallery</string>
+    <string name="consumer_notice_subtitle">Pour un usage privé</string>
     <plurals name="contacts_counter_label">
         <item quantity="one">%d contact</item>
         <item quantity="other">%d contacts</item>

+ 7 - 0
app/src/main/res/values-gsw/strings.xml

@@ -306,6 +306,8 @@
     <string name="state_dialog_created">Erstellt</string>
     <string name="state_dialog_posted">Gschickt</string>
     <string name="state_dialog_modified">Aktualisiert</string>
+    <string name="state_dialog_edited">Bearbeitet</string>
+    <string name="state_dialog_deleted">Glöscht</string>
     <string name="state_dialog_status">Status</string>
     <string name="title_tab_recent">Zletscht</string>
     <string name="no_recent_conversations">Kei Chats gfunde</string>
@@ -1533,6 +1535,11 @@
     <string name="media_gallery_animated_webps">Animierti WebPs</string>
     <string name="unsupported_image_type">Nöd understützte Bildtyp: %s</string>
     <string name="application_setup_steps_failed">Zum de Status vo Ihrne Kontäkt z’überprüefe, bruuchts e aktivi Internetverbindig. Bitte stelled Sie sicher, dass Sie mitem Internet verbunde sind, und versueched Sie’s nomal.</string>
+    <string name="add_contact_failed">De Kontakt hät nöd chöne dezue tah werde</string>
+    <string name="edit_message_not_supported_for_contact">D’Nachricht cha nöd bearbeitet werde, wil d’App-Version vom Empfänger die Funktion nöd understützt.</string>
+    <string name="edit_message_not_supported_for_all_group_members">Di folgende Gruppemitglieder werded Ihri Änderige nöd gseh: %1$s</string>
+    <string name="edit_message_not_supported_for_any_group_members">D’Nachricht cha nöd bearbeitet werde, wil keis Gruppemitglied en App-Version hät, wo die Funktion understützt.</string>
+    <string name="delete_message_not_supported_for_all_group_members">Die Nachricht wird bi folgende Gruppemitglieder nöd glöscht: %1$s</string>
     <plurals name="contacts_counter_label">
         <item quantity="other">%d Kontäkt</item>
     </plurals>

+ 1 - 1
app/src/main/res/values-it/strings.xml

@@ -1033,7 +1033,7 @@ automaticamente in caso di inattività dopo un intervallo predefinito (solo cara
     <string name="system_default">Impostazioni predefinite di sistema</string>
     <string name="open_in_maps_app">Apri in Mappe</string>
     <string name="delete">Elimina</string>
-    <string name="message_was_deleted">Messaggio cancellato</string>
+    <string name="delete_for_all">Elimina per tutti</string>
     <string name="continue_recording">Continua registrazione</string>
     <string name="whatsnew_title">Nuove funzioni in %1$s 5.2</string>
     <string name="whatsnew_headline"><![CDATA[

+ 9 - 0
app/src/main/res/values-nl-rNL/strings.xml

@@ -516,6 +516,7 @@ Voer een vraag in voor uw poll.</string>
     <string name="file_placeholder">Bestand</string>
     <string name="internal_storage">Interne opslag</string>
     <string name="no_activity_for_mime_type">Geen app gevonden om dit bestand te openen.</string>
+    <string name="no_activity_for_intent">Geen app gevonden.</string>
     <string name="open_from">Openen vanaf</string>
     <string name="file_one_contact_not_supported">%1$s kan geen bestanden ontvangen.</string>
     <string name="file_x_contact_not_supported">Waarschuwing: %1$d contactpersonen kunnen uw bestand niet ontvangen.</string>
@@ -1019,6 +1020,7 @@ Weet u zeker dat u Threema anoniem wil gebruiken?</string>
     <string name="system_default">Standaardinstellingen van systeem</string>
     <string name="open_in_maps_app">Openen in Maps-app</string>
     <string name="delete">Verwijderen</string>
+    <string name="delete_from_this_device">Verwijderen van dit apparaat</string>
     <string name="delete_for_all">Voor iedereen verwijderen</string>
     <string name="message_was_deleted">Dit bericht is verwijderd</string>
     <string name="continue_recording">Doorgaan met opnemen</string>
@@ -1551,6 +1553,13 @@ Weet u zeker dat u Threema anoniem wil gebruiken?</string>
     <string name="edit_message_not_supported_for_all_group_members">De volgende groepsleden kunnen uw bewerkingen niet zien: %1$s</string>
     <string name="edit_message_not_supported_for_any_group_members">Het bericht is niet bewerkt omdat geen van de groepsleden een app-versie heeft die deze functie ondersteunt.</string>
     <string name="delete_message_not_supported_for_all_group_members">Dit bericht wordt niet verwijderd voor de volgende groepsleden: %1$s</string>
+    <string name="work_intro_more_link_text">Kom meer te weten over Threema Work</string>
+    <string name="work_intro_subtitle">De veilige zakelijke messenger \nvoor bedrijven.</string>
+    <string name="work_intro_login">Inloggen bij %1$s</string>
+    <string name="consumer_notice_description">Download de reguliere Threema-app als u een particuliere gebruiker bent.</string>
+    <string name="consumer_notice_playstore_link_description">Threema in de Play Store</string>
+    <string name="consumer_notice_appgallery_link_description">Threema in de AppGallery</string>
+    <string name="consumer_notice_subtitle">Voor privégebruik</string>
     <plurals name="contacts_counter_label">
         <item quantity="one">%d contactpersoon</item>
         <item quantity="other">%d contactpersonen</item>

+ 9 - 0
app/src/main/res/values-pl/strings.xml

@@ -514,6 +514,7 @@ Wprowadź pytanie do swojej ankiety.</string>
     <string name="file_placeholder">Plik</string>
     <string name="internal_storage">Pamięć wewnętrzna</string>
     <string name="no_activity_for_mime_type">Nie znaleziono aplikacji umożliwiającej otwarcie tego pliku.</string>
+    <string name="no_activity_for_intent">Nie znaleziono aplikacji</string>
     <string name="open_from">Otwórz z</string>
     <string name="file_one_contact_not_supported">%1$s nie może odbierać plików.</string>
     <string name="file_x_contact_not_supported">Ostrzeżenie: Niektóre z Twoich kontaktów (%1$d) nie mogą odbierać plików.</string>
@@ -1033,6 +1034,7 @@ anonimowo?</string>
     <string name="system_default">Domyślne ustawienia systemowe</string>
     <string name="open_in_maps_app">Otwórz w aplikacji Mapy</string>
     <string name="delete">Usuń</string>
+    <string name="delete_from_this_device">Usuń z tego urządzenia</string>
     <string name="delete_for_all">Usuń dla wszystkich</string>
     <string name="message_was_deleted">Ta wiadomość została usunięta</string>
     <string name="continue_recording">Kontynuuj nagrywanie</string>
@@ -1565,6 +1567,13 @@ anonimowo?</string>
     <string name="edit_message_not_supported_for_all_group_members">Następujący członkowie grupy nie będą mogli zobaczyć Twoich edycji: %1$s</string>
     <string name="edit_message_not_supported_for_any_group_members">Nie można edytować wiadomości, ponieważ żaden członek grupy nie posiada wersji aplikacji, która obsługuje tę funkcję.</string>
     <string name="delete_message_not_supported_for_all_group_members">Ta wiadomość nie zostanie usunięta dla następujących członków grupy: %1$s</string>
+    <string name="work_intro_more_link_text">Dowiedz się więcej o Threema Work</string>
+    <string name="work_intro_subtitle">Bezpieczny komunikator biznesowy\ndla firm.</string>
+    <string name="work_intro_login">Zaloguj się %1$s</string>
+    <string name="consumer_notice_description">Prosimy pobrać zwykłą aplikację Threema, jeśli jesteś użytkownikiem prywatnym.</string>
+    <string name="consumer_notice_playstore_link_description">Threema w Sklepie Play</string>
+    <string name="consumer_notice_appgallery_link_description">Threema w AppGallery</string>
+    <string name="consumer_notice_subtitle">Do użytku prywatnego</string>
     <plurals name="contacts_counter_label">
         <item quantity="few">%d kontakty</item>
         <item quantity="many">%d kontaktów</item>

+ 9 - 0
app/src/main/res/values-pt-rBR/strings.xml

@@ -513,6 +513,7 @@ Por favor, insira uma pergunta para a sua enquete.</string>
     <string name="file_placeholder">Arquivo</string>
     <string name="internal_storage">Armazenamento interno</string>
     <string name="no_activity_for_mime_type">Nenhum app encontrado para abrir este arquivo.</string>
+    <string name="no_activity_for_intent">Nenhum app encontrado.</string>
     <string name="open_from">Abrir do</string>
     <string name="file_one_contact_not_supported">%1$s não pode receber arquivos.</string>
     <string name="file_x_contact_not_supported">Aviso: %1$d contatos não podem receber o seu arquivo.</string>
@@ -1018,6 +1019,7 @@ Por favor, insira uma pergunta para a sua enquete.</string>
     <string name="system_default">Padrão do sistema</string>
     <string name="open_in_maps_app">Abrir no Maps</string>
     <string name="delete">Excluir</string>
+    <string name="delete_from_this_device">Excluir deste dispositivo</string>
     <string name="delete_for_all">Excluir para todos</string>
     <string name="message_was_deleted">Esta mensagem foi excluída</string>
     <string name="continue_recording">Continuar gravação</string>
@@ -1550,6 +1552,13 @@ Por favor, insira uma pergunta para a sua enquete.</string>
     <string name="edit_message_not_supported_for_all_group_members">Os seguintes membros do grupo não poderão ver suas edições: %1$s</string>
     <string name="edit_message_not_supported_for_any_group_members">Não é possível editar a mensagem porque nenhum membro do grupo possui uma versão do aplicativo que suporte esse recurso.</string>
     <string name="delete_message_not_supported_for_all_group_members">Esta mensagem não será excluída para os seguintes membros do grupo: %1$s</string>
+    <string name="work_intro_more_link_text">Saiba mais sobre o Threema Work</string>
+    <string name="work_intro_subtitle">O messenger comercial seguro \npara empresas.</string>
+    <string name="work_intro_login">Fazer login %1$s</string>
+    <string name="consumer_notice_description">Baixe o aplicativo comum do Threema se você é um usuário privado.</string>
+    <string name="consumer_notice_playstore_link_description">Threema na Play Store</string>
+    <string name="consumer_notice_appgallery_link_description">Threema na AppGallery</string>
+    <string name="consumer_notice_subtitle">Para uso privado</string>
     <plurals name="contacts_counter_label">
         <item quantity="one">%d contato</item>
         <item quantity="other">%d contatos</item>

+ 120 - 1
app/src/main/res/values-rm/strings.xml

@@ -807,7 +807,7 @@ Endatescha in pled-clav per tes backup da datas.</string>
     <string name="prefs_fix_powermanager_problems">Curreger problems da Huawei</string>
     <string name="prefs_fix_powermanager_problems_desc">Curreger ils problems da retschaiver messadis davosvart sin apparats da Huawei</string>
     <string name="disable_powermanager_explain">Activai il selectur dasper «%s» en il visur suandant per pudair retschaiver messadis davosvart</string>
-    <string name="disable_autostart_explain">P.pl. activar l\'autostart «%s» en il visur suandant. Clicca sin «enavos», cura che ti es a fin.</string>
+    <string name="disable_autostart_explain">P.pl. activar l\'autostart «%s» en il visur suandant. Tippescha sin «enavos», cura che ti es a fin.</string>
     <string name="notification_priority_default">Bass</string>
     <string name="notification_priority_high">Aut</string>
     <string name="notification_priority_max">Maximum</string>
@@ -1364,6 +1364,17 @@ Sche ti midas sin in nov apparat, deinstallescha u deactivescha p.pl. %s sin l\'
     <string name="clear_forward_security_warning">Exequescha questa acziun mo, sch’il support da Threema ta ha dumandà explicitamain da far quai.</string>
     <string name="forward_security_cleared">Stizzà las sesidas da Perfect Forward Secrecy cun quest contact</string>
     <string name="message_without_forward_security">Survegnì in messadi senza Perfect Forward Secrecy. Verifitgescha ch\'il speditur haja deactivà cun intenziun Perfect Forward Secrecy.</string>
+    <string name="forward_security_disabled">Perfect Forward Secrecy è deactivà per quest chat.</string>
+    <string name="forward_security_established">Messadis cun quest contact èn ussa protegids cun Perfect Forward Secrecy.</string>
+    <string name="forward_security_established_rx">Messadis che ti retschaivas en quest chat èn ussa protegids cun Perfect Forward Secrecy.</string>
+    <string name="forward_security_reset">La sesida da Perfect Forward Secrecy è vegnida redefinida. Quai po capitar, sch\'il partenari da chat dovra in nov apparat u installescha da nov l\'applicaziun.</string>
+    <string name="forward_security_reset_simple">La sesida da Perfect Forward Secrecy cun quest contact è vegnida redefinida.</string>
+    <string name="forward_security_message_out_of_order">Retschavì in messadi en la fallada successiun e betg stà pussaivel da decodar el.</string>
+    <string name="forward_security_notification_channel_name">Avertiments da Perfect Forward Secrecy</string>
+    <string name="forward_security_notification_rejected_title">Betg reussì da trametter il messadi</string>
+    <string name="forward_security_notification_rejected_text_contact">I n\'è betg reussì da trametter tut ils messadis a %1$s.</string>
+    <string name="forward_security_notification_rejected_text_group">I n\'è betg reussì da trametter tut ils messadis a «%1$s».</string>
+    <string name="forward_security_notification_rejected_text_generic">I n\'è betg reussì da trametter tut ils messadis.</string>
     <string name="self_updater_installation_failed">Betg reussì da chargiar giu l\'update. P.pl. chargiar giu l\'update da la pagina-web <a href="https://shop.threema.ch/download">https://shop.threema.ch/download</a> ed installar el manualmain.</string>
     <string name="spam_first_contact">Quest chat deriva d\'in contact nunenconuschent</string>
     <string name="spam_report">Annunziar spam</string>
@@ -1375,12 +1386,120 @@ Sche ti midas sin in nov apparat, deinstallescha u deactivescha p.pl. %s sin l\'
     <string name="spam_report_short">Annunziar</string>
     <string name="wizard_incompatible_contact_sync_params">Fixà parameters MDM incumpatibels. Betg pussaivel d\'activar il parameter MDM da Threema th_contact_sync, sche la restricziun DISALLOW_MODIFY_ACCOUNTS è activada. P.pl. contactar tes administratur dal sistem.</string>
     <string name="messages_cannot_be_recovered">Ils messadis na pon betg pli vegnir restaurads.</string>
+    <string name="groups_left_or_dissolved">Gruppas vegnan bandunadas u schliadas e suenter stizzadas.</string>
     <string name="contact_deleted">Stizzà il contact</string>
     <string name="last_added_contact">Agiuntà sco ultim</string>
     <string name="directory_explain_text">Tschertgar sin la glista da l\'interpresa las collavuraturas ed ils collavuraturs che mancan en tia glista da contacts.</string>
     <string name="cannot_display_location">Betg pussaivel da mussar quest lieu.</string>
+    <string name="draw_reply">Resposta dissegnada</string>
+    <string name="drawing">Dissegn</string>
+    <string name="background_color">Colur dal fund davos</string>
+    <string name="send_video_muted">Trametter il video senza tun</string>
+    <string name="send_without_audio">Allontanar l\'audio</string>
+    <string name="edit_filename">Elavurar il num da la datoteca</string>
     <string name="unable_to_restore_identity_because">Betg stà pussaivel da restituir l\'ID. Motiv: %s</string>
     <string name="share_with_app">Parter cun Threema</string>
+    <string name="read_phone_state_dialog_allow">Acceptar</string>
+    <string name="read_phone_state_dialog_disallow">Tuttina cuntinuar</string>
+    <string name="read_phone_state_dialog_never_ask_again">Betg dumandar pli</string>
+    <string name="read_phone_state_dialog_title">In\'autorisaziun è necessaria</string>
+    <string name="read_phone_state_dialog_message">Per evitar che telefonats da Threema interrumpian telefonats regulars, vegn duvrà l\'autorisaziun dal telefon. En cas che l\'autorisaziun na vegn betg dada, interrumpan telefonats da Threema telefonats regulars e viceversa.</string>
+    <string name="read_phone_state_short_message">Per pudair resguardar telefonats currents vegn duvrada l\'autorisaziun dal telefon.</string>
+    <string name="prefs_title_read_phone_state">Dar l\'autorisaziun dal telefon</string>
+    <string name="prefs_title_hibernation">Apps betg duvradas</string>
+    <string name="prefs_summary_hibernation_api_32">Per evitar che Threema na fucziunia betg pli suenter in\'inactivitad pli lunga stos ti deactivar «Berechtigungen löschen und Speicherplatz freigeben» en las configuraziuns dal sistem.</string>
+    <string name="prefs_summary_hibernation_api">Per evitar che Threema na fucziunia betg pli suenter in\'inactivitad pli lunga stos ti deactivar «App-Aktivität bei Nichtnutzung stoppen» en las configuraziuns dal sistem.</string>
+    <string name="unable_to_fetch_configuration">Betg pussaivel da chargiar la configuraziun dal server. P.pl. empruvar pli tard anc ina giada.</string>
+    <string name="rogue_device_warning"><![CDATA[Identifitgà ina colliaziun d\'in auter apparat cun questa ID da Threema. Has ti dacurt duvrà tia ID da Threema sin in auter apparat? <br><br> Sche gea, pos ti ignorar quest messadi. <br><br> Sche na, è tia clav privata eventualmain cumpromessa. P.pl. <a href="https://threema.ch/de/faq/another_connection">suandar nossas recumandaziuns</a> per proteger tes apparat e tias datas avant che crear ina nova ID.]]></string>
+    <string name="fetch2_failure">La sincronisaziun cun il server da configuraziun n\'è betg reussida.</string>
+    <string name="no_members_support_group_calls">Nagin auter commember da la gruppa na po participar a telefonats da gruppa</string>
+    <string name="group_calls">Telefonats da gruppa</string>
+    <string name="prefs_title_group_calls_enable">Activar telefonats da gruppa</string>
+    <string name="group_no_members">Questa gruppa n\'ha nagins ulteriurs commembers.</string>
+    <string name="group_call">Telefonat da gruppa</string>
+    <string name="checking_compatibility">La cumpatibilitad vegn verifitgada ...</string>
+    <string name="group_call_mic_permission_rationale">Per pudair far telefonats da gruppa stos ti permetter l\'access al microfon sut «Autorisaziuns» %s .</string>
+    <string name="group_call_mic_permission_description">Per pudair far telefonats da gruppa è l\'autorisaziun dal microfon necessaria, uschiglio n\'audan ils auters betg tai.</string>
+    <string name="call_mic_permission_description">Per pudair far telefonats da Threema è l\'autorisaziun per il microfon necessaria, uschiglio n\'audan ils auters betg tai.</string>
+    <string name="group_call_camera_permission_rationale">Per ch\'ils auters participants vesian tes maletg, stos ti permetter l\'access a la camera sut «Autorisaziuns» %s .</string>
+    <string name="group_call_phone_permission_description">Per pudair far telefonats da gruppa è l\'autorisaziun per il telefon necessaria, per ch\'il telefonat da gruppa possia vegnir terminà, sche ti prendas encunter in auter telefonat.</string>
+    <string name="call_phone_permission_description">Per pudair far telefonats da Threema è l\'autorisaziun per il telefon necessaria, per ch\'il telefonat da Threema possia vegnir terminà, sche ti prendas encunter in auter telefonat.</string>
+    <string name="group_call_nearby_devices_permission_description">Per pudair far telefonats da gruppa cun in headset da bluetooth è l\'autorisaziun «apparats en la vischinanza» necessaria, per che Threema possia identifitgar in headset da bluetooth.</string>
+    <string name="call_nearby_devices_permission_description">Per pudair far telefonats da Threema cun in headset da bluetooth è l\'autorisaziun «apparats en la vischinanza» necessaria, per che Threema possia identifitgar in headset da bluetooth.</string>
+    <string name="settings">Configuraziuns</string>
+    <string name="leave">Bandunar</string>
+    <string name="fs_key_mismatch">Sbagl da clav</string>
+    <string name="tap_to_resend">Tippar per trametter danovamain</string>
+    <string name="group_calls_tooltip_title">Telefonats da gruppa</string>
+    <string name="group_calls_tooltip_text">Tippar qua per envidar ils commembers da la gruppa ad in telefonat communabel. Ils commembers da la gruppa survegnan in messadi e decidan sezs, schebain els participeschan u betg.</string>
+    <string name="prefs_title_calls">Telefonats segirs</string>
+    <string name="prefs_sum_group_calls_vibration">Vibrar, sch\'in telefonat da gruppa è vegnì cumenzà</string>
+    <string name="forward_security_mode_4dh">cumplet</string>
+    <string name="forward_security_mode_2dh">unilateral</string>
+    <string name="forward_security_mode_all">tuts</string>
+    <string name="forward_security_mode_partial">per part</string>
+    <string name="forward_security_explanation">Perfect Forward Secrecy (PFS) protegia ina communicaziun registrada da vegnir decodada posteriuramain, era sche la clav a lunga durada è enconuschenta.\n\nL\'opziun po vegnir activada, sche l\'app sustegnan PFS sin tuttas duas varts.</string>
+    <string name="group_call_inactivity_left">Bandunà il telefonat da gruppa pervia d\'inactivitad</string>
+    <string name="missing_permission_external_storage">Igl ha dà in sbagl cun copiar la datoteca. Emprova ils suandants pass:\n1. Avra l\'app «Configuraziuns» sin tes telefonin.\n2. Va sin «Apps».\n3. Tippescha sin «Access a tut las datotecas».\n4. Tippescha sin ils trais puncts survart e tscherna «Mussar apps dal sistem».\n5. Tippescha sin «Arcun extern» e controllescha che «Permetter l\'access per administrar tut las datotecas» saja activà.\n6. Emprova anc ina giada da restaurar il backup da datas.</string>
+    <string name="forward_security_downgraded_status_message">Deactivà Perfect Forward Secrecy en questa conversaziun, perquai che la versiun da l\'app dal partenari da chat na sustegna betg PFS.</string>
+    <string name="forward_security_illegal_session_status_message">La sesida da Perfect Forward Secrecy è vegnida reinizialisada pervia da nunvalaivladad</string>
+    <string name="crop_image_title">Adattar il maletg</string>
+    <string name="scroll_to_bottom">Scrollar fin giudim</string>
+    <string name="scroll_to_top">Scrollar fin sisum</string>
+    <string name="contact_sync_mdm_rationale">Tes administratur ha activà la sincronisaziun da contacts. Perquai vegn duvrada l\'autorisaziun dals contacts.</string>
+    <string name="welcome_back">Bainvegni enavos!</string>
+    <string name="id_restored_successfully">Tia ID da Threema è vegnida restaurada cun success</string>
+    <string name="prefs_dynamic_colors">Colurs dinamicas</string>
+    <string name="prefs_dynamic_colors_sum">Duvrar las colurs dal sistem</string>
+    <string name="apply_changes">Surpigliar las midadas</string>
+    <string name="prefs_threema_work_summary">Savevas gia che Threema porscha er ina soluziun da communicaziun professiunala per interpresas? Tippescha qua per leger dapli da Threema Work.</string>
+    <string name="notification_channel_voice_message_player">Player da messadis discurrids</string>
+    <string name="voice_message_from">Messadi discurrì dals %s</string>
+    <string name="vm_fg_service_not_allowed">Problem da reproducir messadis discurrids</string>
+    <string name="vm_fg_service_not_allowed_explain">Tippescha sin il buttun «Play» en la notificaziun da medias, sche quella è anc avant maun. Cas cuntrari avra l\'app per cumenzar la reproducziun en il chat.</string>
+    <string name="use_threema_without_this_permission">Duvrar %s senza questa autorisaziun</string>
+    <string name="grant_permission">Dar l\'autorisaziun</string>
+    <string name="grant_permission_settings">Dar l\'autorisaziun en las configuraziuns</string>
+    <string name="ignore_permission">Betg dumandar pli</string>
+    <string name="permission_nearby_devices">Apparats en la vischinanza</string>
+    <string name="permission_bluetooth">bluetooth</string>
+    <string name="permission_camera">camera</string>
+    <string name="permission_microphone">microfon</string>
+    <string name="permission_read_phone_state">Telefon</string>
+    <string name="permission_enable_in_settings_rationale">P.pl. dar l\'autorisaziun en las configuraziuns. Tscherna «autorisaziuns» e permetta suenter «%s».</string>
+    <string name="group_name">Num da la gruppa</string>
+    <string name="star_message">Marcar cun ina staila</string>
+    <string name="starred_message">Marcà cun ina staila</string>
+    <string name="starred">Cun ina staila</string>
+    <string name="starred_messages">Marcà cun ina staila</string>
+    <string name="sorting">Zavrada</string>
+    <string name="sort_by">Zavrar tenor</string>
+    <string name="newest_first">ultims l\'emprim</string>
+    <string name="oldest_first">vegls l\'emprim</string>
+    <string name="no_starred_messages">Chattà nagins messadis marcads cun ina staila. Tippescha ditg sin il messadi e tscherna il buttun da la staila per marcar el.</string>
+    <string name="remove_all_stars">Allontanar tut las stailas</string>
+    <string name="remove_star">Allontanar la staila</string>
+    <string name="samsung_permission_problem_explain">Perquai che l\'autorisaziun d\'ina app dal sistem manca, n\'ha %1$s nagin access a datotecas da medias. Verifitgescha en il suandant visur ch\'il selectur dasper «arcun extern» saja activà e reaviescha %1$s.</string>
+    <string name="min_n_chars">min. %d segns</string>
+    <string name="prefs_title_grant_bluetooth_permission">Dar l\'autorisaziun da bluetooth</string>
+    <string name="safe_managed_password_confirm">Definì in pled-clav administrà per Threema Safe.\n\nVuls ti duvrar quest pled-clav? En cas da dubi contactescha tes administratur.</string>
+    <string name="safe_managed_new_password_confirm">Definì in nov pled-clav administrà per Threema Safe.\n\nVuls di remplazzar il pled-clav actual cun il nov pled-clav administrà? En cas da dubi contactescha tes administratur.</string>
+    <string name="real_not_now">Ussa betg</string>
+    <string name="add_contact_in">Agiuntar il contact en ...</string>
+    <string name="really_remove_all_stars">Vuls ti propi allontanar tut las marcaziuns cun stailas?</string>
+    <string name="prefs_sum_storage_management">Administrar l\'arcun e stizzar messadis u medias</string>
+    <string name="delete_automatically">Stizzar automaticamain</string>
+    <string name="keep_messages">Salvar messadis per:</string>
+    <string name="clean_up_manually">Far urden manualmain</string>
+    <string name="forever">Adina</string>
+    <string name="autodelete_explain">Sche ti n\'has betg tschernì «per adina», vegnan stizzads definitivamain ils messadis entrads e tramess suenter il temp inditgà. Quai vala era per messadis betg legids e betg tramess. Messadis en gruppas da notizias e messadis marcads cun ina staila na vegnan però betg stizzads. Ils messadis vegnan stizzads periodicamain e betg exnum directamain suenter l\'activaziun.</string>
+    <string name="autodelete_confirm">Suenter %s vegnan ils messadis stizzads automaticamain. Cuntinuar?</string>
+    <string name="autodelete_activated">Activar la stizzada automatica.</string>
+    <string name="autodelete_disabled">Deactivar la stizzada automatica.</string>
+    <string name="set_by_administrator">L\'administratur ha definì la valur. I n\'è betg pussaivel da modifitgar ella.</string>
+    <string name="action_dissolve_group">Annullar la gruppa</string>
+    <string name="really_dissolve_group">Sche ti annulleschas sulettamain la gruppa, na po nagin pli trametter novs messadis en la gruppa ed i n\'è betg pli pussaivel d\'administrar ella. Igl è però vinavant pussaivel da clonar la gruppa.</string>
+    <string name="status_orphaned_group">*Questa gruppa è orfna*\nLa persuna che ha creà la gruppa l\'ha bandunà. Ella n\'è betg pli administrabla. Ina commembra u in commember da la gruppa restant duai clonar la gruppa (via detagls da la gruppa) per daventar la nova administratura resp. il nov administratur.</string>
     <plurals name="contacts_counter_label">
         <item quantity="one">%d contact</item>
         <item quantity="other">%d contacts</item>

+ 10 - 1
app/src/main/res/values-ru/strings.xml

@@ -512,6 +512,7 @@
     <string name="file_placeholder">Файл</string>
     <string name="internal_storage">Внутренняя память</string>
     <string name="no_activity_for_mime_type">Приложение для открытия этого файла не найдено.</string>
+    <string name="no_activity_for_intent">Приложение не найдено.</string>
     <string name="open_from">Открыть из</string>
     <string name="file_one_contact_not_supported">%1$s не может принимать файлы.</string>
     <string name="file_x_contact_not_supported">Внимание: %1$d контакта(ов) не могут принять ваш файл.</string>
@@ -1016,6 +1017,7 @@
     <string name="system_default">Системная</string>
     <string name="open_in_maps_app">Открыть в приложении «Карты»</string>
     <string name="delete">Удалить</string>
+    <string name="delete_from_this_device">Удалить с этого устройства</string>
     <string name="delete_for_all">Удалить для всех</string>
     <string name="message_was_deleted">Это сообщение удалено</string>
     <string name="continue_recording">Продолжить запись</string>
@@ -1544,11 +1546,18 @@
     <string name="media_gallery_animated_webps">Анимированные WebPs</string>
     <string name="unsupported_image_type">Неподдерживаемый тип изображения: %s</string>
     <string name="application_setup_steps_failed">Для проверки состояния ваших контактов требуется активное соединение с Интернетом. Убедитесь, что вы подключены к Интернету, и повторите попытку.</string>
-    <string name="add_contact_failed">Не удалось добавить контакт</string>
+    <string name="add_contact_failed">Невозможно добавить контакт</string>
     <string name="edit_message_not_supported_for_contact">Невозможно отредактировать сообщение, поскольку версия приложения получателя не поддерживает эту функцию.</string>
     <string name="edit_message_not_supported_for_all_group_members">Следующие участники группы не смогут увидеть ваши изменения: %1$s</string>
     <string name="edit_message_not_supported_for_any_group_members">Невозможно отредактировать сообщение, так как ни у одного участника группы нет версии приложения, поддерживающей эту функцию.</string>
     <string name="delete_message_not_supported_for_all_group_members">Данное сообщение не будет удалено для следующих участников группы: %1$s</string>
+    <string name="work_intro_more_link_text">Подробнее о Threema Work</string>
+    <string name="work_intro_subtitle">Безопасный бизнес-мессенджер\nдля компаний.</string>
+    <string name="work_intro_login">Войти %1$s</string>
+    <string name="consumer_notice_description">Если вы частный пользователь, скачайте обычное приложение Threema.</string>
+    <string name="consumer_notice_playstore_link_description">Threema в Play Store</string>
+    <string name="consumer_notice_appgallery_link_description">Threema в AppGallery</string>
+    <string name="consumer_notice_subtitle">Для личного использования</string>
     <plurals name="contacts_counter_label">
         <item quantity="few">%d контакта</item>
         <item quantity="many">%d контактов</item>

+ 9 - 0
app/src/main/res/values-uk/strings.xml

@@ -532,6 +532,7 @@
     <string name="file_placeholder">Файл</string>
     <string name="internal_storage">Внутрішня пам\'ять</string>
     <string name="no_activity_for_mime_type">Немає додатків, які можуть відкрити цей файл.</string>
+    <string name="no_activity_for_intent">Застосунок не знайдено.</string>
     <string name="open_from">Відкрити з</string>
     <string name="file_one_contact_not_supported">Контакт \"%1$s\" не може отримувати файли.</string>
     <string name="file_x_contact_not_supported">Увага! Кілька контактів (%1$d) не зможе отримати ваш файл.</string>
@@ -1060,6 +1061,7 @@
     <string name="system_default">Налаштування системи</string>
     <string name="open_in_maps_app">Відкрити в додатку для карт</string>
     <string name="delete">Видалити</string>
+    <string name="delete_from_this_device">Видалити з цього пристрою</string>
     <string name="delete_for_all">Видалити для всіх</string>
     <string name="message_was_deleted">Це повідомлення видалено</string>
     <string name="continue_recording">Продовжити запис</string>
@@ -1594,6 +1596,13 @@
     <string name="edit_message_not_supported_for_all_group_members">Ваші зміни не бачитимуть такі учасники групи: %1$s</string>
     <string name="edit_message_not_supported_for_any_group_members">Неможливо редагувати повідомлення, оскільки в жодного з учасників групи не встановлено версію додатка, яка підтримує цю функцію.</string>
     <string name="delete_message_not_supported_for_all_group_members">Це повідомлення не буде видалено для таких учасників групи: %1$s</string>
+    <string name="work_intro_more_link_text">Дізнатися більше про Threema Work</string>
+    <string name="work_intro_subtitle">Безпечний застосунок для спілкування \nдля компаній.</string>
+    <string name="work_intro_login">Увійти %1$s</string>
+    <string name="consumer_notice_description">Будь ласка, завантажте звичайний застосунок Threema, якщо Ви - звичайний користувач.</string>
+    <string name="consumer_notice_playstore_link_description">Threema у Play Маркеті</string>
+    <string name="consumer_notice_appgallery_link_description">Threema у AppGallery</string>
+    <string name="consumer_notice_subtitle">Для приватного користування</string>
     <plurals name="contacts_counter_label">
         <item quantity="few">%d контакти</item>
         <item quantity="many">%d контактів</item>

+ 4 - 4
app/src/main/res/values-zh-rCN/strings.xml

@@ -37,9 +37,9 @@
     <string name="prefs_sum_sync_contacts_on">使用设备通讯录同步 %s 用户</string>
     <string name="prefs_sum_sync_contacts_off">不要将 %s 用户与设备通讯录同步</string>
     <string name="prefs_title_sync_contacts">联系人同步</string>
-    <string name="prefs_sum_block_unknown_off">任何人都可以向您发送息。
-当第一条息到达时,新的联系人将被自动添加。</string>
-    <string name="prefs_sum_block_unknown_on">只有您的联系人列表中的人才能向您发送息。</string>
+    <string name="prefs_sum_block_unknown_off">任何人都可以向您发送息。
+当第一条息到达时,新的联系人将被自动添加。</string>
+    <string name="prefs_sum_block_unknown_on">只有您的联系人列表中的人才能向您发送息。</string>
     <string name="prefs_title_block_unknown">屏蔽未知联系人</string>
     <string name="prefs_title_read_receipts">发送已读回执</string>
     <string name="prefs_title_typing_indicator">发送输入状态</string>
@@ -49,7 +49,7 @@
     <string name="prefs_notification_sound">通知声音</string>
     <string name="prefs_sum_notification_sound">系统默认</string>
     <string name="prefs_vibrate">振动</string>
-    <string name="prefs_sum_vibrate">收到息时振动</string>
+    <string name="prefs_sum_vibrate">收到息时振动</string>
     <string name="prefs_light">通知灯</string>
     <string name="prefs_sum_light">白色</string>
     <string name="prefs_title_wallpaper">选择壁纸</string>

+ 3 - 1
app/src/main/res/values/colors.xml

@@ -75,11 +75,13 @@
 	<!-- theme-agnostic colors -->
 
 	<!-- wizard -->
-	<color name="wizard_color_primary">@android:color/white</color>
+	<color name="wizard_color_text_on_primary">@android:color/white</color>
 	<color name="wizard_alpha_background">#33ffffff</color>
 	<color name="wizard_color_accent">@color/md_theme_dark_primary</color>
 	<color name="wizard_color_accent_dark">#323232</color>
 	<color name="wizard_color_button_disabled">#664caf50</color>
+    <!-- primary color of consumer build to use in work build -->
+    <color name="wizard_color_accent_consumer">#05A63F</color>
 
 	<!-- wizard step pager display -->
 	<color name="step_pager_previous_tab_color">#4433b5e5</color>

+ 11 - 1
app/src/main/res/values/strings.xml

@@ -533,6 +533,7 @@
 	<string name="file_placeholder">File</string>
 	<string name="internal_storage">Internal storage</string>
 	<string name="no_activity_for_mime_type">No app found to open this file.</string>
+    <string name="no_activity_for_intent">No app found.</string>
 	<string name="open_from">Open from</string>
 	<string name="file_one_contact_not_supported">%1$s cannot receive files.</string>
 	<string name="file_x_contact_not_supported">Warning: %1$d contacts cannot receive your file.</string>
@@ -1061,7 +1062,8 @@
 	<string name="system_default">System default</string>
 	<string name="open_in_maps_app">Open in Maps app</string>
 	<string name="delete">Delete</string>
-    <string name="delete_for_all">Delete for all</string>
+    <string name="delete_from_this_device">Delete from this device</string>
+    <string name="delete_for_all">Delete for everyone</string>
     <string name="message_was_deleted">This message was deleted</string>
 	<string name="continue_recording">Continue recording</string>
 	<string name="whatsnew_title">What\'s new in %1$s 5.2?</string>
@@ -1600,6 +1602,14 @@
 
     <string name="delete_message_not_supported_for_all_group_members">This message will not be deleted for the following group members: %1$s</string>
 
+    <string name="work_intro_more_link_text">Find out more about Threema Work</string>
+    <string name="work_intro_subtitle">The secure business messenger\nfor companies.</string>
+    <string name="work_intro_login">Login %1$s</string>
+    <string name="consumer_notice_description">Please download the regular Threema app if you’re a private user.</string>
+    <string name="consumer_notice_playstore_link_description">Threema in the Play Store</string>
+    <string name="consumer_notice_appgallery_link_description">Threema in the AppGallery</string>
+    <string name="consumer_notice_subtitle">For private usage</string>
+
 	<plurals name="contacts_counter_label">
 		<item quantity="one">%d contact</item>
 		<item quantity="few">%d contacts</item>

+ 6 - 1
app/src/main/res/values/styles.xml

@@ -459,6 +459,7 @@
 	<style name="WizardButtonRegular" parent="WizardButton">
 		<item name="android:background">@drawable/selector_button_green</item>
 		<item name="android:textColor">@color/wizard_button_text_inverse</item>
+        <item name="android:textSize">@dimen/wizard_button_text_size</item>
 	</style>
 
 	<style name="WizardButtonInverse" parent="WizardButton">
@@ -472,7 +473,7 @@
 		<item name="android:textStyle">bold</item>
 		<item name="android:textSize">@dimen/wizard_title_text_size</item>
 		<item name="android:layout_marginTop">@dimen/wizard_title_text_margin_top</item>
-		<item name="android:textColor">@color/wizard_color_primary</item>
+		<item name="android:textColor">@color/wizard_color_text_on_primary</item>
 		<item name="android:textColorHint">?android:attr/textColorHint</item>
 		<item name="android:textColorHighlight">?android:attr/textColorHighlight</item>
 		<item name="android:textColorLink">@color/wizard_color_accent</item>
@@ -507,6 +508,10 @@
 		<item name="android:textSize">@dimen/wizard_summary_body_text_size</item>
 	</style>
 
+    <style name="WorkIntroSubTitleText" parent="@style/WizardSubTitleText">
+        <item name="android:lineHeight">21sp</item>
+    </style>
+
 	<style name="WizardEditTextIcon">
 		<item name="android:height">@dimen/wizard_default_view_height</item>
 		<item name="android:width">@dimen/wizard_default_view_height</item>

+ 5 - 0
app/src/main/res/values/untranslatable_strings.xml

@@ -23,4 +23,9 @@
 	<string name="threema_safe_password_faq" translatable="false">https://threema.ch/%s/faq/safepw</string>
 	<string name="threema_passwords_faq" translatable="false">https://threema.ch/%s/faq/lost_pass</string>
 	<string name="backup_faq_url" translatable="false">https://threema.ch/%s/faq/data_backup</string>
+    <string name="threema_work_url" translatable="false">https://threema.ch/work?li=in-app-work </string>
+    <string name="private_download_url" translatable="false">https://play.google.com/store/apps/details?id=ch.threema.app</string>
+    <string name="private_download_url_hms" translatable="false">https://appgallery.huawei.com/#/app/C103713829</string>
+    <!-- should not be translated because manifest does not allow varying resources-->
+    <string name="special_use_fgs_passphrase_service_explanation" translatable="false">Lock or unlock the app using a passphrase</string>
 </resources>

+ 0 - 4
app/src/main/res/values/work_placeholders.xml

@@ -5,11 +5,7 @@
   -->
 
 <resources xmlns:tools="http://schemas.android.com/tools">
-	<string name="private_threema_download" tools:ignore="MissingTranslation"/>
 	<string name="directory_title" tools:ignore="MissingTranslation"/>
 	<string name="directory_empty_view_text" tools:ignore="MissingTranslation"/>
 	<string name="directory_search" tools:ignore="MissingTranslation"/>
-	<string name="private_download_url_hms" tools:ignore="MissingTranslation"/>
-	<string name="private_download_url" tools:ignore="MissingTranslation"/>
-	<string name="threema_work_url" tools:ignore="MissingTranslation"/>
 </resources>

+ 11 - 23
app/src/onprem/res/layout/activity_enter_serial.xml

@@ -4,7 +4,8 @@
             android:id="@+id/top_view"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:fillViewport="true">
+            android:fillViewport="true"
+            android:background="@android:color/black">
 
 	<FrameLayout android:layout_width="match_parent"
 				 android:layout_height="wrap_content">
@@ -28,16 +29,15 @@
 				android:paddingTop="@dimen/wizard_contents_padding"
 				android:paddingBottom="@dimen/wizard_contents_padding">
 
-			<TextView
-					style="@style/WizardTitleText"
-					android:id="@+id/enter_serial_welcome_title"
-					android:layout_width="wrap_content"
-					android:layout_height="wrap_content"
-					android:text="@string/app_name"
-					android:gravity="center_horizontal"
-					android:layout_centerHorizontal="true"
-					android:layout_marginTop="8dp"
-			/>
+            <ImageView
+                android:id="@+id/enter_serial_welcome_title"
+                android:src="@drawable/logo_main_white"
+                android:layout_width="wrap_content"
+                android:layout_height="64dp"
+                android:importantForAccessibility="no"
+                android:scaleX="1.5"
+                android:scaleY="1.5"
+                android:layout_centerHorizontal="true" />
 
 			<TextView
 					style="@style/WizardMediumText"
@@ -50,7 +50,6 @@
 					android:linksClickable="true"
 					android:autoLink="web"
 					android:text="@string/enter_serial_body"
-					android:layout_marginTop="@dimen/wizard_paragraph_height"
 					android:layout_marginBottom="5dp"
 			/>
 
@@ -201,17 +200,6 @@
 				android:gravity="center_horizontal"
 				android:layout_marginTop="32dp" />
 
-			<TextView
-				style="@style/WizardMediumText"
-				android:id="@+id/private_explain"
-				android:visibility="visible"
-				android:layout_width="fill_parent"
-				android:layout_height="wrap_content"
-				android:layout_below="@id/work_lost_credential_help"
-				android:layout_alignParentBottom="true"
-				android:gravity="center_horizontal|bottom"
-				android:layout_marginTop="32dp"/>
-
 		</RelativeLayout>
 
 	</FrameLayout>

+ 1 - 2
app/src/onprem/res/values-cs/strings.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="about_title">Threema OnPrem pro Android</string>
-    <string name="enter_serial_body">Zadejte pověření poskytnutá vaší společností nebo organizací</string>
+    <string name="enter_serial_body">Zadejte přihlašovací údaje společnosti Threema OnPrem poskytnuté vaší společností</string>
     <string name="serial_required_want_exit">Licence je neplatná. Chcete to zkusit znovu nebo aplikaci Threema OnPrem ukončit?</string>
     <string name="checking_serial">Kontrola pověření</string>
     <string name="username_hint">Uživatelské jméno</string>
@@ -18,7 +18,6 @@
     <string name="new_wizard_info_sync_contacts">Pokud tuto možnost povolíte, Threema OnPrem jednosměrně zašifruje (zahashuje) e‑mailové adresy a telefonní čísla, načež je odešle na server za účelem vyhledání odpovídajících kontaktů. Data jsou uchována pouze v paměti a nikdy se na server neukládají.</string>
     <string name="threema_contact">Threema OnPrem kontakt</string>
     <string name="menu_about">O aplikaci Threema OnPrem</string>
-    <string name="private_threema_download"><![CDATA[Pro osobní používání <a href="https://play.google.com/store/apps/details?id=ch.threema.app">klepněte sem</a> a stáhněte si aplikaci Threema.]]></string>
     <string name="directory_search">Hledat v adresáři</string>
     <string name="directory_title">Adresář společnosti</string>
     <string name="directory_empty_view_text">Chcete-li zahájit vyhledávání v adresáři uživatelů Threema OnPrem ve vaší společnosti, zadejte alespoň 3 znaky</string>

+ 1 - 2
app/src/onprem/res/values-de/strings.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
 	<string name="about_title">Threema OnPrem für Android</string>
-	<string name="enter_serial_body">Geben Sie die Zugangsdaten ein, die Sie von Ihrem Unternehmen bzw. Ihrer Organisation erhalten haben</string>
+	<string name="enter_serial_body">Geben Sie Ihre Threema OnPrem-Zugangsdaten ein, die Sie von Ihrem Unternehmen erhalten haben.</string>
 	<string name="serial_required_want_exit">Die Lizenz ist ungültig. Möchten Sie es nochmals versuchen oder Threema OnPrem verlassen?</string>
 	<string name="checking_serial">Zugangsberechtigung wird überprüft</string>
 	<string name="username_hint">Benutzername</string>
@@ -28,7 +28,6 @@
 	</string>
 	<string name="threema_contact">Threema OnPrem-Kontakt</string>
 	<string name="menu_about">Über Threema OnPrem</string>
-	<string name="private_threema_download"><![CDATA[Wenn Sie die App privat nutzen möchten, laden Sie Threema bitte <a href="https://play.google.com/store/apps/details?id=ch.threema.app">hier</a> herunter.]]></string>
 	<string name="safe_configure_server_explain">Speichern Sie Ihr Threema Safe-Backup auf dem Server Ihrer Organisation, oder legen Sie einen anderen Backup-Server fest.</string>
 	<string name="directory_search">Im Verzeichnis suchen</string>
 	<string name="directory_title">Unternehmensverzeichnis</string>

+ 1 - 2
app/src/onprem/res/values-es/strings.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="about_title">Threema OnPrem para Android</string>
-    <string name="enter_serial_body">Introduzca los datos de acceso que ha recibido de su empresa u organización</string>
+    <string name="enter_serial_body">Introduzca los datos de acceso de Threema OnPrem que le ha proporcionado su empresa.</string>
     <string name="serial_required_want_exit">Licencia no válida. ¿Intentarlo otra vez o salir de Threema OnPrem?</string>
     <string name="checking_serial">Comprobando credenciales</string>
     <string name="username_hint">Nombre de usuario</string>
@@ -24,7 +24,6 @@
     <string name="new_wizard_info_sync_contacts">Si habilita esta opción, Threema OnPrem encripta unidireccionalmente las direcciones de correo electrónico y números de teléfono antes de enviarlas al servidor para buscar contactos coincidentes. Los datos se conservan solo en la memoria y nunca se almacenan en el servidor.</string>
     <string name="threema_contact">Contactar con Threema OnPrem</string>
     <string name="menu_about">Acerca de Threema OnPrem</string>
-    <string name="private_threema_download"><![CDATA[<a href="https://play.google.com/store/apps/details?id=ch.threema.app">Para usuarios privados</a>]]></string>
     <string name="directory_search">Buscar en el directorio</string>
     <string name="directory_title">Directorio de la empresa</string>
     <string name="directory_empty_view_text">Introduce al menos 3 caracteres de un nombre para comenzar la búsqueda en el directorio de usuarios de Threema OnPrem de tu empresa.</string>

+ 1 - 2
app/src/onprem/res/values-fr/strings.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="about_title">Threema OnPrem pour Android</string>
-    <string name="enter_serial_body">Saisissez les identifiants que vous avez reçus de votre société ou organisation</string>
+    <string name="enter_serial_body">Veuillez saisir les identifiants Threema OnPrem fournis par votre entreprise.</string>
     <string name="serial_required_want_exit">La licence est invalide. Voulez-vous réessayer ou quitter Threema OnPrem?</string>
     <string name="checking_serial">Vérification des identifiants</string>
     <string name="username_hint">Nom d\'utilisateur</string>
@@ -20,7 +20,6 @@ La paire de clés comprend une <b>clé publie</b> distribuée à vos contacts et
 avant de les envoyer au serveur pour chercher des contacts correspondants. Les données sont conservées uniquement en mémoire et ne sont jamais stockées sur le serveur.</string>
     <string name="threema_contact">Contact Threema OnPrem</string>
     <string name="menu_about">À propos de Threema OnPrem</string>
-    <string name="private_threema_download"><![CDATA[<a href="https://play.google.com/store/apps/details?id=ch.threema.app">Pour les utilisateurs privés</a>]]></string>
     <string name="directory_search">Rechercher dans le répertoire</string>
     <string name="directory_title">Répertoire de l\'entreprise</string>
     <string name="directory_empty_view_text">Veuillez saisir au moins 3 caractères d\'un nom pour lancer une recherche dans le répertoire d\'utilisateurs Threema OnPrem de votre entreprise</string>

+ 1 - 2
app/src/onprem/res/values-it/strings.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="about_title">Threema OnPrem per Android</string>
-    <string name="enter_serial_body">Inserire i credenziali ricevuti dalla propria azienda o organizzazione</string>
+    <string name="enter_serial_body">Inserisci le credenziali Threema OnPrem ricevute dalla tua azienda o organizzazione.</string>
     <string name="serial_required_want_exit">La licenza non è valida. Vuoi riprovare o desideri uscire da Threema OnPrem?</string>
     <string name="checking_serial">Controllo credenziali</string>
     <string name="username_hint">Nome utente</string>
@@ -21,7 +21,6 @@ in modo anonimo.</string>
 prima di inviarli al server e cercare i contatti corrispondenti. I dati vengono mantenuti solo in memoria e non sono mai salvati sul server.</string>
     <string name="threema_contact">Contatto Threema OnPrem</string>
     <string name="menu_about">Informazioni su Threema OnPrem</string>
-    <string name="private_threema_download"><![CDATA[<a href="https://play.google.com/store/apps/details?id=ch.threema.app">Per utenti privati</a>]]></string>
     <string name="directory_search">Cerca nella directory</string>
     <string name="directory_title">Directory azienda</string>
     <string name="directory_empty_view_text">Inserisci almeno 3 caratteri di un nome per iniziare a cercare nella directory della tua azienda degli utenti di Threema OnPrem o seleziona una categoria toccando sull\'icona del filtro.</string>

+ 1 - 2
app/src/onprem/res/values-nl-rNL/strings.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="about_title">Threema OnPrem voor Android</string>
-    <string name="enter_serial_body">Voer de gegevens in die u van uw bedrijf of organisatie heeft ontvangen</string>
+    <string name="enter_serial_body">Voer Threema OnPrem-gegevens in die u van uw bedrijf hebt ontvangen.</string>
     <string name="serial_required_want_exit">Licentie is ongeldig. Probeer het opnieuw of sluit Threema OnPrem af.</string>
     <string name="checking_serial">Gegevens controleren</string>
     <string name="username_hint">Gebruikersnaam</string>
@@ -18,7 +18,6 @@
     <string name="new_wizard_info_sync_contacts">Als u deze optie inschakelt, past Threema OnPrem eenrichtigs-versleuteling (hashfunctie) toe op uw e-mailadressen en telefoonnummers, voordat ze naar de server worden verstuurd om naar overeenkomende contactpersonen te zoeken. De gegevens worden alleen in het geheugen bewaard en nooit op de server opgeslagen.</string>
     <string name="threema_contact">Contactpersoon Threema OnPrem</string>
     <string name="menu_about">Over Threema OnPrem</string>
-    <string name="private_threema_download"><![CDATA[<a href="https://play.google.com/store/apps/details?id=ch.threema.app">Voor privégebruikers</a>]]></string>
     <string name="directory_search">ディレクトリ内検索</string>
     <string name="directory_title">会社のディレクトリ</string>
     <string name="directory_empty_view_text">あなたの会社のThreema OnPremユーザーのディレクトリで検索を開始するには、少なくとも3文字を入力してください。</string>

+ 1 - 2
app/src/onprem/res/values-pl/strings.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="about_title">Threema OnPrem na Androida</string>
-    <string name="enter_serial_body">Wprowadź dane dostępu, które otrzymałeś od swojej firmy lub organizacji</string>
+    <string name="enter_serial_body">Wprowadź dane uwierzytelniające OnPrem dostarczone przez Twoją firmę.</string>
     <string name="serial_required_want_exit">Licencja jest nieprawidłowa. Chcesz spróbować ponownie czy wolisz opuścić Threema OnPrem?</string>
     <string name="checking_serial">Sprawdzanie danych dostępowych</string>
     <string name="username_hint">Nazwa użytkownika</string>
@@ -19,7 +19,6 @@
 przed wysłaniem ich do serwera w celu wyszukania pasujących kontaktów. Dane te są przechowywane tylko w pamięci i nigdy nie są przechowywane na serwerze.</string>
     <string name="threema_contact">Kontakt Threema OnPrem</string>
     <string name="menu_about">O Threema OnPrem</string>
-    <string name="private_threema_download"><![CDATA[<a href="https://play.google.com/store/apps/details?id=ch.threema.app">Dla użytkowników prywatnych</a>]]></string>
     <string name="directory_search">Szukaj w książce telefonicznej</string>
     <string name="directory_title">Firmowa książka telefoniczna</string>
     <string name="directory_empty_view_text">Wpisz co najmniej 3 znaki nazwy, aby rozpocząć wyszukiwanie w Twojej firmowej książce telefonicznej użytkowników Threema OnPrem.</string>

+ 1 - 2
app/src/onprem/res/values-pt-rBR/strings.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="about_title">Threema OnPrem para Android</string>
-    <string name="enter_serial_body">Insira as credenciais fornecidas por sua empresa ou organização</string>
+    <string name="enter_serial_body">Insira as credenciais do Threema OnPrem fornecidas pela sua empresa.</string>
     <string name="serial_required_want_exit">A licença é inválida. Você gostaria de tentar novamente ou sair do Threema OnPrem?</string>
     <string name="checking_serial">Verificando credenciais</string>
     <string name="username_hint">Nome de usuário</string>
@@ -22,7 +22,6 @@
 antes de enviá-los ao servidor para procurar contatos correspondentes. Os dados são mantidos apenas na memória e nunca armazenados no servidor.</string>
     <string name="threema_contact">Contato do Threema OnPrem</string>
     <string name="menu_about">Sobre o Threema OnPrem</string>
-    <string name="private_threema_download"><![CDATA[<a href="https://play.google.com/store/apps/details?id=ch.threema.app">Para usuários privados</a>]]></string>
     <string name="directory_search">Pesquisar no diretório</string>
     <string name="directory_title">Diretório da empresa</string>
     <string name="directory_empty_view_text">Insira pelo menos 3 caracteres de um nome para começar a pesquisar no diretório de usuários do Threema OnPrem da sua empresa</string>

+ 1 - 2
app/src/onprem/res/values-rm/strings.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="about_title">Threema OnPrem per Android</string>
-    <string name="enter_serial_body">Il messenger per interpresas.\n\nEndatescha p.pl. tias datas d\'access. Contactescha tes administratur, sche ti na las enconuschas betg.</string>
+    <string name="enter_serial_body">Threema OnPrem è il messenger autogestiunà per interpresas. Endatescha p.pl. las datas d\'access messas a disposiziun da tia interpresa.</string>
     <string name="serial_required_want_exit">La licenza è nunvalaivla. Vuls ti empruvar anc ina giada u bandunar Threema OnPrem?</string>
     <string name="checking_serial">L\'autorisaziun d\'access vegn verifitgada</string>
     <string name="username_hint">Num da l\'utilisader</string>
@@ -17,5 +17,4 @@
     <string name="new_wizard_info_link">Sche ti inditgescha tes numer da telefonin e/u tia adressa dad e-mail, po Threema OnPrem gidar tes contacts da ta chattar automaticamain, sche ti es registrà en lur cudeschs d\'adressas. Las adressas dad e-mail vegnan memorisadas en furma da diever unic (furma da hash) sin noss server. Ti pos era sursiglir quest pass, sche ti vuls utilisar anonimamain Threema OnPrem.</string>
     <string name="threema_contact">Contact da Threema OnPrem</string>
     <string name="menu_about">Davart Threema OnPrem</string>
-    <string name="private_threema_download"><![CDATA[<a href="https://play.google.com/store/apps/details?id=ch.threema.app">Per utilisaders privats</a>]]></string>
 </resources>

+ 1 - 2
app/src/onprem/res/values-ru/strings.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="about_title">Threema OnPrem для Android</string>
-    <string name="enter_serial_body">Введите учетные данные, предоставленные вашей компанией или организацией</string>
+    <string name="enter_serial_body">Введите учетные данные Threema OnPrem, предоставленные вашей компанией или организацией.</string>
     <string name="serial_required_want_exit">Лицензия недействительна. Повторить попытку или выйти из Threema OnPrem?</string>
     <string name="checking_serial">Проверка учетных данных</string>
     <string name="username_hint">Имя пользователя</string>
@@ -19,7 +19,6 @@
     <string name="new_wizard_info_sync_contacts">Если включить этот параметр, Threema OnPrem в одну сторону шифрует (хэширует) адреса эл. почты и номера телефонов перед тем, как отправлять их на сервер для поиска подходящих контактов. Данные хранятся только в памяти и никогда не передаются на сервер.</string>
     <string name="threema_contact">Контакт Threema OnPrem</string>
     <string name="menu_about">О Threema OnPrem</string>
-    <string name="private_threema_download"><![CDATA[Если вы частный пользователь, <a href="https://play.google.com/store/apps/details?id=ch.threema.app">нажмите здесь</a> для скачивания приложения Threema.]]></string>
     <string name="directory_search">Поиск в каталоге</string>
     <string name="directory_title">Каталог компании</string>
     <string name="directory_empty_view_text">Чтобы начать поиск в каталоге пользователей Threema OnPrem в вашей компании, введите по меньшей мере 3 символа имени</string>

+ 1 - 2
app/src/onprem/res/values/strings.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
 	<string name="about_title">Threema OnPrem for Android</string>
-	<string name="enter_serial_body">Please enter the credentials provided by your company or organization</string>
+	<string name="enter_serial_body">Please enter the Threema OnPrem credentials provided by your company</string>
 	<string name="serial_required_want_exit">License is invalid. Would you like to try again or quit Threema OnPrem?</string>
 	<string name="checking_serial">Checking credentials</string>
 	<string name="username_hint">Username</string>
@@ -27,7 +27,6 @@
 		before sending them to the server to look for matching contacts. The data is kept in memory only and never stored on the server.</string>
 	<string name="threema_contact">Threema OnPrem Contact</string>
 	<string name="menu_about">About Threema OnPrem</string>
-	<string name="private_threema_download"><![CDATA[If you are a private user, please <a href="https://play.google.com/store/apps/details?id=ch.threema.app">tap here</a> to download Threema.]]></string>
 	<string name="directory_search">Search in the directory</string>
 	<string name="directory_title">Company directory</string>
 	<string name="directory_empty_view_text">Please enter at least 3 characters of a name to begin searching in your company\'s directory of Threema OnPrem users</string>

+ 11 - 23
app/src/onprem_internal/res/layout/activity_enter_serial.xml

@@ -4,7 +4,8 @@
             android:id="@+id/top_view"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:fillViewport="true">
+            android:fillViewport="true"
+            android:background="@android:color/black">
 
 	<FrameLayout android:layout_width="match_parent"
 				 android:layout_height="wrap_content">
@@ -28,16 +29,15 @@
 				android:paddingTop="@dimen/wizard_contents_padding"
 				android:paddingBottom="@dimen/wizard_contents_padding">
 
-			<TextView
-					style="@style/WizardTitleText"
-					android:id="@+id/enter_serial_welcome_title"
-					android:layout_width="wrap_content"
-					android:layout_height="wrap_content"
-					android:text="@string/app_name"
-					android:gravity="center_horizontal"
-					android:layout_centerHorizontal="true"
-					android:layout_marginTop="8dp"
-			/>
+            <ImageView
+                android:id="@+id/enter_serial_welcome_title"
+                android:src="@drawable/logo_main_white"
+                android:layout_width="wrap_content"
+                android:layout_height="64dp"
+                android:importantForAccessibility="no"
+                android:scaleX="1.5"
+                android:scaleY="1.5"
+                android:layout_centerHorizontal="true" />
 
 			<TextView
 					style="@style/WizardMediumText"
@@ -50,7 +50,6 @@
 					android:linksClickable="true"
 					android:autoLink="web"
 					android:text="@string/enter_serial_body"
-					android:layout_marginTop="@dimen/wizard_paragraph_height"
 					android:layout_marginBottom="5dp"
 			/>
 
@@ -201,17 +200,6 @@
 				android:gravity="center_horizontal"
 				android:layout_marginTop="32dp" />
 
-			<TextView
-				style="@style/WizardMediumText"
-				android:id="@+id/private_explain"
-				android:visibility="visible"
-				android:layout_width="fill_parent"
-				android:layout_height="wrap_content"
-				android:layout_below="@id/work_lost_credential_help"
-				android:layout_alignParentBottom="true"
-				android:gravity="center_horizontal|bottom"
-				android:layout_marginTop="32dp"/>
-
 		</RelativeLayout>
 
 	</FrameLayout>

+ 18 - 0
app/src/onprem_internal/res/layout/toolbar_home.xml

@@ -9,6 +9,24 @@
 		app:navigationIcon="@drawable/ic_account_circle_black_24dp"
 		app:layout_scrollFlags="enterAlways">
 
+    <androidx.appcompat.widget.AppCompatImageButton
+        style="?android:attr/borderlessButtonStyle"
+        android:id="@+id/toolbar_warning"
+        android:layout_width="36dp"
+        android:layout_height="36dp"
+        android:layout_marginRight="8dp"
+        android:padding="0dp"
+        android:drawablePadding="0dp"
+        android:layout_gravity="start"
+        android:clickable="true"
+        android:focusable="true"
+        android:background="@drawable/selector_compose_button"
+        android:contentDescription="@string/warning"
+        android:tooltipText="@string/warning"
+        app:srcCompat="@drawable/ic_warning"
+        app:tint="@color/material_red"
+        android:visibility="gone" />
+
 	<FrameLayout
 		android:layout_width="wrap_content"
 		android:layout_height="wrap_content"

+ 1 - 2
app/src/onprem_internal/res/values-cs/strings.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="about_title">Threema OnPrem pro Android</string>
-    <string name="enter_serial_body">Zadejte pověření poskytnutá vaší společností nebo organizací</string>
+    <string name="enter_serial_body">Zadejte přihlašovací údaje společnosti Threema OnPrem poskytnuté vaší společností</string>
     <string name="serial_required_want_exit">Licence je neplatná. Chcete to zkusit znovu nebo aplikaci Threema OnPrem ukončit?</string>
     <string name="checking_serial">Kontrola pověření</string>
     <string name="username_hint">Uživatelské jméno</string>
@@ -18,7 +18,6 @@
     <string name="new_wizard_info_sync_contacts">Pokud tuto možnost povolíte, Threema OnPrem jednosměrně zašifruje (zahashuje) e‑mailové adresy a telefonní čísla, načež je odešle na server za účelem vyhledání odpovídajících kontaktů. Data jsou uchována pouze v paměti a nikdy se na server neukládají.</string>
     <string name="threema_contact">Threema OnPrem kontakt</string>
     <string name="menu_about">O aplikaci Threema OnPrem</string>
-    <string name="private_threema_download"><![CDATA[Pro osobní používání <a href="https://play.google.com/store/apps/details?id=ch.threema.app">klepněte sem</a> a stáhněte si aplikaci Threema.]]></string>
     <string name="directory_search">Hledat v adresáři</string>
     <string name="directory_title">Adresář společnosti</string>
     <string name="directory_empty_view_text">Chcete-li zahájit vyhledávání v adresáři uživatelů Threema OnPrem ve vaší společnosti, zadejte alespoň 3 znaky</string>

+ 1 - 2
app/src/onprem_internal/res/values-de/strings.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
 	<string name="about_title">Threema OnPrem für Android</string>
-	<string name="enter_serial_body">Geben Sie die Zugangsdaten ein, die Sie von Ihrem Unternehmen bzw. Ihrer Organisation erhalten haben</string>
+	<string name="enter_serial_body">Geben Sie Ihre Threema OnPrem-Zugangsdaten ein, die Sie von Ihrem Unternehmen erhalten haben.</string>
 	<string name="serial_required_want_exit">Die Lizenz ist ungültig. Möchten Sie es nochmals versuchen oder Threema OnPrem verlassen?</string>
 	<string name="checking_serial">Zugangsberechtigung wird überprüft</string>
 	<string name="username_hint">Benutzername</string>
@@ -28,7 +28,6 @@
 	</string>
 	<string name="threema_contact">Threema OnPrem-Kontakt</string>
 	<string name="menu_about">Über Threema OnPrem</string>
-	<string name="private_threema_download"><![CDATA[Wenn Sie die App privat nutzen möchten, laden Sie Threema bitte <a href="https://play.google.com/store/apps/details?id=ch.threema.app">hier</a> herunter.]]></string>
 	<string name="safe_configure_server_explain">Speichern Sie Ihr Threema Safe-Backup auf dem Server Ihrer Organisation, oder legen Sie einen anderen Backup-Server fest.</string>
 	<string name="directory_search">Im Verzeichnis suchen</string>
 	<string name="directory_title">Unternehmensverzeichnis</string>

+ 1 - 2
app/src/onprem_internal/res/values-es/strings.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="about_title">Threema OnPrem para Android</string>
-    <string name="enter_serial_body">Introduzca los datos de acceso que ha recibido de su empresa u organización</string>
+    <string name="enter_serial_body">Introduzca los datos de acceso de Threema OnPrem que le ha proporcionado su empresa.</string>
     <string name="serial_required_want_exit">Licencia no válida. ¿Intentarlo otra vez o salir de Threema OnPrem?</string>
     <string name="checking_serial">Comprobando credenciales</string>
     <string name="username_hint">Nombre de usuario</string>
@@ -24,7 +24,6 @@
     <string name="new_wizard_info_sync_contacts">Si habilita esta opción, Threema OnPrem encripta unidireccionalmente las direcciones de correo electrónico y números de teléfono antes de enviarlas al servidor para buscar contactos coincidentes. Los datos se conservan solo en la memoria y nunca se almacenan en el servidor.</string>
     <string name="threema_contact">Contactar con Threema OnPrem</string>
     <string name="menu_about">Acerca de Threema OnPrem</string>
-    <string name="private_threema_download"><![CDATA[<a href="https://play.google.com/store/apps/details?id=ch.threema.app">Para usuarios privados</a>]]></string>
     <string name="directory_search">Buscar en el directorio</string>
     <string name="directory_title">Directorio de la empresa</string>
     <string name="directory_empty_view_text">Introduce al menos 3 caracteres de un nombre para comenzar la búsqueda en el directorio de usuarios de Threema OnPrem de tu empresa.</string>

+ 1 - 2
app/src/onprem_internal/res/values-fr/strings.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="about_title">Threema OnPrem pour Android</string>
-    <string name="enter_serial_body">Saisissez les identifiants que vous avez reçus de votre société ou organisation</string>
+    <string name="enter_serial_body">Veuillez saisir les identifiants Threema OnPrem fournis par votre entreprise.</string>
     <string name="serial_required_want_exit">La licence est invalide. Voulez-vous réessayer ou quitter Threema OnPrem?</string>
     <string name="checking_serial">Vérification des identifiants</string>
     <string name="username_hint">Nom d\'utilisateur</string>
@@ -20,7 +20,6 @@ La paire de clés comprend une <b>clé publie</b> distribuée à vos contacts et
 avant de les envoyer au serveur pour chercher des contacts correspondants. Les données sont conservées uniquement en mémoire et ne sont jamais stockées sur le serveur.</string>
     <string name="threema_contact">Contact Threema OnPrem</string>
     <string name="menu_about">À propos de Threema OnPrem</string>
-    <string name="private_threema_download"><![CDATA[<a href="https://play.google.com/store/apps/details?id=ch.threema.app">Pour les utilisateurs privés</a>]]></string>
     <string name="directory_search">Rechercher dans le répertoire</string>
     <string name="directory_title">Répertoire de l\'entreprise</string>
     <string name="directory_empty_view_text">Veuillez saisir au moins 3 caractères d\'un nom pour lancer une recherche dans le répertoire d\'utilisateurs Threema OnPrem de votre entreprise</string>

+ 1 - 2
app/src/onprem_internal/res/values-it/strings.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="about_title">Threema OnPrem per Android</string>
-    <string name="enter_serial_body">Inserire i credenziali ricevuti dalla propria azienda o organizzazione</string>
+    <string name="enter_serial_body">Inserisci le credenziali Threema OnPrem ricevute dalla tua azienda o organizzazione.</string>
     <string name="serial_required_want_exit">La licenza non è valida. Vuoi riprovare o desideri uscire da Threema OnPrem?</string>
     <string name="checking_serial">Controllo credenziali</string>
     <string name="username_hint">Nome utente</string>
@@ -21,7 +21,6 @@ in modo anonimo.</string>
 prima di inviarli al server e cercare i contatti corrispondenti. I dati vengono mantenuti solo in memoria e non sono mai salvati sul server.</string>
     <string name="threema_contact">Contatto Threema OnPrem</string>
     <string name="menu_about">Informazioni su Threema OnPrem</string>
-    <string name="private_threema_download"><![CDATA[<a href="https://play.google.com/store/apps/details?id=ch.threema.app">Per utenti privati</a>]]></string>
     <string name="directory_search">Cerca nella directory</string>
     <string name="directory_title">Directory azienda</string>
     <string name="directory_empty_view_text">Inserisci almeno 3 caratteri di un nome per iniziare a cercare nella directory della tua azienda degli utenti di Threema OnPrem o seleziona una categoria toccando sull\'icona del filtro.</string>

+ 1 - 2
app/src/onprem_internal/res/values-nl-rNL/strings.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="about_title">Threema OnPrem voor Android</string>
-    <string name="enter_serial_body">Voer de gegevens in die u van uw bedrijf of organisatie heeft ontvangen</string>
+    <string name="enter_serial_body">Voer Threema OnPrem-gegevens in die u van uw bedrijf hebt ontvangen.</string>
     <string name="serial_required_want_exit">Licentie is ongeldig. Probeer het opnieuw of sluit Threema OnPrem af.</string>
     <string name="checking_serial">Gegevens controleren</string>
     <string name="username_hint">Gebruikersnaam</string>
@@ -18,7 +18,6 @@
     <string name="new_wizard_info_sync_contacts">Als u deze optie inschakelt, past Threema OnPrem eenrichtigs-versleuteling (hashfunctie) toe op uw e-mailadressen en telefoonnummers, voordat ze naar de server worden verstuurd om naar overeenkomende contactpersonen te zoeken. De gegevens worden alleen in het geheugen bewaard en nooit op de server opgeslagen.</string>
     <string name="threema_contact">Contactpersoon Threema OnPrem</string>
     <string name="menu_about">Over Threema OnPrem</string>
-    <string name="private_threema_download"><![CDATA[<a href="https://play.google.com/store/apps/details?id=ch.threema.app">Voor privégebruikers</a>]]></string>
     <string name="directory_search">ディレクトリ内検索</string>
     <string name="directory_title">会社のディレクトリ</string>
     <string name="directory_empty_view_text">あなたの会社のThreema OnPremユーザーのディレクトリで検索を開始するには、少なくとも3文字を入力してください。</string>

+ 1 - 2
app/src/onprem_internal/res/values-pl/strings.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="about_title">Threema OnPrem na Androida</string>
-    <string name="enter_serial_body">Wprowadź dane dostępu, które otrzymałeś od swojej firmy lub organizacji</string>
+    <string name="enter_serial_body">Wprowadź dane uwierzytelniające OnPrem dostarczone przez Twoją firmę.</string>
     <string name="serial_required_want_exit">Licencja jest nieprawidłowa. Chcesz spróbować ponownie czy wolisz opuścić Threema OnPrem?</string>
     <string name="checking_serial">Sprawdzanie danych dostępowych</string>
     <string name="username_hint">Nazwa użytkownika</string>
@@ -19,7 +19,6 @@
 przed wysłaniem ich do serwera w celu wyszukania pasujących kontaktów. Dane te są przechowywane tylko w pamięci i nigdy nie są przechowywane na serwerze.</string>
     <string name="threema_contact">Kontakt Threema OnPrem</string>
     <string name="menu_about">O Threema OnPrem</string>
-    <string name="private_threema_download"><![CDATA[<a href="https://play.google.com/store/apps/details?id=ch.threema.app">Dla użytkowników prywatnych</a>]]></string>
     <string name="directory_search">Szukaj w książce telefonicznej</string>
     <string name="directory_title">Firmowa książka telefoniczna</string>
     <string name="directory_empty_view_text">Wpisz co najmniej 3 znaki nazwy, aby rozpocząć wyszukiwanie w Twojej firmowej książce telefonicznej użytkowników Threema OnPrem.</string>

+ 1 - 2
app/src/onprem_internal/res/values-pt-rBR/strings.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="about_title">Threema OnPrem para Android</string>
-    <string name="enter_serial_body">Insira as credenciais fornecidas por sua empresa ou organização</string>
+    <string name="enter_serial_body">Insira as credenciais do Threema OnPrem fornecidas pela sua empresa.</string>
     <string name="serial_required_want_exit">A licença é inválida. Você gostaria de tentar novamente ou sair do Threema OnPrem?</string>
     <string name="checking_serial">Verificando credenciais</string>
     <string name="username_hint">Nome de usuário</string>
@@ -22,7 +22,6 @@
 antes de enviá-los ao servidor para procurar contatos correspondentes. Os dados são mantidos apenas na memória e nunca armazenados no servidor.</string>
     <string name="threema_contact">Contato do Threema OnPrem</string>
     <string name="menu_about">Sobre o Threema OnPrem</string>
-    <string name="private_threema_download"><![CDATA[<a href="https://play.google.com/store/apps/details?id=ch.threema.app">Para usuários privados</a>]]></string>
     <string name="directory_search">Pesquisar no diretório</string>
     <string name="directory_title">Diretório da empresa</string>
     <string name="directory_empty_view_text">Insira pelo menos 3 caracteres de um nome para começar a pesquisar no diretório de usuários do Threema OnPrem da sua empresa</string>

+ 1 - 2
app/src/onprem_internal/res/values-rm/strings.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="about_title">Threema OnPrem per Android</string>
-    <string name="enter_serial_body">Il messenger per interpresas.\n\nEndatescha p.pl. tias datas d\'access. Contactescha tes administratur, sche ti na las enconuschas betg.</string>
+    <string name="enter_serial_body">Threema OnPrem è il messenger autogestiunà per interpresas. Endatescha p.pl. las datas d\'access messas a disposiziun da tia interpresa.</string>
     <string name="serial_required_want_exit">La licenza è nunvalaivla. Vuls ti empruvar anc ina giada u bandunar Threema OnPrem?</string>
     <string name="checking_serial">L\'autorisaziun d\'access vegn verifitgada</string>
     <string name="username_hint">Num da l\'utilisader</string>
@@ -17,5 +17,4 @@
     <string name="new_wizard_info_link">Sche ti inditgescha tes numer da telefonin e/u tia adressa dad e-mail, po Threema OnPrem gidar tes contacts da ta chattar automaticamain, sche ti es registrà en lur cudeschs d\'adressas. Las adressas dad e-mail vegnan memorisadas en furma da diever unic (furma da hash) sin noss server. Ti pos era sursiglir quest pass, sche ti vuls utilisar anonimamain Threema OnPrem.</string>
     <string name="threema_contact">Contact da Threema OnPrem</string>
     <string name="menu_about">Davart Threema OnPrem</string>
-    <string name="private_threema_download"><![CDATA[<a href="https://play.google.com/store/apps/details?id=ch.threema.app">Per utilisaders privats</a>]]></string>
 </resources>

+ 1 - 2
app/src/onprem_internal/res/values-ru/strings.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="about_title">Threema OnPrem для Android</string>
-    <string name="enter_serial_body">Введите учетные данные, предоставленные вашей компанией или организацией</string>
+    <string name="enter_serial_body">Введите учетные данные Threema OnPrem, предоставленные вашей компанией или организацией.</string>
     <string name="serial_required_want_exit">Лицензия недействительна. Повторить попытку или выйти из Threema OnPrem?</string>
     <string name="checking_serial">Проверка учетных данных</string>
     <string name="username_hint">Имя пользователя</string>
@@ -19,7 +19,6 @@
     <string name="new_wizard_info_sync_contacts">Если включить этот параметр, Threema OnPrem в одну сторону шифрует (хэширует) адреса эл. почты и номера телефонов перед тем, как отправлять их на сервер для поиска подходящих контактов. Данные хранятся только в памяти и никогда не передаются на сервер.</string>
     <string name="threema_contact">Контакт Threema OnPrem</string>
     <string name="menu_about">О Threema OnPrem</string>
-    <string name="private_threema_download"><![CDATA[Если вы частный пользователь, <a href="https://play.google.com/store/apps/details?id=ch.threema.app">нажмите здесь</a> для скачивания приложения Threema.]]></string>
     <string name="directory_search">Поиск в каталоге</string>
     <string name="directory_title">Каталог компании</string>
     <string name="directory_empty_view_text">Чтобы начать поиск в каталоге пользователей Threema OnPrem в вашей компании, введите по меньшей мере 3 символа имени</string>

+ 1 - 2
app/src/onprem_internal/res/values/strings.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
 	<string name="about_title">Threema OnPrem for Android</string>
-	<string name="enter_serial_body">Please enter the credentials provided by your company or organization</string>
+	<string name="enter_serial_body">Please enter the Threema OnPrem credentials provided by your company</string>
 	<string name="serial_required_want_exit">License is invalid. Would you like to try again or quit Threema OnPrem?</string>
 	<string name="checking_serial">Checking credentials</string>
 	<string name="username_hint">Username</string>
@@ -27,7 +27,6 @@
 		before sending them to the server to look for matching contacts. The data is kept in memory only and never stored on the server.</string>
 	<string name="threema_contact">Threema OnPrem Contact</string>
 	<string name="menu_about">About Threema OnPrem</string>
-	<string name="private_threema_download"><![CDATA[If you are a private user, please <a href="https://play.google.com/store/apps/details?id=ch.threema.app">tap here</a> to download Threema.]]></string>
 	<string name="directory_search">Search in the directory</string>
 	<string name="directory_title">Company directory</string>
 	<string name="directory_empty_view_text">Please enter at least 3 characters of a name to begin searching in your company\'s directory of Threema OnPrem users</string>

+ 11 - 23
app/src/store_google_work/res/layout/activity_enter_serial.xml

@@ -4,7 +4,8 @@
             android:id="@+id/top_view"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:fillViewport="true">
+            android:fillViewport="true"
+            android:background="@android:color/black">
 
 	<FrameLayout android:layout_width="match_parent"
 				 android:layout_height="wrap_content">
@@ -28,16 +29,15 @@
 				android:paddingTop="@dimen/wizard_contents_padding"
 				android:paddingBottom="@dimen/wizard_contents_padding">
 
-			<TextView
-					style="@style/WizardTitleText"
-					android:id="@+id/enter_serial_welcome_title"
-					android:layout_width="wrap_content"
-					android:layout_height="wrap_content"
-					android:text="@string/app_name"
-					android:gravity="center_horizontal"
-					android:layout_centerHorizontal="true"
-					android:layout_marginTop="8dp"
-			/>
+            <ImageView
+                android:id="@+id/enter_serial_welcome_title"
+                android:src="@drawable/logo_main_white"
+                android:layout_width="wrap_content"
+                android:layout_height="64dp"
+                android:importantForAccessibility="no"
+                android:scaleX="1.5"
+                android:scaleY="1.5"
+                android:layout_centerHorizontal="true" />
 
 			<TextView
 					style="@style/WizardMediumText"
@@ -50,7 +50,6 @@
 					android:linksClickable="true"
 					android:autoLink="web"
 					android:text="@string/enter_serial_body"
-					android:layout_marginTop="@dimen/wizard_paragraph_height"
 					android:layout_marginBottom="5dp"
 			/>
 
@@ -157,17 +156,6 @@
 				android:gravity="center_horizontal"
 				android:layout_marginTop="32dp" />
 
-			<TextView
-				style="@style/WizardMediumText"
-				android:id="@+id/private_explain"
-				android:visibility="visible"
-				android:layout_width="fill_parent"
-				android:layout_height="wrap_content"
-				android:layout_below="@id/work_lost_credential_help"
-				android:layout_alignParentBottom="true"
-				android:gravity="center_horizontal|bottom"
-				android:layout_marginTop="32dp"/>
-
 		</RelativeLayout>
 
 	</FrameLayout>

+ 1 - 2
app/src/store_google_work/res/values-cs/strings.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="about_title">Threema Work pro Android</string>
-    <string name="enter_serial_body">Threema Work je messenger pro firmy. Zadejte pověření poskytnutá vaší společností nebo organizací.</string>
+    <string name="enter_serial_body">Zadejte prosím přihlašovací údaje společnosti Threema Work poskytnuté vaší společností.</string>
     <string name="serial_required_want_exit">Licence je neplatná. Chcete to zkusit znovu nebo aplikaci Threema Work ukončit?</string>
     <string name="checking_serial">Kontrola pověření</string>
     <string name="username_hint">Uživatelské jméno</string>
@@ -17,7 +17,6 @@
     <string name="new_wizard_info_link">Poskytnete‑li svoje telefonní číslo a e‑mailovou adresu, Threema Work může vašim kontaktům zajistit automatické přidání vašeho ID do jejich adresářů. Data budou uložena jednosměrně šifrovaná (hashovaná) na našem serveru. Tento krok můžete přeskočit, pokud chcete používat funkci Threema Work zcela anonymně. Toto nastavení lze později změnit.</string>
     <string name="threema_contact">Threema Work kontakt</string>
     <string name="menu_about">O aplikaci Threema Work</string>
-    <string name="private_threema_download"><![CDATA[ <a href=%1$s>Zjistěte více o Threema Work</a> <br/><br/> Pro osobní použití prosím <a href=%2$s>klepněte sem</a> pro stažení aplikace Threema.]]></string>
     <string name="directory_search">Hledat v adresáři</string>
     <string name="directory_title">Adresář společnosti</string>
     <string name="directory_empty_view_text">Chcete‑li zahájit vyhledávání v adresáři uživatelů Threema Work ve vaší společnosti, zadejte alespoň 3 znaky jména, nebo vyberte kategorii klepnutím na ikonu filtru.</string>

+ 1 - 2
app/src/store_google_work/res/values-de/strings.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
 	<string name="about_title">Threema Work für Android</string>
-	<string name="enter_serial_body">Threema Work ist der Messenger für Unternehmen. Geben Sie Ihre Zugangsdaten ein, die Sie von Ihrem Unternehmen erhalten haben.</string>
+	<string name="enter_serial_body">Geben Sie Ihre Threema Work-Zugangsdaten ein, die Sie von Ihrem Unternehmen erhalten haben.</string>
 	<string name="serial_required_want_exit">Die Lizenz ist ungültig. Möchten Sie es nochmals versuchen oder Threema verlassen?</string>
 	<string name="checking_serial">Zugangsberechtigung wird überprüft</string>
 	<string name="username_hint">Benutzername</string>
@@ -25,7 +25,6 @@
 	</string>
 	<string name="threema_contact">Threema Work-Kontakt</string>
 	<string name="menu_about">Über Threema Work</string>
-	<string name="private_threema_download"><![CDATA[ <a href=%1$s>Erfahren Sie mehr über Threema Work</a> <br/><br/> Wenn Sie die App privat nutzen möchten, laden Sie Threema bitte <a href=%2$s>hier</a> herunter.]]></string>
 	<string name="directory_search">Im Verzeichnis suchen</string>
 	<string name="directory_title">Unternehmensverzeichnis</string>
 	<string name="directory_empty_view_text">Bitte geben Sie mindestens 3 Zeichen eines Namens ein, um mit der Suche im Unternehmensverzeichnis zu beginnen oder wählen Sie eine Kategorie, indem Sie auf das Filter-Symbol tippen.</string>

+ 1 - 2
app/src/store_google_work/res/values-es/strings.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="about_title">Threema Work para Android</string>
-    <string name="enter_serial_body">Introduzca los datos de acceso que ha recibido de su empresa u organización</string>
+    <string name="enter_serial_body">Introduzca los datos de acceso de Threema Work que le ha proporcionado su empresa.</string>
     <string name="serial_required_want_exit">Licencia no válida. ¿Intentarlo otra vez o salir de Threema?</string>
     <string name="checking_serial">Comprobando credenciales</string>
     <string name="username_hint">Nombre de usuario</string>
@@ -23,7 +23,6 @@
 		anónimamente.</string>
     <string name="threema_contact">Contactar con Threema Work</string>
     <string name="menu_about">Acerca de Threema Work</string>
-    <string name="private_threema_download"><![CDATA[ <a href=%1$s>Obtenga más información sobre Threema Work</a> <br/><br/> Si es usted un usuario privado, <a href=%2$s>toque aquí</a> para descargarse Threema.]]></string>
     <string name="directory_search">Buscar en el directorio</string>
     <string name="directory_title">Directorio de la empresa</string>
     <string name="directory_empty_view_text">Introduce al menos 3 caracteres de un nombre para comenzar la búsqueda en el directorio de usuarios de Threema Work de tu empresa.</string>

+ 1 - 2
app/src/store_google_work/res/values-fr/strings.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="about_title">Threema Work pour Android</string>
-    <string name="enter_serial_body">Saisissez les identifiants que vous avez reçus de votre société ou organisation</string>
+    <string name="enter_serial_body">Veuillez saisir les identifiants Threema Work fournis par votre entreprise.</string>
     <string name="serial_required_want_exit">La licence est invalide. Voulez-vous réessayer ou quitter Threema ?</string>
     <string name="checking_serial">Vérification des identifiants</string>
     <string name="username_hint">Nom d\'utilisateur</string>
@@ -18,7 +18,6 @@ La paire de clés comprend une <b>clé publie</b> distribuée à vos contacts et
     <string name="new_wizard_info_link">En donnant votre numéro de téléphone et votre adresse e-mail, Theema Work peut aider vos amis à vous trouver automatiquement si vous vous trouvez dans leur carnet d\'adresses. Les adresses e-mail seront stockées de manière chiffrée sur notre serveur. Vous pouvez passer cette étape si vous souhaitez utiliser Threema Work de manière anonyme.</string>
     <string name="threema_contact">Contact Threema Work</string>
     <string name="menu_about">À propos de Threema Work</string>
-    <string name="private_threema_download"><![CDATA[ <a href=%1$s>En savoir plus sur Threema Work</a> <br/><br/>Si vous êtes un utilisateur privé, <a href=%2$s>touchez ici</a> pour télécharger Threema.]]></string>
     <string name="directory_search">Rechercher dans le répertoire</string>
     <string name="directory_title">Répertoire de l\'entreprise</string>
     <string name="directory_empty_view_text">Veuillez saisir au moins 3 caractères d\'un nom pour lancer une recherche dans le répertoire d\'utilisateurs Threema Work de votre entreprise</string>

+ 1 - 2
app/src/store_google_work/res/values-it/strings.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="about_title">Threema Work per Android</string>
-    <string name="enter_serial_body">Inserire i credenziali ricevuti dalla propria azienda o organizzazione</string>
+    <string name="enter_serial_body">Inserisci le credenziali Threema Work ricevute dalla tua azienda o organizzazione.</string>
     <string name="serial_required_want_exit">La licenza non è valida. Vuoi riprovare o desideri uscire da Threema?</string>
     <string name="checking_serial">Controllo credenziali</string>
     <string name="username_hint">Nome utente</string>
@@ -19,7 +19,6 @@ Threema Work
 in modo anonimo.</string>
     <string name="threema_contact">Contatto Threema Work</string>
     <string name="menu_about">Informazioni su Threema Work</string>
-    <string name="private_threema_download"><![CDATA[ <a href=%1$s>Scopri di più su Threema Work</a> <br/><br/> Se sei un utente privato, <a href=%2$s>tocca qui</a> per scaricare Threema.]]></string>
     <string name="directory_search">Cerca nella directory</string>
     <string name="directory_title">Directory azienda</string>
     <string name="directory_empty_view_text">Inserisci almeno 3 caratteri di un nome per iniziare a cercare nella directory della tua azienda degli utenti di Threema Work o seleziona una categoria toccando sull\'icona del filtro.</string>

+ 0 - 1
app/src/store_google_work/res/values-ja/strings.xml

@@ -23,7 +23,6 @@
 完全に匿名で利用したい場合には、このステップを省略することができます。</string>
     <string name="threema_contact">Threema Workの連絡先</string>
     <string name="menu_about">Threema Workについて</string>
-    <string name="private_threema_download"><![CDATA[個人ユーザーの方は、 <a href="https://play.google.com/store/apps/details?id=ch.threema.app">こちらをタップ</a>してThreemaをダウンロードしてください。]]></string>
     <string name="directory_search">ディレクトリ内検索</string>
     <string name="directory_title">会社のディレクトリ</string>
     <string name="directory_empty_view_text">エントリーが見つかりません

+ 1 - 2
app/src/store_google_work/res/values-nl-rNL/strings.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="about_title">Threema Work voor Android</string>
-    <string name="enter_serial_body">Voer de gegevens in die u van uw bedrijf of organisatie heeft ontvangen</string>
+    <string name="enter_serial_body">Voer de Threema Work-gegevens in die u van uw bedrijf hebt ontvangen.</string>
     <string name="serial_required_want_exit">Licentie is ongeldig. Probeer het opnieuw of sluit Threema af.</string>
     <string name="checking_serial">Gegevens controleren</string>
     <string name="username_hint">Gebruikersnaam</string>
@@ -17,7 +17,6 @@
     <string name="new_wizard_info_link">Als je je telefoonnummer en e-mailadres opgeeft, kan Threema Work helpen je vrienden automatisch te vinden als jij in hun lijst van contactpersonen staat. E-mailadressen worden versleuteld (hashed) op onze server opgeslagen. Je kunt deze stap ook overslaan als je Threema Work liever anoniem gebruikt.</string>
     <string name="threema_contact">Contactpersoon Threema Work</string>
     <string name="menu_about">Over Threema Work</string>
-    <string name="private_threema_download"><![CDATA[ <a href=%1$s>Meer informatie over Threema Work</a> <br/><br/> Als je een privégebruiker bent, kun je <a href=%2$s>hier tikken</a> om Threema te downloaden.]]></string>
     <string name="directory_search">Zoeken in de directory</string>
     <string name="directory_title">Bedrijfsdirectory</string>
     <string name="directory_empty_view_text">Voer ten minste 3 tekens van een naam in om in de bedrijfsdirectory naar Threema Work-gebruikers te zoeken</string>

+ 0 - 1
app/src/store_google_work/res/values-no/strings.xml

@@ -17,7 +17,6 @@
     <string name="new_wizard_info_link">Ved å oppgi ditt telefonnummer og e-postadresse, så kan Threema Work hjelpe dine kontakter å finne deg automatisk om de har deg i adresseboken på sin enhet. Informasjonen blir lagret på en sikker måte (en-veis kryptering ved hjelp av hash) på våre servere. Om du vil bruke Threema Work helt anonymt, så kan du hoppe over dette trinnet.</string>
     <string name="threema_contact">Threema Work kontakt</string>
     <string name="menu_about">Om Threema Work</string>
-    <string name="private_threema_download"><![CDATA[Om du er en privat bruker, vennligst <a href="https://play.google.com/store/apps/details?id=ch.threema.app">trykk her</a> for å laste ned Threema.]]></string>
     <string name="directory_search">Søk i katalogen</string>
     <string name="directory_title">Bedriftskatalog</string>
     <string name="directory_empty_view_text">Vennligst skriv inn minst 3 tegn av et navn for å kunne søke i bedriftskatalogen etter Threema Work brukere</string>

+ 1 - 2
app/src/store_google_work/res/values-pl/strings.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="about_title">Threema Work na Androida</string>
-    <string name="enter_serial_body">Wprowadź dane dostępu, które otrzymałeś od swojej firmy lub organizacji</string>
+    <string name="enter_serial_body">Wprowadź dane uwierzytelniające Threema Work dostarczone przez Twoją firmę.</string>
     <string name="serial_required_want_exit">Licencja jest nieprawidłowa. Chcesz spróbować ponownie czy wolisz opuścić Threema?</string>
     <string name="checking_serial">Sprawdzanie danych dostępowych</string>
     <string name="username_hint">Nazwa użytkownika</string>
@@ -17,7 +17,6 @@
     <string name="new_wizard_info_link">Podając swój numer telefonu i adres e-mail, umożliwisz swoim znajomym, którzy mają Cię w książce kontaktów w telefonie, odnalezienie Cię automatycznie w Threema Work. Adresy e-mail przechowywane są na naszym serwerze w formie zaszyfrowanej jednokierunkowo. Możesz oczywiście pominąć ten krok, jeśli wolisz korzystać z Threema Work anonimowo.</string>
     <string name="threema_contact">Kontakt Threema Work</string>
     <string name="menu_about">O Threema Work</string>
-    <string name="private_threema_download"><![CDATA[ <a href=%1$s>Dowiedz się więcej o Threema Work</a> <br/><br/> Jeśli jesteś użytkownikiem prywatnym, <a href=%2$s>kliknij tutaj</a>, aby pobrać Threema.]]></string>
     <string name="directory_search">Szukaj w książce telefonicznej</string>
     <string name="directory_title">Firmowa książka telefoniczna</string>
     <string name="directory_empty_view_text">Wpisz co najmniej 3 znaki nazwy, aby rozpocząć wyszukiwanie w Twojej firmowej książce telefonicznej użytkowników Threema Work.</string>

+ 1 - 2
app/src/store_google_work/res/values-pt-rBR/strings.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="about_title">Threema Work para Android</string>
-    <string name="enter_serial_body">Insira as credenciais fornecidas por sua empresa ou organização</string>
+    <string name="enter_serial_body">Insira as credenciais do Threema Work fornecidas pela sua empresa.</string>
     <string name="serial_required_want_exit">A licença é inválida. Você gostaria de tentar novamente ou sair do Threema?</string>
     <string name="checking_serial">Verificando credenciais</string>
     <string name="username_hint">Nome de usuário</string>
@@ -20,7 +20,6 @@
     <string name="new_wizard_info_link">Ao nos dar o seu número de telefone e endereço de e-mail, o Threema Work pode ajudar os seus amigos a encontrarem você automaticamente se tiverem os seus dados na agenda do telefone. Essas informações serão armazenadas de forma criptografada no nosso servidor. Você pode pular essa etapa se preferir usar o Threema Work de forma anônima.</string>
     <string name="threema_contact">Contato do Threema Work</string>
     <string name="menu_about">Sobre o Threema Work</string>
-    <string name="private_threema_download"><![CDATA[ <a href=%1$s>Saiba mais sobre o Threema Work</a> <br/><br/> Se você é um usuário privado, <a href=%2$s>toque aqui</a> para baixar o Threema.]]></string>
     <string name="directory_search">Pesquisar no diretório</string>
     <string name="directory_title">Diretório da empresa</string>
     <string name="directory_empty_view_text">Insira pelo menos 3 caracteres de um nome para começar a pesquisar no diretório de usuários do Threema Work da sua empresa</string>

+ 0 - 1
app/src/store_google_work/res/values-rm/strings.xml

@@ -17,5 +17,4 @@
     <string name="new_wizard_info_link">Sche ti inditgescha tes numer da telefonin e/u tia adressa dad e-mail, po Threema Work gidar tes contacts da ta chattar automaticamain, sche ti es registrà en lur cudeschs d\'adressas. Las adressas dad e-mail vegnan memorisadas en furma da diever unic (furma da hash) sin noss server. Ti pos era sursiglir quest pass, sche ti vuls utilisar anonimamain Threema Work.</string>
     <string name="threema_contact">Contact da Threema Work</string>
     <string name="menu_about">Davart Threema Work</string>
-    <string name="private_threema_download"><![CDATA[<a href="https://play.google.com/store/apps/details?id=ch.threema.app">Per utilisaders privats</a>]]></string>
 </resources>

+ 1 - 2
app/src/store_google_work/res/values-ru/strings.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="about_title">Threema Work для Android</string>
-    <string name="enter_serial_body">Введите учетные данные, предоставленные вашей компанией или организацией</string>
+    <string name="enter_serial_body">Введите учетные данные Threema Work, предоставленные вашей компанией или организацией.</string>
     <string name="serial_required_want_exit">Лицензия недействительна. Повторить попытку или выйти из Threema?</string>
     <string name="checking_serial">Проверка учетных данных</string>
     <string name="username_hint">Имя пользователя</string>
@@ -18,7 +18,6 @@
 Адреса электронной почты будут храниться в зашифрованном (хэшированном) виде на нашем сервере. Вы можете пропустить этот шаг, если хотите использовать Threema Work анонимно.</string>
     <string name="threema_contact">Контакт Threema Work</string>
     <string name="menu_about">О Threema Work</string>
-    <string name="private_threema_download"><![CDATA[Если вы частный пользователь, <a href="https://play.google.com/store/apps/details?id=ch.threema.app">нажмите здесь</a> для скачивания приложения Threema.]]></string>
     <string name="directory_search">Поиск в каталоге</string>
     <string name="directory_title">Каталог компании</string>
     <string name="directory_empty_view_text">Чтобы начать поиск в каталоге пользователей Threema Work в вашей компании, введите по меньшей мере 3 символа имени</string>

+ 1 - 2
app/src/store_google_work/res/values-sk/strings.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="about_title">Threema Work pre Android</string>
-    <string name="enter_serial_body">Threema Work je komunikátor určený pre spoločnosti. Zadajte prihlasovacie údaje poskytnuté vašou spoločnosťou.</string>
+    <string name="enter_serial_body">Zadajte poverenia Threema Work poskytnuté vašou spoločnosťou.</string>
     <string name="serial_required_want_exit">Licencia je neplatná. Chcete to skúsiť znovu alebo ukončiť Threemu Work?</string>
     <string name="checking_serial">Kontrola prihlasovacích údajov</string>
     <string name="username_hint">Užívateľské meno</string>
@@ -17,7 +17,6 @@
     <string name="new_wizard_info_link">Poskytnutím svojho telefónneho čísla a e-mailovej adresy môže Threema Work pomôcť vašim kontaktom automaticky pridať vaše ID do ich adresára, ak vás majú v zozname. Údaje budú jednosmerne šifrované (hashované) a uložené na našom serveri. Tento krok môžete preskočiť, ak chcete používať Threemu Work výlučne anonymne.</string>
     <string name="threema_contact">Kontakt Threema Work</string>
     <string name="menu_about">O aplikácii Threema Work</string>
-    <string name="private_threema_download"><![CDATA[Ak ste súkromný používateľ, prosím <a href="https://play.google.com/store/apps/details?id=ch.threema.app">kliknite sem</a> na stiahnutie aplikácie Threema.]]></string>
     <string name="directory_search">Hľadať v adresári</string>
     <string name="directory_title">Adresár spoločnosti</string>
     <string name="directory_empty_view_text">Zadajte aspoň 3 znaky mena, aby ste mohli začať hľadať v adresári vašej spoločnosti používateľov Threema Work alebo vyberte kategóriu klepnutím na ikonu filtra.</string>

+ 1 - 2
app/src/store_google_work/res/values-tr/strings.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="about_title">Android için Threema Work</string>
-    <string name="enter_serial_body">Threema Work, Şirketler için bir mesajlaşma aracıdır. Lütfen şirketiniz tarafından sağlanan kimlik bilgilerini girin.</string>
+    <string name="enter_serial_body">Lütfen şirketiniz tarafından sağlanan Threema Work kimlik bilgilerini girin.</string>
     <string name="serial_required_want_exit">Lisans geçersiz. Tekrar denemek veya Threema Work\'ten çıkmak ister misiniz?</string>
     <string name="checking_serial">Kimlik bilgileri kontrol ediliyor</string>
     <string name="username_hint">Kullanıcı adı</string>
@@ -17,7 +17,6 @@
     <string name="new_wizard_info_link">Threema Work, telefon numaranızı ve e-posta adresinizi sağlayarak, telefonlarının adres defterinde mevcutsanız, kişilerinizin sizi otomatik olarak bulmasına yardımcı olur. Veriler, sunucumuzda tek yönlü şifreli (karma veri) bir biçimde saklanacaktır. Threema Work\'ü anonim olarak kullanmak istiyorsanız bu adımı atlayabilirsiniz.</string>
     <string name="threema_contact">Threema Work kişisi</string>
     <string name="menu_about">Threema Work Hakkında</string>
-    <string name="private_threema_download"><![CDATA[<a href= %1$s>Threema Work hakkında daha fazla bilgi edinin</a> <br/> <br/> Özel bir kullanıcıysanız, Threema\'yı indirmek için lütfen <a href=%2$s>buraya dokunun</a>.]]></string>
     <string name="directory_search">Dizinde ara</string>
     <string name="directory_title">Şirket Rehberi</string>
     <string name="directory_empty_view_text">Threema Work kullanıcılarını şirket rehberinde aramaya başlamak için lütfen bir ismin en az 3 karakterini girin veya filtre simgesine dokunarak kategori seçin.</string>

+ 1 - 2
app/src/store_google_work/res/values-uk/strings.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="about_title">Threema Work для Android</string>
-    <string name="enter_serial_body">Threema Work — це месенджер для компаній. Введіть облікові дані, надані вашою компанією.</string>
+    <string name="enter_serial_body">Будь ласка, введіть облікові дані Threema Work, надані вашою компанією.</string>
     <string name="serial_required_want_exit">Ліцензія недійсна. Cпробувати ще раз чи вийти із Threema Work?</string>
     <string name="checking_serial">Перевірка облікових даних</string>
     <string name="username_hint">Ім\'я користувача</string>
@@ -23,7 +23,6 @@
 		анонімно.</string>
     <string name="threema_contact">Контакт Threema Work</string>
     <string name="menu_about">Про Threema Work</string>
-    <string name="private_threema_download"><![CDATA[Якщо вам потрібен месенджер для особистого використання, <a href="https://play.google.com/store/apps/details?id=ch.threema.app">торкніться тут</a>, щоб завантажити Threema.]]></string>
     <string name="directory_search">Шукати в каталозі</string>
     <string name="directory_title">Каталог компанії</string>
     <string name="directory_empty_view_text">Введіть принаймні 3 символи імені, щоб почати пошук користувачів Threema Work в каталозі компанії, або натисніть значок фільтра, щоб вибрати категорію.</string>

+ 1 - 2
app/src/store_google_work/res/values-zh-rCN/strings.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="about_title">Threema Work Android版</string>
-    <string name="enter_serial_body">请输入贵公司或组织提供的凭据</string>
+    <string name="enter_serial_body">请输入贵公司提供的 Threema Work 凭证。</string>
     <string name="serial_required_want_exit">许可证无效。您想重试还是退出 Threema Work?</string>
     <string name="checking_serial">正在检查凭据</string>
     <string name="username_hint">用户名</string>
@@ -19,7 +19,6 @@
 数据将以单向加密(散列)形式存储在我们的服务器上。如果您想完全匿名使用 Threema Work,则可以跳过此步骤。</string>
     <string name="threema_contact">Threema Work 联系人</string>
     <string name="menu_about">关于 Threema Work</string>
-    <string name="private_threema_download"><![CDATA[<a href=%1$s>了解更多关于 Threema Work 的信息</a> <br/><br/>如果您是私人用户,请<a href=%2$s>点击这里</a> 下载 Threema。]]></string>
     <string name="directory_search">在目录中搜索</string>
     <string name="directory_title">公司目录</string>
     <string name="directory_empty_view_text">找不到结果

+ 1 - 2
app/src/store_google_work/res/values-zh-rTW/strings.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <string name="about_title">Threema Work Android版</string>
-    <string name="enter_serial_body">請輸入貴公司或機構提供的憑證</string>
+    <string name="enter_serial_body">請輸入貴公司提供的 Threema Work 憑證</string>
     <string name="serial_required_want_exit">授權無效。您想再試一次還是退出 Threema Work?</string>
     <string name="checking_serial">正在檢查憑證</string>
     <string name="username_hint">用戶名稱</string>
@@ -20,7 +20,6 @@
 資料將以單向加密(雜湊)形式儲存在我們的伺服器上。 如果您想完全匿名使用 Threema Work,則可以跳過此步驟。</string>
     <string name="threema_contact">Threema Work 聯絡人</string>
     <string name="menu_about">關於 Threema Work</string>
-    <string name="private_threema_download"><![CDATA[<a href=%1$s>了解更多關於 Threema Work 的資訊</a> <br/><br/>如果您是私人使用者,請<a href=%2$s>點擊這裡</a> 下載 Threema。]]></string>
     <string name="directory_search">在目錄中搜尋</string>
     <string name="directory_title">公司目錄</string>
     <string name="directory_empty_view_text">找不到結果

+ 1 - 1
app/src/store_google_work/res/values/colors.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
 	<!-- wizard -->
-	<color name="wizard_color_primary">@android:color/white</color>
+	<color name="wizard_color_text_on_primary">@android:color/white</color>
 	<color name="wizard_alpha_background">#33ffffff</color>
 	<color name="wizard_color_accent">#0096ff</color>
 	<color name="wizard_color_accent_dark">#323232</color>

+ 1 - 2
app/src/store_google_work/res/values/strings.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
 	<string name="about_title">Threema Work for Android</string>
-	<string name="enter_serial_body">Threema Work is the messenger for companies. Please enter the credentials provided by your company.</string>
+	<string name="enter_serial_body">Please enter the Threema Work credentials provided by your company.</string>
 	<string name="serial_required_want_exit">License is invalid. Would you like to try again or quit Threema Work?</string>
 	<string name="checking_serial">Checking credentials</string>
 	<string name="username_hint">Username</string>
@@ -25,7 +25,6 @@
 	</string>
 	<string name="threema_contact">Threema Work Contact</string>
 	<string name="menu_about">About Threema Work</string>
-	<string name="private_threema_download"><![CDATA[ <a href=%1$s>Learn more about Threema Work</a> <br/><br/> If you are a private user, please <a href=%2$s>tap here</a> to download Threema.]]></string>
 	<string name="directory_search">Search in the directory</string>
 	<string name="directory_title">Company directory</string>
 	<string name="directory_empty_view_text">Please enter at least 3 characters of a name to begin searching in your company\'s directory of Threema Work users or select a category by tapping on the filter icon.</string>

+ 0 - 6
app/src/store_google_work/res/values/untranslateable_strings.xml

@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <string name="threema_work_url" translatable="false">https://threema.ch/%s/work</string>
-    <string name="private_download_url" translatable="false">https://play.google.com/store/apps/details?id=ch.threema.app</string>
-    <string name="private_download_url_hms" translatable="false">https://appgallery.huawei.com/#/app/C103713829</string>
-</resources>

Some files were not shown because too many files changed in this diff