diff --git a/CHANGES.md b/CHANGES.md
index 46a83b881c..bfea6c4742 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -5,10 +5,11 @@ Features ✨:
-
Improvements 🙌:
- -
+ - "Add Matrix app" menu is now always visible (#1495)
Bugfix 🐛:
- -
+ - Fix dark theme issue on login screen (#1097)
+ - Incomplete predicate in RealmCryptoStore#getOutgoingRoomKeyRequest (#1519)
Translations 🗣:
-
@@ -18,6 +19,7 @@ SDK API changes ⚠️:
Build 🧱:
- Enable code optimization (Proguard)
+ - SDK is now API level 21 minimum, and so RiotX (#405)
Other changes:
-
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index b36843adee..c647a46da9 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -19,7 +19,11 @@ An Android Studio template has been added to the project to help creating all fi
To install the template (to be done only once):
- Go to folder `./tools/template`.
-- Run the script `./configure.sh`.
+- Mac OSX: Run the script `./configure.sh`.
+
+ Linux: Run `ANDROID_STUDIO=/path/to/android-studio ./configure`
+ - e.g. `ANDROID_STUDIO=/usr/local/android-studio ./configure`
+
- Restart Android Studio.
To create a new screen:
diff --git a/README.md b/README.md
index b43bcf643c..251ee3e236 100644
--- a/README.md
+++ b/README.md
@@ -11,8 +11,8 @@ RiotX is an Android Matrix Client currently in beta but in active development.
It is a total rewrite of [Riot-Android](https://github.com/vector-im/riot-android) with a new user experience. RiotX will become the official replacement as soon as all features are implemented.
-[
](https://play.google.com/store/apps/details?id=im.vector.riotx)
-[
](https://f-droid.org/app/im.vector.riotx)
+[
](https://play.google.com/store/apps/details?id=im.vector.riotx)
+[
](https://f-droid.org/app/im.vector.riotx)
Nightly build: [![Buildkite](https://badge.buildkite.com/657d3db27364448d69d54f66c690f7788bc6aa80a7628e37f3.svg?branch=develop)](https://buildkite.com/matrix-dot-org/riotx-android/builds?branch=develop)
diff --git a/matrix-sdk-android-rx/build.gradle b/matrix-sdk-android-rx/build.gradle
index 734ff0c130..c67d10d810 100644
--- a/matrix-sdk-android-rx/build.gradle
+++ b/matrix-sdk-android-rx/build.gradle
@@ -6,7 +6,7 @@ android {
compileSdkVersion 29
defaultConfig {
- minSdkVersion 16
+ minSdkVersion 21
targetSdkVersion 29
versionCode 1
versionName "1.0"
diff --git a/matrix-sdk-android/build.gradle b/matrix-sdk-android/build.gradle
index 436d3b6319..e4251a733c 100644
--- a/matrix-sdk-android/build.gradle
+++ b/matrix-sdk-android/build.gradle
@@ -23,7 +23,7 @@ android {
testOptions.unitTests.includeAndroidResources = true
defaultConfig {
- minSdkVersion 16
+ minSdkVersion 21
targetSdkVersion 29
versionCode 1
versionName "0.0.1"
diff --git a/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/internal/crypto/gossiping/KeyShareTests.kt b/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/internal/crypto/gossiping/KeyShareTests.kt
index 57ab4aaf33..afcb8b1cbd 100644
--- a/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/internal/crypto/gossiping/KeyShareTests.kt
+++ b/matrix-sdk-android/src/androidTest/java/im/vector/matrix/android/internal/crypto/gossiping/KeyShareTests.kt
@@ -90,7 +90,7 @@ class KeyShareTests : InstrumentedTest {
} catch (failure: Throwable) {
}
- val outgoingRequestBefore = aliceSession2.cryptoService().getOutgoingRoomKeyRequest()
+ val outgoingRequestsBefore = aliceSession2.cryptoService().getOutgoingRoomKeyRequests()
// Try to request
aliceSession2.cryptoService().requestRoomKeyForEvent(receivedEvent.root)
@@ -100,10 +100,10 @@ class KeyShareTests : InstrumentedTest {
var outGoingRequestId: String? = null
mTestHelper.retryPeriodicallyWithLatch(waitLatch) {
- aliceSession2.cryptoService().getOutgoingRoomKeyRequest()
+ aliceSession2.cryptoService().getOutgoingRoomKeyRequests()
.filter { req ->
// filter out request that was known before
- !outgoingRequestBefore.any { req.requestId == it.requestId }
+ !outgoingRequestsBefore.any { req.requestId == it.requestId }
}
.let {
val outgoing = it.firstOrNull { it.sessionId == eventMegolmSessionId }
@@ -115,10 +115,10 @@ class KeyShareTests : InstrumentedTest {
Log.v("TEST", "=======> Outgoing requet Id is $outGoingRequestId")
- val outgoingRequestAfter = aliceSession2.cryptoService().getOutgoingRoomKeyRequest()
+ val outgoingRequestAfter = aliceSession2.cryptoService().getOutgoingRoomKeyRequests()
// We should have a new request
- Assert.assertTrue(outgoingRequestAfter.size > outgoingRequestBefore.size)
+ Assert.assertTrue(outgoingRequestAfter.size > outgoingRequestsBefore.size)
Assert.assertNotNull(outgoingRequestAfter.first { it.sessionId == eventMegolmSessionId })
// The first session should see an incoming request
@@ -126,7 +126,7 @@ class KeyShareTests : InstrumentedTest {
mTestHelper.waitWithLatch { latch ->
mTestHelper.retryPeriodicallyWithLatch(latch) {
// DEBUG LOGS
- aliceSession.cryptoService().getIncomingRoomKeyRequest().let {
+ aliceSession.cryptoService().getIncomingRoomKeyRequests().let {
Log.v("TEST", "Incoming request Session 1 (looking for $outGoingRequestId)")
Log.v("TEST", "=========================")
it.forEach { keyRequest ->
@@ -135,7 +135,7 @@ class KeyShareTests : InstrumentedTest {
Log.v("TEST", "=========================")
}
- val incoming = aliceSession.cryptoService().getIncomingRoomKeyRequest().firstOrNull { it.requestId == outGoingRequestId }
+ val incoming = aliceSession.cryptoService().getIncomingRoomKeyRequests().firstOrNull { it.requestId == outGoingRequestId }
incoming?.state == GossipingRequestState.REJECTED
}
}
@@ -155,7 +155,7 @@ class KeyShareTests : InstrumentedTest {
mTestHelper.waitWithLatch { latch ->
mTestHelper.retryPeriodicallyWithLatch(latch) {
- aliceSession.cryptoService().getIncomingRoomKeyRequest().let {
+ aliceSession.cryptoService().getIncomingRoomKeyRequests().let {
Log.v("TEST", "Incoming request Session 1")
Log.v("TEST", "=========================")
it.forEach {
@@ -171,7 +171,7 @@ class KeyShareTests : InstrumentedTest {
Thread.sleep(6_000)
mTestHelper.waitWithLatch { latch ->
mTestHelper.retryPeriodicallyWithLatch(latch) {
- aliceSession2.cryptoService().getOutgoingRoomKeyRequest().let {
+ aliceSession2.cryptoService().getOutgoingRoomKeyRequests().let {
it.any { it.requestBody?.sessionId == eventMegolmSessionId && it.state == OutgoingGossipingRequestState.CANCELLED }
}
}
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/crypto/CryptoService.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/crypto/CryptoService.kt
index 2c96465313..69fc332453 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/crypto/CryptoService.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/crypto/CryptoService.kt
@@ -138,7 +138,9 @@ interface CryptoService {
fun removeSessionListener(listener: NewSessionListener)
- fun getOutgoingRoomKeyRequest(): List
- fun getIncomingRoomKeyRequest(): List
+ fun getOutgoingRoomKeyRequests(): List
+
+ fun getIncomingRoomKeyRequests(): List
+
fun getGossipingEventsTrail(): List
}
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/widgets/model/WidgetContent.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/widgets/model/WidgetContent.kt
index 7e045f25c7..af70400622 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/widgets/model/WidgetContent.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/widgets/model/WidgetContent.kt
@@ -21,6 +21,9 @@ import com.squareup.moshi.Json
import com.squareup.moshi.JsonClass
import im.vector.matrix.android.api.util.JsonDict
+/**
+ * Ref: https://github.com/matrix-org/matrix-doc/issues/1236
+ */
@JsonClass(generateAdapter = true)
data class WidgetContent(
@Json(name = "creatorUserId") val creatorUserId: String? = null,
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/widgets/model/WidgetType.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/widgets/model/WidgetType.kt
index d930a335d3..3977a4c474 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/widgets/model/WidgetType.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/session/widgets/model/WidgetType.kt
@@ -32,6 +32,9 @@ private val DEFINED_TYPES by lazy {
)
}
+/**
+ * Ref: https://github.com/matrix-org/matrix-doc/issues/1236
+ */
sealed class WidgetType(open val preferred: String, open val legacy: String = preferred) {
object Jitsi : WidgetType("m.jitsi", "jitsi")
object TradingView : WidgetType("m.tradingview")
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/DefaultCryptoService.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/DefaultCryptoService.kt
index 7badb26d8a..7b3a253287 100755
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/DefaultCryptoService.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/DefaultCryptoService.kt
@@ -1262,11 +1262,11 @@ internal class DefaultCryptoService @Inject constructor(
return "DefaultCryptoService of $userId ($deviceId)"
}
- override fun getOutgoingRoomKeyRequest(): List {
+ override fun getOutgoingRoomKeyRequests(): List {
return cryptoStore.getOutgoingRoomKeyRequests()
}
- override fun getIncomingRoomKeyRequest(): List {
+ override fun getIncomingRoomKeyRequests(): List {
return cryptoStore.getIncomingRoomKeyRequests()
}
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/store/db/RealmCryptoStore.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/store/db/RealmCryptoStore.kt
index 6af96f886d..a78ab70b72 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/store/db/RealmCryptoStore.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/store/db/RealmCryptoStore.kt
@@ -897,9 +897,9 @@ internal class RealmCryptoStore @Inject constructor(
it.toOutgoingGossipingRequest() as? OutgoingRoomKeyRequest
}.firstOrNull {
it.requestBody?.algorithm == requestBody.algorithm
- it.requestBody?.roomId == requestBody.roomId
- it.requestBody?.senderKey == requestBody.senderKey
- it.requestBody?.sessionId == requestBody.sessionId
+ && it.requestBody?.roomId == requestBody.roomId
+ && it.requestBody?.senderKey == requestBody.senderKey
+ && it.requestBody?.sessionId == requestBody.sessionId
}
}
@@ -1266,7 +1266,7 @@ internal class RealmCryptoStore @Inject constructor(
deviceInfoEntity.trustLevelEntity = it
}
} else {
- locallyVerified?.let { trustEntity.locallyVerified = it }
+ locallyVerified?.let { trustEntity.locallyVerified = it }
trustEntity.crossSignedVerified = crossSignedVerified
}
}
diff --git a/resources/img/f-droid-badge.png b/resources/img/f-droid-badge.png
new file mode 100644
index 0000000000..0fcd0eb5f8
Binary files /dev/null and b/resources/img/f-droid-badge.png differ
diff --git a/resources/img/google-play-badge.png b/resources/img/google-play-badge.png
new file mode 100644
index 0000000000..9499b2dca0
Binary files /dev/null and b/resources/img/google-play-badge.png differ
diff --git a/tools/templates/configure.sh b/tools/templates/configure.sh
index eb2aa0dbec..de7fe7da81 100755
--- a/tools/templates/configure.sh
+++ b/tools/templates/configure.sh
@@ -17,8 +17,9 @@
#
echo "Configure RiotX Template..."
+if [ -z ${ANDROID_STUDIO+x} ]; then ANDROID_STUDIO="/Applications/Android Studio.app/Contents"; fi
{
-ln -s $(pwd)/RiotXFeature /Applications/Android\ Studio.app/Contents/plugins/android/lib/templates/other
+ln -s $(pwd)/RiotXFeature "${ANDROID_STUDIO%/}/plugins/android/lib/templates/other"
} && {
echo "Please restart Android Studio."
}
diff --git a/vector/build.gradle b/vector/build.gradle
index e198344424..5830b38559 100644
--- a/vector/build.gradle
+++ b/vector/build.gradle
@@ -107,9 +107,8 @@ android {
compileSdkVersion 29
defaultConfig {
applicationId "im.vector.riotx"
- // Set to API 19 because motionLayout is min API 18.
- // In the future we may consider using an alternative of MotionLayout to support API 16. But for security reason, maybe not.
- minSdkVersion 19
+ // Set to API 21: see #405
+ minSdkVersion 21
targetSdkVersion 29
multiDexEnabled true
diff --git a/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailFragment.kt b/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailFragment.kt
index e402433cef..c890ce212b 100644
--- a/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailFragment.kt
+++ b/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailFragment.kt
@@ -315,7 +315,7 @@ class RoomDetailFragment @Inject constructor(
is RoomDetailViewEvents.SendMessageResult -> renderSendMessageResult(it)
RoomDetailViewEvents.DisplayPromptForIntegrationManager -> displayPromptForIntegrationManager()
is RoomDetailViewEvents.OpenStickerPicker -> openStickerPicker(it)
- is RoomDetailViewEvents.DisplayEnableIntegrationsWarning -> displayEnableIntegrationsWarning()
+ is RoomDetailViewEvents.DisplayEnableIntegrationsWarning -> displayDisabledIntegrationDialog()
is RoomDetailViewEvents.OpenIntegrationManager -> openIntegrationManager()
}.exhaustive
}
@@ -354,17 +354,6 @@ class RoomDetailFragment @Inject constructor(
.show()
}
- private fun displayEnableIntegrationsWarning() {
- AlertDialog.Builder(requireContext())
- .setTitle(R.string.integration_manager_not_enabled_title)
- .setMessage(R.string.integration_manager_not_enabled_msg)
- .setPositiveButton(R.string.open_settings) { _, _ ->
- navigator.openSettings(requireContext(), VectorSettingsActivity.EXTRA_DIRECT_ACCESS_GENERAL)
- }
- .setNegativeButton(R.string.cancel, null)
- .show()
- }
-
private fun handleJoinedToAnotherRoom(action: RoomDetailViewEvents.JoinRoomCommandSuccess) {
updateComposerText("")
lockSendButton = false
@@ -496,6 +485,17 @@ class RoomDetailFragment @Inject constructor(
}
}
+ private fun displayDisabledIntegrationDialog() {
+ AlertDialog.Builder(requireActivity())
+ .setTitle(R.string.disabled_integration_dialog_title)
+ .setMessage(R.string.disabled_integration_dialog_content)
+ .setPositiveButton(R.string.settings) { _, _ ->
+ navigator.openSettings(requireActivity(), VectorSettingsActivity.EXTRA_DIRECT_ACCESS_GENERAL)
+ }
+ .setNegativeButton(R.string.cancel, null)
+ .show()
+ }
+
private fun renderRegularMode(text: String) {
autoCompleter.exitSpecialMode()
composerLayout.collapse()
diff --git a/vector/src/main/java/im/vector/riotx/features/login/terms/LoginTermsFragment.kt b/vector/src/main/java/im/vector/riotx/features/login/terms/LoginTermsFragment.kt
index 88f4fc2f5f..49abc9ba81 100755
--- a/vector/src/main/java/im/vector/riotx/features/login/terms/LoginTermsFragment.kt
+++ b/vector/src/main/java/im/vector/riotx/features/login/terms/LoginTermsFragment.kt
@@ -21,17 +21,17 @@ import android.os.Parcelable
import android.view.View
import butterknife.OnClick
import com.airbnb.mvrx.args
+import im.vector.matrix.android.internal.auth.registration.LocalizedFlowDataLoginTerms
import im.vector.riotx.R
import im.vector.riotx.core.extensions.cleanup
import im.vector.riotx.core.extensions.configureWith
import im.vector.riotx.core.extensions.toReducedUrl
-import im.vector.riotx.core.utils.openUrlInExternalBrowser
+import im.vector.riotx.core.utils.openUrlInChromeCustomTab
import im.vector.riotx.features.login.AbstractLoginFragment
import im.vector.riotx.features.login.LoginAction
import im.vector.riotx.features.login.LoginViewState
import kotlinx.android.parcel.Parcelize
import kotlinx.android.synthetic.main.fragment_login_terms.*
-import im.vector.matrix.android.internal.auth.registration.LocalizedFlowDataLoginTerms
import javax.inject.Inject
@Parcelize
@@ -95,7 +95,7 @@ class LoginTermsFragment @Inject constructor(
localizedFlowDataLoginTerms.localizedUrl
?.takeIf { it.isNotBlank() }
?.let {
- openUrlInExternalBrowser(requireContext(), it)
+ openUrlInChromeCustomTab(requireContext(), null, it)
}
}
diff --git a/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsActivity.kt b/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsActivity.kt
index 3a41318619..bbe6358bd9 100755
--- a/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsActivity.kt
+++ b/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsActivity.kt
@@ -59,7 +59,7 @@ class VectorSettingsActivity : VectorBaseActivity(),
if (isFirstCreation()) {
// display the fragment
when (intent.getIntExtra(EXTRA_DIRECT_ACCESS, EXTRA_DIRECT_ACCESS_ROOT)) {
- EXTRA_DIRECT_ACCESS_GENERAL ->
+ EXTRA_DIRECT_ACCESS_GENERAL ->
replaceFragment(R.id.vector_settings_page, VectorSettingsGeneralFragment::class.java, null, FRAGMENT_TAG)
EXTRA_DIRECT_ACCESS_ADVANCED_SETTINGS ->
replaceFragment(R.id.vector_settings_page, VectorSettingsAdvancedSettingsFragment::class.java, null, FRAGMENT_TAG)
diff --git a/vector/src/main/java/im/vector/riotx/features/settings/devtools/GossipingEventsEpoxyController.kt b/vector/src/main/java/im/vector/riotx/features/settings/devtools/GossipingEventsEpoxyController.kt
index 8760f9ebb2..722115adf3 100644
--- a/vector/src/main/java/im/vector/riotx/features/settings/devtools/GossipingEventsEpoxyController.kt
+++ b/vector/src/main/java/im/vector/riotx/features/settings/devtools/GossipingEventsEpoxyController.kt
@@ -179,7 +179,7 @@ class GossipingEventsEpoxyController @Inject constructor(
}
private fun buildOutgoing(data: KeyRequestListViewState?) {
- data?.outgoingRoomKeyRequest?.let { async ->
+ data?.outgoingRoomKeyRequests?.let { async ->
when (async) {
is Uninitialized,
is Loading -> {
diff --git a/vector/src/main/java/im/vector/riotx/features/settings/devtools/KeyRequestEpoxyController.kt b/vector/src/main/java/im/vector/riotx/features/settings/devtools/KeyRequestEpoxyController.kt
index b5e1303d89..7721b67118 100644
--- a/vector/src/main/java/im/vector/riotx/features/settings/devtools/KeyRequestEpoxyController.kt
+++ b/vector/src/main/java/im/vector/riotx/features/settings/devtools/KeyRequestEpoxyController.kt
@@ -107,7 +107,7 @@ class KeyRequestEpoxyController @Inject constructor(
}
private fun buildOutgoing(data: KeyRequestListViewState?) {
- data?.outgoingRoomKeyRequest?.let { async ->
+ data?.outgoingRoomKeyRequests?.let { async ->
when (async) {
is Uninitialized,
is Loading -> {
diff --git a/vector/src/main/java/im/vector/riotx/features/settings/devtools/KeyRequestListViewModel.kt b/vector/src/main/java/im/vector/riotx/features/settings/devtools/KeyRequestListViewModel.kt
index 06d9ffcf7d..db4b4f7d60 100644
--- a/vector/src/main/java/im/vector/riotx/features/settings/devtools/KeyRequestListViewModel.kt
+++ b/vector/src/main/java/im/vector/riotx/features/settings/devtools/KeyRequestListViewModel.kt
@@ -36,7 +36,7 @@ import kotlinx.coroutines.launch
data class KeyRequestListViewState(
val incomingRequests: Async> = Uninitialized,
- val outgoingRoomKeyRequest: Async> = Uninitialized
+ val outgoingRoomKeyRequests: Async> = Uninitialized
) : MvRxState
class KeyRequestListViewModel @AssistedInject constructor(@Assisted initialState: KeyRequestListViewState,
@@ -49,14 +49,14 @@ class KeyRequestListViewModel @AssistedInject constructor(@Assisted initialState
fun refresh() {
viewModelScope.launch {
- session.cryptoService().getOutgoingRoomKeyRequest().let {
+ session.cryptoService().getOutgoingRoomKeyRequests().let {
setState {
copy(
- outgoingRoomKeyRequest = Success(it)
+ outgoingRoomKeyRequests = Success(it)
)
}
}
- session.cryptoService().getIncomingRoomKeyRequest().let {
+ session.cryptoService().getIncomingRoomKeyRequests().let {
setState {
copy(
incomingRequests = Success(it)
diff --git a/vector/src/main/java/im/vector/riotx/features/terms/ReviewTermsFragment.kt b/vector/src/main/java/im/vector/riotx/features/terms/ReviewTermsFragment.kt
index ecf5818300..0adfa049fe 100644
--- a/vector/src/main/java/im/vector/riotx/features/terms/ReviewTermsFragment.kt
+++ b/vector/src/main/java/im/vector/riotx/features/terms/ReviewTermsFragment.kt
@@ -30,7 +30,7 @@ import im.vector.riotx.core.extensions.configureWith
import im.vector.riotx.core.extensions.exhaustive
import im.vector.riotx.core.platform.VectorBaseActivity
import im.vector.riotx.core.platform.VectorBaseFragment
-import im.vector.riotx.core.utils.openUrlInExternalBrowser
+import im.vector.riotx.core.utils.openUrlInChromeCustomTab
import kotlinx.android.synthetic.main.fragment_review_terms.*
import javax.inject.Inject
@@ -106,6 +106,6 @@ class ReviewTermsFragment @Inject constructor(
}
override fun review(term: Term) {
- openUrlInExternalBrowser(requireContext(), term.url)
+ openUrlInChromeCustomTab(requireContext(), null, term.url)
}
}
diff --git a/vector/src/main/res/drawable/bg_login_server.xml b/vector/src/main/res/drawable/bg_login_server.xml
index 5aecd26292..a2ca14f02e 100644
--- a/vector/src/main/res/drawable/bg_login_server.xml
+++ b/vector/src/main/res/drawable/bg_login_server.xml
@@ -7,6 +7,6 @@
android:width="1.2dp"
android:color="#E7E7E7" />
-
+
\ No newline at end of file
diff --git a/vector/src/main/res/drawable/bg_login_server_checked.xml b/vector/src/main/res/drawable/bg_login_server_checked.xml
index 1aea622462..f120e62884 100644
--- a/vector/src/main/res/drawable/bg_login_server_checked.xml
+++ b/vector/src/main/res/drawable/bg_login_server_checked.xml
@@ -7,6 +7,6 @@
android:width="1.2dp"
android:color="@color/riotx_accent" />
-
+
\ No newline at end of file
diff --git a/vector/src/main/res/drawable/ic_airplane_16dp.xml b/vector/src/main/res/drawable/ic_airplane_16dp.xml
new file mode 100644
index 0000000000..fa2387ebf0
--- /dev/null
+++ b/vector/src/main/res/drawable/ic_airplane_16dp.xml
@@ -0,0 +1,13 @@
+
+
+
diff --git a/vector/src/main/res/layout/fragment_login.xml b/vector/src/main/res/layout/fragment_login.xml
index 894a7598c8..a35a60104d 100644
--- a/vector/src/main/res/layout/fragment_login.xml
+++ b/vector/src/main/res/layout/fragment_login.xml
@@ -25,6 +25,7 @@
android:id="@+id/loginServerIcon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:tint="?riotx_text_primary"
tools:src="@drawable/ic_logo_matrix_org" />
+ android:src="@drawable/ic_logo_modular"
+ android:tint="?riotx_text_primary" />
-
+ tools:visibility="visible">
+
+
+
+
\ No newline at end of file
diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml
index 8b5f996f37..a4afce0ac5 100644
--- a/vector/src/main/res/values/strings.xml
+++ b/vector/src/main/res/values/strings.xml
@@ -862,6 +862,9 @@
Allow integrations
Integration Manager
+ Integrations are disabled
+ "Enable 'Allow integrations' in Settings to do this."
+
User interface
Language
Choose language
@@ -1162,8 +1165,6 @@
Read DRM protected Media
- Integrations are disabled
- Enable integrations in settings to allow this action.
Unable to create widget.
Failed to send request.
diff --git a/vector/src/main/res/xml/vector_settings_general.xml b/vector/src/main/res/xml/vector_settings_general.xml
index 846380465e..7248280e37 100644
--- a/vector/src/main/res/xml/vector_settings_general.xml
+++ b/vector/src/main/res/xml/vector_settings_general.xml
@@ -68,6 +68,26 @@
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-