From a69049645aec95c41c0ab1cf8ac2840e89dd9604 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 26 Feb 2020 11:11:10 +0100 Subject: [PATCH 01/16] FTUE: do not display a different color when encrypting message when not in developer mode. --- CHANGES.md | 1 + .../detail/timeline/MessageColorProvider.kt | 58 +++++++++++++++++++ .../timeline/factory/MessageItemFactory.kt | 2 +- .../factory/VerificationItemFactory.kt | 8 +-- .../helper/ContentUploadStateTrackerBinder.kt | 17 +++--- .../helper/MessageItemAttributesFactory.kt | 6 +- .../timeline/item/AbsBaseMessageItem.kt | 7 +-- .../detail/timeline/item/AbsMessageItem.kt | 4 +- .../item/VerificationRequestConclusionItem.kt | 4 +- .../timeline/item/VerificationRequestItem.kt | 4 +- .../riotx/features/ui/ColorProviderExt.kt | 37 ------------ 11 files changed, 84 insertions(+), 64 deletions(-) create mode 100644 vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/MessageColorProvider.kt delete mode 100644 vector/src/main/java/im/vector/riotx/features/ui/ColorProviderExt.kt diff --git a/CHANGES.md b/CHANGES.md index 37b6c63393..abf318ef50 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -11,6 +11,7 @@ Features ✨: Improvements 🙌: - Migrate to binary QR code verification (#994) - Share action is added to room profile and room member profile (#858) + - FTUE: do not display a different color when encrypting message when not in developer mode. Bugfix 🐛: - Account creation: wrongly hints that an email can be used to create an account (#941) diff --git a/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/MessageColorProvider.kt b/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/MessageColorProvider.kt new file mode 100644 index 0000000000..c6ab5b024f --- /dev/null +++ b/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/MessageColorProvider.kt @@ -0,0 +1,58 @@ +/* + * Copyright 2019 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package im.vector.riotx.features.home.room.detail.timeline + +import androidx.annotation.ColorInt +import im.vector.matrix.android.api.session.room.send.SendState +import im.vector.riotx.R +import im.vector.riotx.core.resources.ColorProvider +import im.vector.riotx.features.settings.VectorPreferences +import javax.inject.Inject + +class MessageColorProvider @Inject constructor( + private val colorProvider: ColorProvider, + private val vectorPreferences: VectorPreferences) { + + @ColorInt + fun getMessageTextColor(sendState: SendState): Int { + return if (vectorPreferences.developerMode()) { + when (sendState) { + // SendStates, in the classical order they will occur + SendState.UNKNOWN, + SendState.UNSENT -> colorProvider.getColorFromAttribute(R.attr.vctr_sending_message_text_color) + SendState.ENCRYPTING -> colorProvider.getColorFromAttribute(R.attr.vctr_encrypting_message_text_color) + SendState.SENDING -> colorProvider.getColorFromAttribute(R.attr.vctr_sending_message_text_color) + SendState.SENT, + SendState.SYNCED -> colorProvider.getColorFromAttribute(R.attr.vctr_message_text_color) + SendState.UNDELIVERED, + SendState.FAILED_UNKNOWN_DEVICES -> colorProvider.getColorFromAttribute(R.attr.vctr_unsent_message_text_color) + } + } else { + // When not in developer mode, we do not use special color for the encrypting state + when (sendState) { + SendState.UNKNOWN, + SendState.UNSENT, + SendState.ENCRYPTING, + SendState.SENDING -> colorProvider.getColorFromAttribute(R.attr.vctr_sending_message_text_color) + SendState.SENT, + SendState.SYNCED -> colorProvider.getColorFromAttribute(R.attr.vctr_message_text_color) + SendState.UNDELIVERED, + SendState.FAILED_UNKNOWN_DEVICES -> colorProvider.getColorFromAttribute(R.attr.vctr_unsent_message_text_color) + } + } + } +} diff --git a/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/factory/MessageItemFactory.kt b/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/factory/MessageItemFactory.kt index 83f0c63147..2b221b9fef 100644 --- a/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/factory/MessageItemFactory.kt +++ b/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/factory/MessageItemFactory.kt @@ -222,7 +222,7 @@ class MessageItemFactory @Inject constructor( referenceId = informationData.eventId, informationData = informationData, avatarRenderer = attributes.avatarRenderer, - colorProvider = attributes.colorProvider, + messageColorProvider = attributes.messageColorProvider, itemLongClickListener = attributes.itemLongClickListener, itemClickListener = attributes.itemClickListener, reactionPillCallback = attributes.reactionPillCallback, diff --git a/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/factory/VerificationItemFactory.kt b/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/factory/VerificationItemFactory.kt index dc5bd740dd..12bc10ebdb 100644 --- a/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/factory/VerificationItemFactory.kt +++ b/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/factory/VerificationItemFactory.kt @@ -27,8 +27,8 @@ import im.vector.matrix.android.api.session.room.model.message.MessageVerificati import im.vector.matrix.android.api.session.room.timeline.TimelineEvent import im.vector.matrix.android.internal.session.room.VerificationState import im.vector.riotx.core.epoxy.VectorEpoxyModel -import im.vector.riotx.core.resources.ColorProvider import im.vector.riotx.core.resources.UserPreferencesProvider +import im.vector.riotx.features.home.room.detail.timeline.MessageColorProvider import im.vector.riotx.features.home.room.detail.timeline.TimelineEventController import im.vector.riotx.features.home.room.detail.timeline.helper.AvatarSizeProvider import im.vector.riotx.features.home.room.detail.timeline.helper.MessageInformationDataFactory @@ -43,7 +43,7 @@ import javax.inject.Inject * several checks are made to see if this conclusion is attached to a known request */ class VerificationItemFactory @Inject constructor( - private val colorProvider: ColorProvider, + private val messageColorProvider: MessageColorProvider, private val messageInformationDataFactory: MessageInformationDataFactory, private val messageItemAttributesFactory: MessageItemAttributesFactory, private val avatarSizeProvider: AvatarSizeProvider, @@ -97,7 +97,7 @@ class VerificationItemFactory @Inject constructor( isPositive = false, informationData = informationData, avatarRenderer = attributes.avatarRenderer, - colorProvider = colorProvider, + messageColorProvider = messageColorProvider, emojiTypeFace = attributes.emojiTypeFace, itemClickListener = attributes.itemClickListener, itemLongClickListener = attributes.itemLongClickListener, @@ -130,7 +130,7 @@ class VerificationItemFactory @Inject constructor( isPositive = true, informationData = informationData, avatarRenderer = attributes.avatarRenderer, - colorProvider = colorProvider, + messageColorProvider = messageColorProvider, emojiTypeFace = attributes.emojiTypeFace, itemClickListener = attributes.itemClickListener, itemLongClickListener = attributes.itemLongClickListener, diff --git a/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/helper/ContentUploadStateTrackerBinder.kt b/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/helper/ContentUploadStateTrackerBinder.kt index d80c625e8f..4cf14fa83b 100644 --- a/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/helper/ContentUploadStateTrackerBinder.kt +++ b/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/helper/ContentUploadStateTrackerBinder.kt @@ -27,14 +27,13 @@ import im.vector.riotx.R import im.vector.riotx.core.di.ActiveSessionHolder import im.vector.riotx.core.di.ScreenScope import im.vector.riotx.core.error.ErrorFormatter -import im.vector.riotx.core.resources.ColorProvider import im.vector.riotx.core.utils.TextUtils -import im.vector.riotx.features.ui.getMessageTextColor +import im.vector.riotx.features.home.room.detail.timeline.MessageColorProvider import javax.inject.Inject @ScreenScope class ContentUploadStateTrackerBinder @Inject constructor(private val activeSessionHolder: ActiveSessionHolder, - private val colorProvider: ColorProvider, + private val messageColorProvider: MessageColorProvider, private val errorFormatter: ErrorFormatter) { private val updateListeners = mutableMapOf() @@ -44,7 +43,7 @@ class ContentUploadStateTrackerBinder @Inject constructor(private val activeSess progressLayout: ViewGroup) { activeSessionHolder.getSafeActiveSession()?.also { session -> val uploadStateTracker = session.contentUploadProgressTracker() - val updateListener = ContentMediaProgressUpdater(progressLayout, isLocalFile, colorProvider, errorFormatter) + val updateListener = ContentMediaProgressUpdater(progressLayout, isLocalFile, messageColorProvider, errorFormatter) updateListeners[eventId] = updateListener uploadStateTracker.track(eventId, updateListener) } @@ -68,7 +67,7 @@ class ContentUploadStateTrackerBinder @Inject constructor(private val activeSess private class ContentMediaProgressUpdater(private val progressLayout: ViewGroup, private val isLocalFile: Boolean, - private val colorProvider: ColorProvider, + private val messageColorProvider: MessageColorProvider, private val errorFormatter: ErrorFormatter) : ContentUploadStateTracker.UpdateListener { override fun onUpdate(state: ContentUploadStateTracker.State) { @@ -92,7 +91,7 @@ private class ContentMediaProgressUpdater(private val progressLayout: ViewGroup, progressBar?.isIndeterminate = true progressBar?.progress = 0 progressTextView?.text = progressLayout.context.getString(R.string.send_file_step_idle) - progressTextView?.setTextColor(colorProvider.getMessageTextColor(SendState.UNSENT)) + progressTextView?.setTextColor(messageColorProvider.getMessageTextColor(SendState.UNSENT)) } else { progressLayout.isVisible = false } @@ -120,7 +119,7 @@ private class ContentMediaProgressUpdater(private val progressLayout: ViewGroup, val progressTextView = progressLayout.findViewById(R.id.mediaProgressTextView) progressBar?.isIndeterminate = true progressTextView?.text = progressLayout.context.getString(resId) - progressTextView?.setTextColor(colorProvider.getMessageTextColor(SendState.ENCRYPTING)) + progressTextView?.setTextColor(messageColorProvider.getMessageTextColor(SendState.ENCRYPTING)) } private fun doHandleProgress(resId: Int, current: Long, total: Long) { @@ -134,7 +133,7 @@ private class ContentMediaProgressUpdater(private val progressLayout: ViewGroup, progressTextView?.text = progressLayout.context.getString(resId, TextUtils.formatFileSize(progressLayout.context, current, true), TextUtils.formatFileSize(progressLayout.context, total, true)) - progressTextView?.setTextColor(colorProvider.getMessageTextColor(SendState.SENDING)) + progressTextView?.setTextColor(messageColorProvider.getMessageTextColor(SendState.SENDING)) } private fun handleFailure(state: ContentUploadStateTracker.State.Failure) { @@ -143,7 +142,7 @@ private class ContentMediaProgressUpdater(private val progressLayout: ViewGroup, val progressTextView = progressLayout.findViewById(R.id.mediaProgressTextView) progressBar?.isVisible = false progressTextView?.text = errorFormatter.toHumanReadable(state.throwable) - progressTextView?.setTextColor(colorProvider.getMessageTextColor(SendState.UNDELIVERED)) + progressTextView?.setTextColor(messageColorProvider.getMessageTextColor(SendState.UNDELIVERED)) } private fun handleSuccess() { diff --git a/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/helper/MessageItemAttributesFactory.kt b/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/helper/MessageItemAttributesFactory.kt index 0e1229eeca..7433b03408 100644 --- a/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/helper/MessageItemAttributesFactory.kt +++ b/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/helper/MessageItemAttributesFactory.kt @@ -20,9 +20,9 @@ package im.vector.riotx.features.home.room.detail.timeline.helper import android.view.View import im.vector.matrix.android.api.session.room.model.message.MessageContent import im.vector.riotx.EmojiCompatFontProvider -import im.vector.riotx.core.resources.ColorProvider import im.vector.riotx.core.utils.DebouncedClickListener import im.vector.riotx.features.home.AvatarRenderer +import im.vector.riotx.features.home.room.detail.timeline.MessageColorProvider import im.vector.riotx.features.home.room.detail.timeline.TimelineEventController import im.vector.riotx.features.home.room.detail.timeline.item.AbsMessageItem import im.vector.riotx.features.home.room.detail.timeline.item.MessageInformationData @@ -30,7 +30,7 @@ import javax.inject.Inject class MessageItemAttributesFactory @Inject constructor( private val avatarRenderer: AvatarRenderer, - private val colorProvider: ColorProvider, + private val messageColorProvider: MessageColorProvider, private val avatarSizeProvider: AvatarSizeProvider, private val emojiCompatFontProvider: EmojiCompatFontProvider) { @@ -41,7 +41,7 @@ class MessageItemAttributesFactory @Inject constructor( avatarSize = avatarSizeProvider.avatarSize, informationData = informationData, avatarRenderer = avatarRenderer, - colorProvider = colorProvider, + messageColorProvider = messageColorProvider, itemLongClickListener = View.OnLongClickListener { view -> callback?.onEventLongClicked(informationData, messageContent, view) ?: false }, diff --git a/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/item/AbsBaseMessageItem.kt b/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/item/AbsBaseMessageItem.kt index 6d99bb2650..149b5e74ad 100644 --- a/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/item/AbsBaseMessageItem.kt +++ b/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/item/AbsBaseMessageItem.kt @@ -24,12 +24,11 @@ import androidx.annotation.IdRes import androidx.core.view.isVisible import im.vector.matrix.android.api.session.room.send.SendState import im.vector.riotx.R -import im.vector.riotx.core.resources.ColorProvider import im.vector.riotx.core.utils.DebouncedClickListener import im.vector.riotx.features.home.AvatarRenderer +import im.vector.riotx.features.home.room.detail.timeline.MessageColorProvider import im.vector.riotx.features.home.room.detail.timeline.TimelineEventController import im.vector.riotx.features.reactions.widget.ReactionButton -import im.vector.riotx.features.ui.getMessageTextColor /** * Base timeline item with reactions and read receipts. @@ -105,7 +104,7 @@ abstract class AbsBaseMessageItem : BaseEventItem protected open fun renderSendState(root: View, textView: TextView?, failureIndicator: ImageView? = null) { root.isClickable = baseAttributes.informationData.sendState.isSent() val state = if (baseAttributes.informationData.hasPendingEdits) SendState.UNSENT else baseAttributes.informationData.sendState - textView?.setTextColor(baseAttributes.colorProvider.getMessageTextColor(state)) + textView?.setTextColor(baseAttributes.messageColorProvider.getMessageTextColor(state)) failureIndicator?.isVisible = baseAttributes.informationData.sendState.hasFailed() } @@ -120,7 +119,7 @@ abstract class AbsBaseMessageItem : BaseEventItem // val avatarSize: Int, val informationData: MessageInformationData val avatarRenderer: AvatarRenderer - val colorProvider: ColorProvider + val messageColorProvider: MessageColorProvider val itemLongClickListener: View.OnLongClickListener? val itemClickListener: View.OnClickListener? // val memberClickListener: View.OnClickListener? diff --git a/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/item/AbsMessageItem.kt b/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/item/AbsMessageItem.kt index ae69164951..2b01e915df 100644 --- a/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/item/AbsMessageItem.kt +++ b/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/item/AbsMessageItem.kt @@ -23,9 +23,9 @@ import android.widget.TextView import androidx.annotation.IdRes import com.airbnb.epoxy.EpoxyAttribute import im.vector.riotx.R -import im.vector.riotx.core.resources.ColorProvider import im.vector.riotx.core.utils.DebouncedClickListener import im.vector.riotx.features.home.AvatarRenderer +import im.vector.riotx.features.home.room.detail.timeline.MessageColorProvider import im.vector.riotx.features.home.room.detail.timeline.TimelineEventController /** @@ -88,7 +88,7 @@ abstract class AbsMessageItem : AbsBaseMessageItem val avatarSize: Int, override val informationData: MessageInformationData, override val avatarRenderer: AvatarRenderer, - override val colorProvider: ColorProvider, + override val messageColorProvider: MessageColorProvider, override val itemLongClickListener: View.OnLongClickListener? = null, override val itemClickListener: View.OnClickListener? = null, val memberClickListener: View.OnClickListener? = null, diff --git a/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/item/VerificationRequestConclusionItem.kt b/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/item/VerificationRequestConclusionItem.kt index 036bf2b036..2b28e15cab 100644 --- a/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/item/VerificationRequestConclusionItem.kt +++ b/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/item/VerificationRequestConclusionItem.kt @@ -26,8 +26,8 @@ import androidx.core.view.updateLayoutParams import com.airbnb.epoxy.EpoxyAttribute import com.airbnb.epoxy.EpoxyModelClass import im.vector.riotx.R -import im.vector.riotx.core.resources.ColorProvider import im.vector.riotx.features.home.AvatarRenderer +import im.vector.riotx.features.home.room.detail.timeline.MessageColorProvider import im.vector.riotx.features.home.room.detail.timeline.TimelineEventController @EpoxyModelClass(layout = R.layout.item_timeline_event_base_state) @@ -80,7 +80,7 @@ abstract class VerificationRequestConclusionItem : AbsBaseMessageItem getColorFromAttribute(R.attr.vctr_sending_message_text_color) - SendState.ENCRYPTING -> getColorFromAttribute(R.attr.vctr_encrypting_message_text_color) - SendState.SENDING -> getColorFromAttribute(R.attr.vctr_sending_message_text_color) - SendState.SENT, - SendState.SYNCED -> getColorFromAttribute(R.attr.vctr_message_text_color) - SendState.UNDELIVERED, - SendState.FAILED_UNKNOWN_DEVICES -> getColorFromAttribute(R.attr.vctr_unsent_message_text_color) - } -} From bc9493d5b947bed8694c785843f9dd0c929e1f36 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 27 Feb 2020 12:47:11 +0100 Subject: [PATCH 02/16] Upgrade ktlint to version 0.36.0 --- .buildkite/pipeline.yml | 2 +- CHANGES.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index a410ea0af9..31d2d1f457 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -81,7 +81,7 @@ steps: - label: "ktlint" command: - - "curl -sSLO https://github.com/pinterest/ktlint/releases/download/0.34.2/ktlint && chmod a+x ktlint" + - "curl -sSLO https://github.com/pinterest/ktlint/releases/download/0.36.0/ktlint && chmod a+x ktlint" - "./ktlint --android --experimental -v" plugins: - docker#v3.1.0: diff --git a/CHANGES.md b/CHANGES.md index 65f6e96f69..ea6aee07c4 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -17,7 +17,7 @@ SDK API changes ⚠️: - Build 🧱: - - + - Upgrade ktlint to version 0.36.0 Other changes: - From a1466e299bd994d33ca6e59eb33ee999cae9d7bf Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 27 Feb 2020 14:30:49 +0100 Subject: [PATCH 03/16] Fix missing recycle call and ensure this mistake will not happen again --- vector/lint.xml | 1 + .../vector/riotx/core/platform/BadgeFloatingActionButton.kt | 2 +- .../home/room/detail/timeline/item/PollResultLineView.kt | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/vector/lint.xml b/vector/lint.xml index 6a9b0634a7..c39f1dcd8d 100644 --- a/vector/lint.xml +++ b/vector/lint.xml @@ -30,6 +30,7 @@ + diff --git a/vector/src/main/java/im/vector/riotx/core/platform/BadgeFloatingActionButton.kt b/vector/src/main/java/im/vector/riotx/core/platform/BadgeFloatingActionButton.kt index ebf04e7097..49931e2b54 100644 --- a/vector/src/main/java/im/vector/riotx/core/platform/BadgeFloatingActionButton.kt +++ b/vector/src/main/java/im/vector/riotx/core/platform/BadgeFloatingActionButton.kt @@ -129,7 +129,7 @@ class BadgeFloatingActionButton @JvmOverloads constructor( attrs?.let { initAttrs(attrs) } } - @SuppressWarnings("ResourceType", "Recycle") + @SuppressWarnings("Recycle") private fun initAttrs(attrs: AttributeSet) { context.obtainStyledAttributes(attrs, R.styleable.BadgeFloatingActionButton).use { counterBackgroundColor = it.getColor(R.styleable.BadgeFloatingActionButton_badgeBackgroundColor, 0) diff --git a/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/item/PollResultLineView.kt b/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/item/PollResultLineView.kt index f1e1753b17..a0ad3466f7 100644 --- a/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/item/PollResultLineView.kt +++ b/vector/src/main/java/im/vector/riotx/features/home/room/detail/timeline/item/PollResultLineView.kt @@ -73,11 +73,11 @@ class PollResultLineView @JvmOverloads constructor( orientation = HORIZONTAL ButterKnife.bind(this) - val typedArray = context.obtainStyledAttributes(attrs, - R.styleable.PollResultLineView, 0, 0) + val typedArray = context.obtainStyledAttributes(attrs, R.styleable.PollResultLineView, 0, 0) label = typedArray.getString(R.styleable.PollResultLineView_optionName) ?: "" percent = typedArray.getString(R.styleable.PollResultLineView_optionCount) ?: "" optionSelected = typedArray.getBoolean(R.styleable.PollResultLineView_optionSelected, false) isWinner = typedArray.getBoolean(R.styleable.PollResultLineView_optionIsWinner, false) + typedArray.recycle() } } From c0d6b9d13034d13745e7b684c929c4120657c26c Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 27 Feb 2020 14:35:57 +0100 Subject: [PATCH 04/16] Lint fix IconXmlAndPng error --- vector/lint.xml | 1 + .../res/drawable-xxhdpi/ic_material_share.png | Bin 1052 -> 0 bytes 2 files changed, 1 insertion(+) delete mode 100755 vector/src/main/res/drawable-xxhdpi/ic_material_share.png diff --git a/vector/lint.xml b/vector/lint.xml index c39f1dcd8d..21ff01a99b 100644 --- a/vector/lint.xml +++ b/vector/lint.xml @@ -6,6 +6,7 @@ + diff --git a/vector/src/main/res/drawable-xxhdpi/ic_material_share.png b/vector/src/main/res/drawable-xxhdpi/ic_material_share.png deleted file mode 100755 index 0fe15fc056771d76cc8b830697d18ab4f6ce804e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1052 zcmV+%1mpXOP)004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00002VoOIv0RM-N%)bBt010qN zS#tmY3ljhU3ljkVnw%H_00WdsL_t(|+U=W5NK{c6$A1|Tgykd1%rsy0phcV9)G8^G z7Ue=}Q7VB(i$b!(RDyKVLqcrRCKIF7P{cALQv_#`n_2~xmV}{JhL)-MYUZ{`%g3BM zbB5@CH}3yi&RzU}!#V$RzHjb;BS(%LIr@(jM36m=Z>AU*Ll_tg;o>5j>|;KOMm!jc z%0mMQcCdep?@P?j)i{~b?H4G`&sDx;`&mBi8yFmsYCnN-zW~PAC=;OGFZ%`twKBhd zkKX`p;^YAo`EB38;JiG5HZ6b_c>n`i0DbZRrnLa38t$RJOS`7p|v(X>B9w3L49IG;7m8yHl|u)mAv0hl-V!aD2CM^hb;c>@n=R-0cz z5n~E_AAMZu+?=r5ei}Ura}yM^k~D^u_J=uWt@*7yQJSm&-KIoQ;U$-*xk;pz=0hn{ z#^nokFM2wPTprNFC?mX~kyF-g+#s?UR4$8?ESEiL*vT{Hmb}3l+2+@CN4e@d*e=21 zGLyJ0U{raVJZ!D)L@vwYLIrDOAmsW$@F>USU&$j_ z0zx_?rnAcsE;FV0{1vGZ5Td#5C6Q*hMbzvQNi-=Tn@ExYk;g;cG0p_NG;?~%k3Olq zR$eo%$ck5$f;ppHZUbb>iB~g4QlZ@Tog`xmCDWy3=y)qPA%1xlS8}=2(x%?p7(0&K020s?vinan8)i?RuM*>60(5^>GAqOIh6lZ z-Ned|SM%y3Tz)?8o6y}1l>OEza&(0 z=NwCy5BnRWH~--#EoF`DZ~u?>(!Qu)^Ux-D>v~rVS(H*m6{Td#%za0W9653%Pd@>k W_~uS4Xs)3E0000 Date: Thu, 27 Feb 2020 14:43:07 +0100 Subject: [PATCH 05/16] Lint: fix IconDipSize and IconDuplicatesConfig error (by removing unused resource) --- vector/lint.xml | 2 ++ .../res/drawable-mdpi/ic_material_camera.png | Bin 539 -> 0 bytes .../res/drawable-mdpi/ic_material_file.png | Bin 545 -> 0 bytes .../drawable-mdpi/ic_material_videocam.png | Bin 3120 -> 0 bytes .../res/drawable-mdpi/ic_send_sticker.png | Bin 7243 -> 0 bytes .../vector_cancel_upload_download.png | Bin 309 -> 0 bytes .../res/drawable-mdpi/vector_micro_green.png | Bin 399 -> 0 bytes .../res/drawable-mdpi/video_call_black.png | Bin 224 -> 0 bytes .../res/drawable-mdpi/video_call_green.png | Bin 298 -> 0 bytes .../res/drawable-mdpi/voice_call_black.png | Bin 574 -> 0 bytes .../drawable-mdpi/voice_call_end_fushia.png | Bin 331 -> 0 bytes .../res/drawable-mdpi/voice_call_green.png | Bin 432 -> 0 bytes .../drawable-mdpi/voice_call_start_green.png | Bin 684 -> 0 bytes .../res/drawable-xhdpi/ic_send_sticker.png | Bin 4586 -> 0 bytes .../drawable-xxhdpi/ic_material_camera.png | Bin 539 -> 0 bytes .../res/drawable-xxhdpi/ic_material_file.png | Bin 545 -> 0 bytes .../drawable-xxhdpi/ic_material_videocam.png | Bin 3120 -> 0 bytes .../res/drawable-xxhdpi/ic_send_sticker.png | Bin 7243 -> 0 bytes .../vector_cancel_upload_download.png | Bin 309 -> 0 bytes .../drawable-xxhdpi/vector_micro_green.png | Bin 399 -> 0 bytes .../res/drawable-xxhdpi/video_call_black.png | Bin 224 -> 0 bytes .../res/drawable-xxhdpi/video_call_green.png | Bin 298 -> 0 bytes .../res/drawable-xxhdpi/voice_call_black.png | Bin 574 -> 0 bytes .../drawable-xxhdpi/voice_call_end_fushia.png | Bin 331 -> 0 bytes .../res/drawable-xxhdpi/voice_call_green.png | Bin 432 -> 0 bytes .../voice_call_start_green.png | Bin 684 -> 0 bytes vector/src/main/res/menu/vector_searches.xml | 18 ------------------ 27 files changed, 2 insertions(+), 18 deletions(-) delete mode 100755 vector/src/main/res/drawable-mdpi/ic_material_camera.png delete mode 100755 vector/src/main/res/drawable-mdpi/ic_material_file.png delete mode 100755 vector/src/main/res/drawable-mdpi/ic_material_videocam.png delete mode 100644 vector/src/main/res/drawable-mdpi/ic_send_sticker.png delete mode 100755 vector/src/main/res/drawable-mdpi/vector_cancel_upload_download.png delete mode 100755 vector/src/main/res/drawable-mdpi/vector_micro_green.png delete mode 100755 vector/src/main/res/drawable-mdpi/video_call_black.png delete mode 100755 vector/src/main/res/drawable-mdpi/video_call_green.png delete mode 100755 vector/src/main/res/drawable-mdpi/voice_call_black.png delete mode 100755 vector/src/main/res/drawable-mdpi/voice_call_end_fushia.png delete mode 100755 vector/src/main/res/drawable-mdpi/voice_call_green.png delete mode 100755 vector/src/main/res/drawable-mdpi/voice_call_start_green.png delete mode 100644 vector/src/main/res/drawable-xhdpi/ic_send_sticker.png delete mode 100755 vector/src/main/res/drawable-xxhdpi/ic_material_camera.png delete mode 100755 vector/src/main/res/drawable-xxhdpi/ic_material_file.png delete mode 100755 vector/src/main/res/drawable-xxhdpi/ic_material_videocam.png delete mode 100644 vector/src/main/res/drawable-xxhdpi/ic_send_sticker.png delete mode 100755 vector/src/main/res/drawable-xxhdpi/vector_cancel_upload_download.png delete mode 100755 vector/src/main/res/drawable-xxhdpi/vector_micro_green.png delete mode 100755 vector/src/main/res/drawable-xxhdpi/video_call_black.png delete mode 100755 vector/src/main/res/drawable-xxhdpi/video_call_green.png delete mode 100755 vector/src/main/res/drawable-xxhdpi/voice_call_black.png delete mode 100755 vector/src/main/res/drawable-xxhdpi/voice_call_end_fushia.png delete mode 100755 vector/src/main/res/drawable-xxhdpi/voice_call_green.png delete mode 100755 vector/src/main/res/drawable-xxhdpi/voice_call_start_green.png delete mode 100755 vector/src/main/res/menu/vector_searches.xml diff --git a/vector/lint.xml b/vector/lint.xml index 21ff01a99b..6d4c4125ef 100644 --- a/vector/lint.xml +++ b/vector/lint.xml @@ -7,6 +7,8 @@ + + diff --git a/vector/src/main/res/drawable-mdpi/ic_material_camera.png b/vector/src/main/res/drawable-mdpi/ic_material_camera.png deleted file mode 100755 index 78e5bb23ffb7086c06c271d3775167fbb46799af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 539 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGoY)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPNlMoLt&wHnBAq)(RD?D8sLn>~)opV<5kb(efteupX zwWf;ek_lTTPkMB+oBb^R2L7^Vc}@9cflWWE7=eZ`IGFfk8l2uItNU)V-)6-Fnl+}J zVum%UoMNUmqMTxuHLRRswl(>jZa?-3^?ayRy^+EAP3;25z3>*ned}9Xd>(NduG*g` zeu43v0s|ul1B(KKKm$X8LjRUE?+Y1cx^w^gUHVGtQ^vvXYD)c5HTp_HEgz!qFZO2C zZ4R6?p_=Ren=ggWs$QGSK2-8#pL~JZn%&7OD&GbrPl)T#{at3mxuSh*!|I0ktASd3 z>V@{&^H0ip>Ru@_QDpW0ts&?2JSMJ+-?%xbXGoCD4FiUjR4*>(su$bNjQE&ErRJ^13X}?rO)&E=9>#OR2@>Lkg zYM%R9BwL`mVv_xtpvrtB_N`ORUOM|Z>hABnfVmx6`ZP3E{1xSaH4 zY5&4De|M!wBZC726Epzc9kPEO)>3~?b}93VCabIUo(xK-*!V$V4F!c2%um^0rEq0C Q%7R2ZUHx3vIVCg!0B-!qZvX%Q diff --git a/vector/src/main/res/drawable-mdpi/ic_material_file.png b/vector/src/main/res/drawable-mdpi/ic_material_file.png deleted file mode 100755 index 64561dd4a46c142420570672762bddfe6787f914..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 545 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 B>+Jvl diff --git a/vector/src/main/res/drawable-mdpi/ic_send_sticker.png b/vector/src/main/res/drawable-mdpi/ic_send_sticker.png deleted file mode 100644 index a369cbee494db6f376916acfa2e9a41125454a71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7243 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 Z{~v}UpUcfOD|G+>002ovPDHLkV1hrJ(nJ6N diff --git a/vector/src/main/res/drawable-mdpi/vector_cancel_upload_download.png b/vector/src/main/res/drawable-mdpi/vector_cancel_upload_download.png deleted file mode 100755 index 51b4401ca053ca8cad6e9903646709a2f44444df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 309 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY0wn)GsXhaw{&>1LhEy=VysgJ$~x+g}6OvsxLimbaeN-!xQItoH=3nd`|H@dF!kYp_dChV`b9AudQLRn7yg2 zv~UiON9*MGOYAy6D=_*g@;c3(5`S(Hi^X;wk8Ms*3SMP^!WTf z-E_DAd$kLMWY`Z`);MuKF9=d$?_mzLoFj7Xp~|_3ODg!(3;AT&wLoS^O+0tsvcZJ& zD(m_$dNm(!9@n+CTyDa$w$*a^-$!>qK3P{4end8+qbAwoFEAV!JYD@<);T3K0RXh> Be)#|Z diff --git a/vector/src/main/res/drawable-mdpi/vector_micro_green.png b/vector/src/main/res/drawable-mdpi/vector_micro_green.png deleted file mode 100755 index 15114b7e71ac34437adbe2a98e55aff5231a17a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 399 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPN6Azb)h28H)5e5cE8BZ6-kcwMxZ(kHWq#)pOF{h9B zW?ySWOY4n3)l62;kQtHF_WU$snr_ZiHcVT5@5pZA-Y+zvGP=F8$3=r0W$l}bM6|Y+qUyFoX zl-B|ZK4W}Um_O@Lj@@IPxU0`z%{x1dt6;nO-_EyZGu}69X`5YHTH7+QcCU;_psw;( z-T0$Zp1zOZIdt=8+|?&J+INg^-75UP`tZciZ~OV2zV0nsQ2&lMx>@RBY}QS#$91#9 z)=taxE?||hoWSh)cTVbU$?t7NZ(se?K9u3`Zf{8C0^21yGNFVdQ&MBb@0KGVuZ2$lO diff --git a/vector/src/main/res/drawable-mdpi/video_call_black.png b/vector/src/main/res/drawable-mdpi/video_call_black.png deleted file mode 100755 index 0039e804eb1684ea4ebc31799709a087f572e5f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 224 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY0wn)GsXhawmV3H5hEy=Vy|MA+VFv-1hn?^8 z4~ug1g)FcZ2tQ~w=Lplx+X;0Q`O-fM6yDE!@w@{FUidGcwkmVlvbJqjp=XW1?wu~T z^_Jsx-sfxGL;v3?&|*&U<2W%#V1lKfLa~y=Gna-loeVRD8I9DLAQAzLOe`D%^2a{x z=bL%t*T#(tHXb^qa&Ey|=ZV3$mi+%IV|?53_`T+<7p`3W@mfYIs|#!;^C!uxN8C@h R>H?k2;OXk;vd$@?2>^U;U)TTu diff --git a/vector/src/main/res/drawable-mdpi/video_call_green.png b/vector/src/main/res/drawable-mdpi/video_call_green.png deleted file mode 100755 index 028ec1e3e302dde605f2d1a8862de2217926fd24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 298 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPt2L~Uwq9gZHGoa9RPZ!6Kid%1QUgT{u5NQkCA-%J& z*`lR+N1yUbuGYAuH}&U?4IeV!y1gS8sG5Oc@wbWHa__G{m(P1vx%>Uy{gEs4kG*i# zFJze&rROEnxXf&pkh;xS->P)!2PJ-H@rHV$L$%!{Psm^&nbmf4NDs!00GCXBW5P9(i&9mcltT_n9>4aSD3%Ow3uICgQ2 zjr=FWc(D&`CQobQ>*Xz@9Ht9Lp&X-lu|@Xg_43>xNU@I>XQUCw| diff --git a/vector/src/main/res/drawable-mdpi/voice_call_end_fushia.png b/vector/src/main/res/drawable-mdpi/voice_call_end_fushia.png deleted file mode 100755 index 814aa0017ec07a455055bb0eb22c95204a72cbb7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 331 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPN2Pd15<(4UiKoN!;o-U3d6}R5rI4#(0z~kW9z3|Eu z*Y!_kIk(kp=;Hls6HD+YPol zAC+BvrAO4b#Zp)+t^0HKk_^dZ*Z9*<8@oPpjM}q2Wq$G8hlRh)KI{%S{ie|F?7og- znM~1VKPE;WvEkyHSs5(cxv~HO3k;4oxOt7FTe3vU+l70 z`ip>ia-T)@$9spa%u_uVv*WvkY1+@<%{Mg)&z<{pUH$sSM|TRvzz$_t@se|+bC%Ul RZ`TlzfTydU%Q~loCIBCygU0{> diff --git a/vector/src/main/res/drawable-mdpi/voice_call_green.png b/vector/src/main/res/drawable-mdpi/voice_call_green.png deleted file mode 100755 index 7afa5cd1188503686266a4b66f6d4e10cd070e9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 432 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPt2L~Sy-_qHBD;O9UZ9QEaLn>~)opqb{kO7aYr+Jbr zTOtQrqO4m}eM`&b8y{ca$yc#ne!YK7j2?$#i+~fy-wPA|y!cnOFTBZS-S&y17d9%N z(0cHx!HC;|fk~i&fn~v-#d7S791aXw%o@py#TZZ3NH0IaaD^k_SkPRrilryh-X^o3 zD`cBe%jBnSADkw7t(p0`hPB6|MPA*i)f3nkoVkB6grRiT?3q&|M8$ctIo^I-kT+pQ z(lx$S@07MKS?%;_?iW4wvkWJmEP42JQmDuM!Zi!{&j(pmubAss%3AVFAgb0!>iQb- zGjcAIHk3`CeuU@qp*Qy*?p0gxa>n(hCp+bGq_?MgpA+hP!kBm0eUWb0I@^xbZo(ex zPF78i*&%fL#WDlVsvVklM7r6uYC2Ojc7L#4aCMOcZ-}OY*oIR~mzb{oe18@k5*dN= Y{8H1JWj_jB0ER7tr>mdKI;Vst0QrxrMgRZ+ diff --git a/vector/src/main/res/drawable-mdpi/voice_call_start_green.png b/vector/src/main/res/drawable-mdpi/voice_call_start_green.png deleted file mode 100755 index b11532ef5a34edaf915afa9f64be727aa763d796..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 684 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q4M;wBd$a>cu_bxCyDx`7I;J! zGca%qgD@k*tT_@uLG}_)Usv`A9L$_1f@*Sm+Zh;`EInNuLn>~)y>l?|u!DfB<4MVh ze2oGujT873Z@TME(G*{N_pkL`#sCi6^B$W%76J`{f|w(s)GsQw<=ByArcQTKst0xI`x+`cV*&Wu+R z!s^&UOV@1V7g|38p00i_>zopr0B$`3wEzGB diff --git a/vector/src/main/res/drawable-xhdpi/ic_send_sticker.png b/vector/src/main/res/drawable-xhdpi/ic_send_sticker.png deleted file mode 100644 index c17d04e498f80249f128587a9e76e3501504ee64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4586 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 diff --git a/vector/src/main/res/drawable-xxhdpi/ic_material_camera.png b/vector/src/main/res/drawable-xxhdpi/ic_material_camera.png deleted file mode 100755 index 78e5bb23ffb7086c06c271d3775167fbb46799af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 539 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGoY)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPNlMoLt&wHnBAq)(RD?D8sLn>~)opV<5kb(efteupX zwWf;ek_lTTPkMB+oBb^R2L7^Vc}@9cflWWE7=eZ`IGFfk8l2uItNU)V-)6-Fnl+}J zVum%UoMNUmqMTxuHLRRswl(>jZa?-3^?ayRy^+EAP3;25z3>*ned}9Xd>(NduG*g` zeu43v0s|ul1B(KKKm$X8LjRUE?+Y1cx^w^gUHVGtQ^vvXYD)c5HTp_HEgz!qFZO2C zZ4R6?p_=Ren=ggWs$QGSK2-8#pL~JZn%&7OD&GbrPl)T#{at3mxuSh*!|I0ktASd3 z>V@{&^H0ip>Ru@_QDpW0ts&?2JSMJ+-?%xbXGoCD4FiUjR4*>(su$bNjQE&ErRJ^13X}?rO)&E=9>#OR2@>Lkg zYM%R9BwL`mVv_xtpvrtB_N`ORUOM|Z>hABnfVmx6`ZP3E{1xSaH4 zY5&4De|M!wBZC726Epzc9kPEO)>3~?b}93VCabIUo(xK-*!V$V4F!c2%um^0rEq0C Q%7R2ZUHx3vIVCg!0B-!qZvX%Q diff --git a/vector/src/main/res/drawable-xxhdpi/ic_material_file.png b/vector/src/main/res/drawable-xxhdpi/ic_material_file.png deleted file mode 100755 index 64561dd4a46c142420570672762bddfe6787f914..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 545 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 B>+Jvl diff --git a/vector/src/main/res/drawable-xxhdpi/ic_send_sticker.png b/vector/src/main/res/drawable-xxhdpi/ic_send_sticker.png deleted file mode 100644 index a369cbee494db6f376916acfa2e9a41125454a71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7243 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 Z{~v}UpUcfOD|G+>002ovPDHLkV1hrJ(nJ6N diff --git a/vector/src/main/res/drawable-xxhdpi/vector_cancel_upload_download.png b/vector/src/main/res/drawable-xxhdpi/vector_cancel_upload_download.png deleted file mode 100755 index 51b4401ca053ca8cad6e9903646709a2f44444df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 309 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY0wn)GsXhaw{&>1LhEy=VysgJ$~x+g}6OvsxLimbaeN-!xQItoH=3nd`|H@dF!kYp_dChV`b9AudQLRn7yg2 zv~UiON9*MGOYAy6D=_*g@;c3(5`S(Hi^X;wk8Ms*3SMP^!WTf z-E_DAd$kLMWY`Z`);MuKF9=d$?_mzLoFj7Xp~|_3ODg!(3;AT&wLoS^O+0tsvcZJ& zD(m_$dNm(!9@n+CTyDa$w$*a^-$!>qK3P{4end8+qbAwoFEAV!JYD@<);T3K0RXh> Be)#|Z diff --git a/vector/src/main/res/drawable-xxhdpi/vector_micro_green.png b/vector/src/main/res/drawable-xxhdpi/vector_micro_green.png deleted file mode 100755 index 15114b7e71ac34437adbe2a98e55aff5231a17a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 399 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPN6Azb)h28H)5e5cE8BZ6-kcwMxZ(kHWq#)pOF{h9B zW?ySWOY4n3)l62;kQtHF_WU$snr_ZiHcVT5@5pZA-Y+zvGP=F8$3=r0W$l}bM6|Y+qUyFoX zl-B|ZK4W}Um_O@Lj@@IPxU0`z%{x1dt6;nO-_EyZGu}69X`5YHTH7+QcCU;_psw;( z-T0$Zp1zOZIdt=8+|?&J+INg^-75UP`tZciZ~OV2zV0nsQ2&lMx>@RBY}QS#$91#9 z)=taxE?||hoWSh)cTVbU$?t7NZ(se?K9u3`Zf{8C0^21yGNFVdQ&MBb@0KGVuZ2$lO diff --git a/vector/src/main/res/drawable-xxhdpi/video_call_black.png b/vector/src/main/res/drawable-xxhdpi/video_call_black.png deleted file mode 100755 index 0039e804eb1684ea4ebc31799709a087f572e5f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 224 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY0wn)GsXhawmV3H5hEy=Vy|MA+VFv-1hn?^8 z4~ug1g)FcZ2tQ~w=Lplx+X;0Q`O-fM6yDE!@w@{FUidGcwkmVlvbJqjp=XW1?wu~T z^_Jsx-sfxGL;v3?&|*&U<2W%#V1lKfLa~y=Gna-loeVRD8I9DLAQAzLOe`D%^2a{x z=bL%t*T#(tHXb^qa&Ey|=ZV3$mi+%IV|?53_`T+<7p`3W@mfYIs|#!;^C!uxN8C@h R>H?k2;OXk;vd$@?2>^U;U)TTu diff --git a/vector/src/main/res/drawable-xxhdpi/video_call_green.png b/vector/src/main/res/drawable-xxhdpi/video_call_green.png deleted file mode 100755 index 028ec1e3e302dde605f2d1a8862de2217926fd24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 298 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPt2L~Uwq9gZHGoa9RPZ!6Kid%1QUgT{u5NQkCA-%J& z*`lR+N1yUbuGYAuH}&U?4IeV!y1gS8sG5Oc@wbWHa__G{m(P1vx%>Uy{gEs4kG*i# zFJze&rROEnxXf&pkh;xS->P)!2PJ-H@rHV$L$%!{Psm^&nbmf4NDs!00GCXBW5P9(i&9mcltT_n9>4aSD3%Ow3uICgQ2 zjr=FWc(D&`CQobQ>*Xz@9Ht9Lp&X-lu|@Xg_43>xNU@I>XQUCw| diff --git a/vector/src/main/res/drawable-xxhdpi/voice_call_end_fushia.png b/vector/src/main/res/drawable-xxhdpi/voice_call_end_fushia.png deleted file mode 100755 index 814aa0017ec07a455055bb0eb22c95204a72cbb7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 331 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPN2Pd15<(4UiKoN!;o-U3d6}R5rI4#(0z~kW9z3|Eu z*Y!_kIk(kp=;Hls6HD+YPol zAC+BvrAO4b#Zp)+t^0HKk_^dZ*Z9*<8@oPpjM}q2Wq$G8hlRh)KI{%S{ie|F?7og- znM~1VKPE;WvEkyHSs5(cxv~HO3k;4oxOt7FTe3vU+l70 z`ip>ia-T)@$9spa%u_uVv*WvkY1+@<%{Mg)&z<{pUH$sSM|TRvzz$_t@se|+bC%Ul RZ`TlzfTydU%Q~loCIBCygU0{> diff --git a/vector/src/main/res/drawable-xxhdpi/voice_call_green.png b/vector/src/main/res/drawable-xxhdpi/voice_call_green.png deleted file mode 100755 index 7afa5cd1188503686266a4b66f6d4e10cd070e9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 432 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPt2L~Sy-_qHBD;O9UZ9QEaLn>~)opqb{kO7aYr+Jbr zTOtQrqO4m}eM`&b8y{ca$yc#ne!YK7j2?$#i+~fy-wPA|y!cnOFTBZS-S&y17d9%N z(0cHx!HC;|fk~i&fn~v-#d7S791aXw%o@py#TZZ3NH0IaaD^k_SkPRrilryh-X^o3 zD`cBe%jBnSADkw7t(p0`hPB6|MPA*i)f3nkoVkB6grRiT?3q&|M8$ctIo^I-kT+pQ z(lx$S@07MKS?%;_?iW4wvkWJmEP42JQmDuM!Zi!{&j(pmubAss%3AVFAgb0!>iQb- zGjcAIHk3`CeuU@qp*Qy*?p0gxa>n(hCp+bGq_?MgpA+hP!kBm0eUWb0I@^xbZo(ex zPF78i*&%fL#WDlVsvVklM7r6uYC2Ojc7L#4aCMOcZ-}OY*oIR~mzb{oe18@k5*dN= Y{8H1JWj_jB0ER7tr>mdKI;Vst0QrxrMgRZ+ diff --git a/vector/src/main/res/drawable-xxhdpi/voice_call_start_green.png b/vector/src/main/res/drawable-xxhdpi/voice_call_start_green.png deleted file mode 100755 index b11532ef5a34edaf915afa9f64be727aa763d796..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 684 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q4M;wBd$a>cu_bxCyDx`7I;J! zGca%qgD@k*tT_@uLG}_)Usv`A9L$_1f@*Sm+Zh;`EInNuLn>~)y>l?|u!DfB<4MVh ze2oGujT873Z@TME(G*{N_pkL`#sCi6^B$W%76J`{f|w(s)GsQw<=ByArcQTKst0xI`x+`cV*&Wu+R z!s^&UOV@1V7g|38p00i_>zopr0B$`3wEzGB diff --git a/vector/src/main/res/menu/vector_searches.xml b/vector/src/main/res/menu/vector_searches.xml deleted file mode 100755 index 542c433272..0000000000 --- a/vector/src/main/res/menu/vector_searches.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - From d85776297d18a6e5e832f77cf854d76f321ae09f Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 27 Feb 2020 14:56:18 +0100 Subject: [PATCH 06/16] Lint: fix IconDuplicates by remove unused resources --- vector/lint.xml | 1 + .../drawable-hdpi/ic_person_black_24dp.png | Bin 269 -> 0 bytes .../drawable-mdpi/ic_person_black_24dp.png | Bin 189 -> 0 bytes .../drawable-xhdpi/ic_person_black_24dp.png | Bin 307 -> 0 bytes .../res/drawable-xxhdpi/ic_devices_info.png | Bin 240 -> 0 bytes .../ic_material_message_black.png | Bin 318 -> 0 bytes .../ic_material_message_grey.png | Bin 712 -> 0 bytes .../ic_perm_device_information_black.png | Bin 240 -> 0 bytes .../res/drawable-xxhdpi/ic_person_black.png | Bin 428 -> 0 bytes .../drawable-xxhdpi/ic_person_black_24dp.png | Bin 428 -> 0 bytes .../drawable-xxhdpi/vector_close_widget.png | Bin 309 -> 0 bytes .../vector_create_direct_room.png | Bin 1787 -> 0 bytes .../vector_creation_remove_user.png | Bin 309 -> 0 bytes .../vector_leave_room_black.png | Bin 309 -> 0 bytes .../drawable-xxxhdpi/ic_person_black_24dp.png | Bin 565 -> 0 bytes .../res/menu/vector_home_group_settings.xml | 7 --- vector/src/main/res/menu/vector_room.xml | 43 ------------------ 17 files changed, 1 insertion(+), 50 deletions(-) delete mode 100644 vector/src/main/res/drawable-hdpi/ic_person_black_24dp.png delete mode 100644 vector/src/main/res/drawable-mdpi/ic_person_black_24dp.png delete mode 100644 vector/src/main/res/drawable-xhdpi/ic_person_black_24dp.png delete mode 100755 vector/src/main/res/drawable-xxhdpi/ic_devices_info.png delete mode 100644 vector/src/main/res/drawable-xxhdpi/ic_material_message_black.png delete mode 100644 vector/src/main/res/drawable-xxhdpi/ic_material_message_grey.png delete mode 100755 vector/src/main/res/drawable-xxhdpi/ic_perm_device_information_black.png delete mode 100755 vector/src/main/res/drawable-xxhdpi/ic_person_black.png delete mode 100644 vector/src/main/res/drawable-xxhdpi/ic_person_black_24dp.png delete mode 100755 vector/src/main/res/drawable-xxhdpi/vector_close_widget.png delete mode 100755 vector/src/main/res/drawable-xxhdpi/vector_create_direct_room.png delete mode 100755 vector/src/main/res/drawable-xxhdpi/vector_creation_remove_user.png delete mode 100755 vector/src/main/res/drawable-xxhdpi/vector_leave_room_black.png delete mode 100644 vector/src/main/res/drawable-xxxhdpi/ic_person_black_24dp.png delete mode 100755 vector/src/main/res/menu/vector_home_group_settings.xml delete mode 100755 vector/src/main/res/menu/vector_room.xml diff --git a/vector/lint.xml b/vector/lint.xml index 6d4c4125ef..2a7197e534 100644 --- a/vector/lint.xml +++ b/vector/lint.xml @@ -9,6 +9,7 @@ + diff --git a/vector/src/main/res/drawable-hdpi/ic_person_black_24dp.png b/vector/src/main/res/drawable-hdpi/ic_person_black_24dp.png deleted file mode 100644 index 6fbcc6d4258cf676f816ee8970ad77e06bf74f9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 269 zcmV+o0rLKdP)I`H9;{R%N3%Udmjd26I6u~}~xB@LCArhk-&_cUGBxnlZYAM5q%#4W5 zoTq=`!qxhvT+hJN%*c^kLu)4DTN5i9$W274u}p0}k!VkC1Ci)TZBvn`_{X92X_sp2 zibT6=%iW4nHx@LoYFzrFWesHxTzmCq=uoEhCpxyA=(|_=_^NQH@7Sh}iZVMc%!G9B z&TY&5XkOQ|sL+#rbEIt;i5d;9OIY$KYW84}vNO@3Q_5aMg9^%`S?y4TDruBU-cV>nBw2MvWwby8c0^P&l>FVdQ&MBb@07o52e*gdg diff --git a/vector/src/main/res/drawable-xhdpi/ic_person_black_24dp.png b/vector/src/main/res/drawable-xhdpi/ic_person_black_24dp.png deleted file mode 100644 index 360a32f27cd837c6e2036bf8087f3fbd440d26af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 307 zcmV-30nGl1P)8`r`AL0Dh?&)4uZS5=#i{jTauwS5FB-rB8cb#+9sDUC`vn+$E-^GHOc!q zDBthD=Sjj#5Cjdxq~xrsG7=)Z+F^peRg%*4_xO9Xrm3%q3EEJC2Qk`MNrYL79E~x{ zk)t_gE97YT2L>|aXogvW91SsxC>>|ohu=KZ5nl9|qBY&o1z!^><&U2;qKj7%W9BTY zW(?^Q{40B$bIC0W3O=g}7Thr4j9rXk2IR<5#s!D8(BYJ4RI?{e=+M9ckEme}>{HV* zZ>UAD9MyaK57e^vI$v>(3|+BRfegK{m5enX2m?V7d;xL&3kk*tXR!bP002ovPDHLk FV1itgfiM67 diff --git a/vector/src/main/res/drawable-xxhdpi/ic_devices_info.png b/vector/src/main/res/drawable-xxhdpi/ic_devices_info.png deleted file mode 100755 index 0ac10c8f3317acfb8ba5102d361f1133465a72aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 240 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY0wn)GsXhawwtKobhEy=Vy?M~9-9g0d<7TP* zj`IsQTn}kp7WY*C(xP2!wX=%z1&YpX7yYTr=6YmZ#Ny3`%5^t?Pv2X6OZ$9Ii4?0Y z&!UXxnJK-FB6$})u690JyX02KBiSXp1dm#KihdRTa+!tm*X!RLLMj@iy$X&^HGG^x zPj>rE05VxPg;YEy+)o8EPWb}`?pOcJ-+%Ib=cBhvb}4sV_cZQtU6xC`h722WQ%mvv4FO#pytV%Gow diff --git a/vector/src/main/res/drawable-xxhdpi/ic_material_message_black.png b/vector/src/main/res/drawable-xxhdpi/ic_material_message_black.png deleted file mode 100644 index 0d989b2bcd7dc84e35e5da655d154f9b4fd4c857..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD0wg^q?%&M7z{u+9;uuoF`1Z;{-@^_PtPgii zj0<2g8&Z+DtJXuTQd&Fq#Y z{c>skHqQgI)Eyca7_-$MtYrW(n7CrJ91dv8P59iw$|0bT(8{vsGWVPYCUu3+g4_ZM z51bnsL>XEAfGYpXUSQ$)@$6X10Y%vjr`b%l-E6Q`VV1Kv&1&-P^t0d(k8L(2bAOO- z&^{$@H~-7eCFj*^?OuNNobUgu=F;=Ys6v-&jEy(@|2I0eLH&|)8!%iLJYD@<);T3K F0RYTwgvtN_ diff --git a/vector/src/main/res/drawable-xxhdpi/ic_material_message_grey.png b/vector/src/main/res/drawable-xxhdpi/ic_material_message_grey.png deleted file mode 100644 index 92a1da89f601ed2fb474d9ac5c4d78a796a3a054..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 712 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q4M;wBd$farfvMlq#WAGf*4sOVe$tL24T@xciGJSKPuY*00ZLEDZ)s+`Li7+C}y zV8n$D44OX^wSat;hASEis-4+56qd54te#gR&5uw8W(D{<{6{fvK_X+&r^6vY<2@Kw z20C!#*Xxb!45o~ThADpxM1gJ-a>x?7aB2c0&=9Z>fC3=%UW%DA*h-Y#dd9HQ-?-t* za!rS>ZE@EH9lFY7DxHKB*6!A43Wg^31;2o7punsD_PjO> z2N#358azOOLnJZ+B?N4^n48@9GI&D#!7_mblxCPbK)z|6#~`q1;l+YYn{P7!fv2mV J%Q~loCIGMN`2PR^ diff --git a/vector/src/main/res/drawable-xxhdpi/ic_perm_device_information_black.png b/vector/src/main/res/drawable-xxhdpi/ic_perm_device_information_black.png deleted file mode 100755 index 0ac10c8f3317acfb8ba5102d361f1133465a72aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 240 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY0wn)GsXhawwtKobhEy=Vy?M~9-9g0d<7TP* zj`IsQTn}kp7WY*C(xP2!wX=%z1&YpX7yYTr=6YmZ#Ny3`%5^t?Pv2X6OZ$9Ii4?0Y z&!UXxnJK-FB6$})u690JyX02KBiSXp1dm#KihdRTa+!tm*X!RLLMj@iy$X&^HGG^x zPj>rE05VxPg;YEy+)o8EPWb}`?pOcJ-+%Ib=cBhvb}4sV_cZQtU6xC`h722WQ%mvv4FO#pytV%Gow diff --git a/vector/src/main/res/drawable-xxhdpi/ic_person_black.png b/vector/src/main/res/drawable-xxhdpi/ic_person_black.png deleted file mode 100755 index f1e148490b9b0ab76648553a96da8ee27ba0b8be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 428 zcmV;d0aN~oP)IS7U|zrX^K8 zYaj=Djz=}bpbDN8SRn=_1bER!3~S>-krXj3CB(TVVo?Lhed z{|IQ4B71FVagCD+X)s{Mde@9Tbpn)9|D_zac+4w$Oo&O??n;Q6(B&mnZj!^3dqfOL z48GPO5qELu4sZB^SQhh|5*fR|BR(KUH0B{WGV*{=NCr*0&(W^%4#}{$T;>QRVkF}} zbDO_(gKvm~zH%LVTw;ni>LVAi_7rj06ReF9hrP$z55!^Lu_kWQK{`kW{Uel8N~vG5 Wub7svB(2u~0000IS7U|zrX^K8 zYaj=Djz=}bpbDN8SRn=_1bER!3~S>-krXj3CB(TVVo?Lhed z{|IQ4B71FVagCD+X)s{Mde@9Tbpn)9|D_zac+4w$Oo&O??n;Q6(B&mnZj!^3dqfOL z48GPO5qELu4sZB^SQhh|5*fR|BR(KUH0B{WGV*{=NCr*0&(W^%4#}{$T;>QRVkF}} zbDO_(gKvm~zH%LVTw;ni>LVAi_7rj06ReF9hrP$z55!^Lu_kWQK{`kW{Uel8N~vG5 Wub7svB(2u~00001LhEy=VysgJ$~x+g}6OvsxLimbaeN-!xQItoH=3nd`|H@dF!kYp_dChV`b9AudQLRn7yg2 zv~UiON9*MGOYAy6D=_*g@;c3(5`S(Hi^X;wk8Ms*3SMP^!WTf z-E_DAd$kLMWY`Z`);MuKF9=d$?_mzLoFj7Xp~|_3ODg!(3;AT&wLoS^O+0tsvcZJ& zD(m_$dNm(!9@n+CTyDa$w$*a^-$!>qK3P{4end8+qbAwoFEAV!JYD@<);T3K0RXh> Be)#|Z diff --git a/vector/src/main/res/drawable-xxhdpi/vector_create_direct_room.png b/vector/src/main/res/drawable-xxhdpi/vector_create_direct_room.png deleted file mode 100755 index a5b2b57497d496ad8e3807e35dfb29992eabb93f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1787 zcmV469L4=^lShC28c;S zK~#9!?VMX|6jd0<|KIHF(%J%YjT%~#-4;q35(NdC5VOGSY&PK%*&r?uH2Q=ZQ)i4{z^1o1(5X}~lj^03*R>Cz}|HKsu&)wGr|6fp*92vBs{**V7tD(QvUPCM;% zZ{OQ)&iVG7-+q_#ojG%Wq7=oB&~y(V6bj8S3}ZGC&ElNT1^^g4C7Tn5Vms8 zeUqfN7eF&(>~u>@%da^H$nW=yZnrxE;2i+ZPw{{7BN2U`N~O-Uwzj6T8j#=b7d;-& z>zwoV0eBsa6+~A6989HBrzR8Bqyds7DM&;|2II@=uVGj{)_jZnX>C&mNS5XI0DPRorIqCK`35vi>zH&vk|gZ_a4g3x#|+YMnx>KD-n@CHZ9wUC`jaeJ9Z!W+CzHvK zY`K^uNq!RwQJX$ zf^=Ee^%Z6Xu4vY4-n@CcIp>bRsi~EKFpPDkfCis<7B-;~41^IrxC}*EmdS!@ihNM> zSU`TiznpXaRFMy!sjI6i9aXHBmX2&&@%jL4AxUa7d_4W0L zL?S3FE3@2h$&w`~FCXsV0|Nu->FKeo_^;4&UAF>gvMYy?dv_5Sgy)Wv#8P$zd)wc#h_JaT$bb|HFA)knS$>8O~s2 zEmrV=h^RYLEq1Zc0WrodW&+d#fEO?y?smH`m;#E&<2N|xJp~M?D;ka7GzBzhMP~{a z&{@-!^bkN_6{wpr!!S;d2`C1S0|LN_=rgBA*WBC;UDqFd)^#1t&CO1_*QaK2*R(J_ zaNvN@*4EYrV2u-loW=uG?TVtT9XB8VkY#x#=llmu@I-zNNSbrLLRHnvW(_j#D8}RQ zP5>wKxb8Zh3C@^+06-MQdH|hy2&bdJzyIB_+KmY)8jU_M3}ZWhJ9)&XpE34IXJ@Bw z8xQ~_5{WASb^|c-A?^U!t*UCDmByBXucm3;Uaz;8h_)hk&rLHT+NCJUIjbGUm7O$A zyX^D%bO0N26wn8XqMR5{hjFKGP1C;f`Ft9HjX9M5bpWp^igJ9s9VawFP1Anydc9pl zv=Q0=*5Lr>Jff=V*AvQic7A#N`t^%lF4tKAtFjc%_nhSO=_002ovPDHLkV1i;qL;C;# diff --git a/vector/src/main/res/drawable-xxhdpi/vector_creation_remove_user.png b/vector/src/main/res/drawable-xxhdpi/vector_creation_remove_user.png deleted file mode 100755 index 51b4401ca053ca8cad6e9903646709a2f44444df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 309 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY0wn)GsXhaw{&>1LhEy=VysgJ$~x+g}6OvsxLimbaeN-!xQItoH=3nd`|H@dF!kYp_dChV`b9AudQLRn7yg2 zv~UiON9*MGOYAy6D=_*g@;c3(5`S(Hi^X;wk8Ms*3SMP^!WTf z-E_DAd$kLMWY`Z`);MuKF9=d$?_mzLoFj7Xp~|_3ODg!(3;AT&wLoS^O+0tsvcZJ& zD(m_$dNm(!9@n+CTyDa$w$*a^-$!>qK3P{4end8+qbAwoFEAV!JYD@<);T3K0RXh> Be)#|Z diff --git a/vector/src/main/res/drawable-xxhdpi/vector_leave_room_black.png b/vector/src/main/res/drawable-xxhdpi/vector_leave_room_black.png deleted file mode 100755 index 51b4401ca053ca8cad6e9903646709a2f44444df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 309 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY0wn)GsXhaw{&>1LhEy=VysgJ$~x+g}6OvsxLimbaeN-!xQItoH=3nd`|H@dF!kYp_dChV`b9AudQLRn7yg2 zv~UiON9*MGOYAy6D=_*g@;c3(5`S(Hi^X;wk8Ms*3SMP^!WTf z-E_DAd$kLMWY`Z`);MuKF9=d$?_mzLoFj7Xp~|_3ODg!(3;AT&wLoS^O+0tsvcZJ& zD(m_$dNm(!9@n+CTyDa$w$*a^-$!>qK3P{4end8+qbAwoFEAV!JYD@<);T3K0RXh> Be)#|Z diff --git a/vector/src/main/res/drawable-xxxhdpi/ic_person_black_24dp.png b/vector/src/main/res/drawable-xxxhdpi/ic_person_black_24dp.png deleted file mode 100644 index 1ebc37be1701e3932b1d8c4de99edb246c7ae1c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 565 zcmV-50?Pe~P)}mEdFOO0kk66l|j-6?~9x1EYin+HvWh zjh(a$!K9k0^!NfrGjnHhZ{U2sFEBs2bI6raN-3q3Qc9IsCm`g6goI;40&0{Q3ybV> zid;~ix6I?TD>OJm{!zjUJRG&a0Ww4#d>ph)7a6jcDvnv8i=-&V$01iaKvLGh!x;@E zLmN0^kuxMi2|iBPMKTuPfNPv08S7EPx^={$HLME|gPK?uA_ldv?gTL?#<~PCXrKd( z9b0}v`V+qy_cK~U3|hsy5`83NKbgS+f!PDHZ=NLM37y3e8%Tzp;tY=tlCn0_IK(GL zQuLjhIHt-`iqBudL38X6`FLh=l*ez zvdRofDW#OtrdXoJW8SgHAu)aaApEAwC-!*H6Yf)G3g=v>&Nd%OkReKFvqPN<)=hAi z1`(36h)q_wgcZxYBt|grh%N3gLX*@9k(~R$112fl1P}R!6x3H9ahU?G5FrH@agRcH z>~M~Zq-{KMRv|=2Septts_+>ZabLJWPRbl27K$j7i&u!H0x)-rbHq~T+{V}@VzDiZ z?IRY8F!lqn*e{HU<#d1!&;dH2h;)EbN-3q3QcC>=IV&s}(aLsG00000NkvXXu0mjf D>pAVy diff --git a/vector/src/main/res/menu/vector_home_group_settings.xml b/vector/src/main/res/menu/vector_home_group_settings.xml deleted file mode 100755 index e40c4b487f..0000000000 --- a/vector/src/main/res/menu/vector_home_group_settings.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - \ No newline at end of file diff --git a/vector/src/main/res/menu/vector_room.xml b/vector/src/main/res/menu/vector_room.xml deleted file mode 100755 index bb84a3ff29..0000000000 --- a/vector/src/main/res/menu/vector_room.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - From 12861aacdae6f93f5870fa3ab45412aa43e48618 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 27 Feb 2020 15:11:43 +0100 Subject: [PATCH 07/16] lint: check negative margin --- vector/lint.xml | 2 ++ .../src/main/res/layout/vector_message_merge_avatar_list.xml | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/vector/lint.xml b/vector/lint.xml index 2a7197e534..c74fcef250 100644 --- a/vector/lint.xml +++ b/vector/lint.xml @@ -10,6 +10,7 @@ + @@ -23,6 +24,7 @@ + diff --git a/vector/src/main/res/layout/vector_message_merge_avatar_list.xml b/vector/src/main/res/layout/vector_message_merge_avatar_list.xml index 853dfc80d7..58f38ada0e 100644 --- a/vector/src/main/res/layout/vector_message_merge_avatar_list.xml +++ b/vector/src/main/res/layout/vector_message_merge_avatar_list.xml @@ -21,6 +21,7 @@ android:layout_marginLeft="-5dp" android:adjustViewBounds="true" android:scaleType="centerCrop" + tools:ignore="NegativeMargin" tools:src="@tools:sample/avatars" /> \ No newline at end of file From 36a848471f84db9482a09a707f308b9471fbe9d4 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 27 Feb 2020 15:27:46 +0100 Subject: [PATCH 08/16] Enable other lint check (no change necessary in source) --- vector/lint.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/vector/lint.xml b/vector/lint.xml index c74fcef250..c5fe018fd9 100644 --- a/vector/lint.xml +++ b/vector/lint.xml @@ -37,9 +37,10 @@ + - + From 9f28738fd6095c4592f7419db4e1afd57d1fd4cf Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 27 Feb 2020 15:41:35 +0100 Subject: [PATCH 09/16] Restore availability to Chromebooks (#932) --- CHANGES.md | 2 +- vector/lint.xml | 3 +++ vector/src/main/AndroidManifest.xml | 9 +++++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index ea6aee07c4..da27d0a0e1 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -20,7 +20,7 @@ Build 🧱: - Upgrade ktlint to version 0.36.0 Other changes: - - + - Restore availability to Chromebooks (#932) Changes in RiotX 0.17.0 (2020-02-27) =================================================== diff --git a/vector/lint.xml b/vector/lint.xml index c5fe018fd9..3d3bb1856f 100644 --- a/vector/lint.xml +++ b/vector/lint.xml @@ -43,4 +43,7 @@ + + + diff --git a/vector/src/main/AndroidManifest.xml b/vector/src/main/AndroidManifest.xml index 488f357c4b..2e56e20ce7 100644 --- a/vector/src/main/AndroidManifest.xml +++ b/vector/src/main/AndroidManifest.xml @@ -9,6 +9,15 @@ + + + + + Date: Thu, 27 Feb 2020 17:03:48 +0100 Subject: [PATCH 10/16] Verification with QrCode: ensure there is a Camera to scan QrCodes. --- .../riotx/core/hardware/HardwareInfo.kt | 46 ++++++++++++++++++ .../features/crypto/verification/Config.kt | 29 ------------ .../SupportedVerificationMethodsProvider.kt | 47 +++++++++++++++++++ .../VerificationBottomSheetViewModel.kt | 24 ++++++---- .../home/room/detail/RoomDetailViewModel.kt | 22 +++++---- .../features/navigation/DefaultNavigator.kt | 10 ++-- .../settings/devices/DevicesViewModel.kt | 12 +++-- 7 files changed, 134 insertions(+), 56 deletions(-) create mode 100644 vector/src/main/java/im/vector/riotx/core/hardware/HardwareInfo.kt delete mode 100644 vector/src/main/java/im/vector/riotx/features/crypto/verification/Config.kt create mode 100644 vector/src/main/java/im/vector/riotx/features/crypto/verification/SupportedVerificationMethodsProvider.kt diff --git a/vector/src/main/java/im/vector/riotx/core/hardware/HardwareInfo.kt b/vector/src/main/java/im/vector/riotx/core/hardware/HardwareInfo.kt new file mode 100644 index 0000000000..1ce0dda025 --- /dev/null +++ b/vector/src/main/java/im/vector/riotx/core/hardware/HardwareInfo.kt @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2020 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@file:Suppress("DEPRECATION") + +package im.vector.riotx.core.hardware + +import android.content.Context +import android.hardware.Camera +import android.hardware.camera2.CameraCharacteristics +import android.hardware.camera2.CameraManager +import android.os.Build +import javax.inject.Inject + +class HardwareInfo @Inject constructor( + private val context: Context +) { + /** + * Tell if the device has a back (or external) camera + */ + fun hasBackCamera(): Boolean { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { + return Camera.getNumberOfCameras() > 0 + } + + val manager = context.getSystemService(Context.CAMERA_SERVICE) as CameraManager? ?: return Camera.getNumberOfCameras() > 0 + + return manager.cameraIdList.any { + val lensFacing = manager.getCameraCharacteristics(it).get(CameraCharacteristics.LENS_FACING) + lensFacing == CameraCharacteristics.LENS_FACING_BACK || lensFacing == CameraCharacteristics.LENS_FACING_EXTERNAL + } + } +} diff --git a/vector/src/main/java/im/vector/riotx/features/crypto/verification/Config.kt b/vector/src/main/java/im/vector/riotx/features/crypto/verification/Config.kt deleted file mode 100644 index 80f2b1153a..0000000000 --- a/vector/src/main/java/im/vector/riotx/features/crypto/verification/Config.kt +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2020 New Vector Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package im.vector.riotx.features.crypto.verification - -import im.vector.matrix.android.api.session.crypto.verification.VerificationMethod - -val supportedVerificationMethods = - listOf( - // RiotX supports SAS verification - VerificationMethod.SAS, - // RiotX is able to show QR codes - VerificationMethod.QR_CODE_SHOW, - // RiotX is able to scan QR codes - VerificationMethod.QR_CODE_SCAN - ) diff --git a/vector/src/main/java/im/vector/riotx/features/crypto/verification/SupportedVerificationMethodsProvider.kt b/vector/src/main/java/im/vector/riotx/features/crypto/verification/SupportedVerificationMethodsProvider.kt new file mode 100644 index 0000000000..e7ed123de6 --- /dev/null +++ b/vector/src/main/java/im/vector/riotx/features/crypto/verification/SupportedVerificationMethodsProvider.kt @@ -0,0 +1,47 @@ +/* + * Copyright 2020 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package im.vector.riotx.features.crypto.verification + +import im.vector.matrix.android.api.session.crypto.verification.VerificationMethod +import im.vector.riotx.core.hardware.HardwareInfo +import timber.log.Timber +import javax.inject.Inject + +class SupportedVerificationMethodsProvider @Inject constructor( + private val hardwareInfo: HardwareInfo +) { + /** + * Provide the list of supported method by RiotX, with or without the QR_CODE_SCAN, depending if a back camera + * is available + */ + fun provide(): List { + return mutableListOf( + // RiotX supports SAS verification + VerificationMethod.SAS, + // RiotX is able to show QR codes + VerificationMethod.QR_CODE_SHOW) + .apply { + if (hardwareInfo.hasBackCamera()) { + // RiotX is able to scan QR codes, and a Camera is available + add(VerificationMethod.QR_CODE_SCAN) + } else { + // This quite uncommon + Timber.w("No back Camera detected") + } + } + } +} diff --git a/vector/src/main/java/im/vector/riotx/features/crypto/verification/VerificationBottomSheetViewModel.kt b/vector/src/main/java/im/vector/riotx/features/crypto/verification/VerificationBottomSheetViewModel.kt index c5fd167f39..29caea9683 100644 --- a/vector/src/main/java/im/vector/riotx/features/crypto/verification/VerificationBottomSheetViewModel.kt +++ b/vector/src/main/java/im/vector/riotx/features/crypto/verification/VerificationBottomSheetViewModel.kt @@ -63,9 +63,11 @@ data class VerificationBottomSheetViewState( val isMe: Boolean = false ) : MvRxState -class VerificationBottomSheetViewModel @AssistedInject constructor(@Assisted initialState: VerificationBottomSheetViewState, - @Assisted args: VerificationBottomSheet.VerificationArgs, - private val session: Session) +class VerificationBottomSheetViewModel @AssistedInject constructor( + @Assisted initialState: VerificationBottomSheetViewState, + @Assisted args: VerificationBottomSheet.VerificationArgs, + private val session: Session, + private val supportedVerificationMethodsProvider: SupportedVerificationMethodsProvider) : VectorViewModel(initialState), VerificationService.Listener { @@ -116,9 +118,11 @@ class VerificationBottomSheetViewModel @AssistedInject constructor(@Assisted ini if (autoReady) { // TODO, can I be here in DM mode? in this case should test if roomID is null? session.cryptoService().verificationService() - .readyPendingVerification(supportedVerificationMethods, + .readyPendingVerification( + supportedVerificationMethodsProvider.provide(), pr!!.otherUserId, - pr.transactionId ?: "") + pr.transactionId ?: "" + ) } } @@ -173,7 +177,7 @@ class VerificationBottomSheetViewModel @AssistedInject constructor(@Assisted ini session .cryptoService() .verificationService() - .requestKeyVerificationInDMs(supportedVerificationMethods, otherUserId, data, pendingLocalId) + .requestKeyVerificationInDMs(supportedVerificationMethodsProvider.provide(), otherUserId, data, pendingLocalId) ) ) } @@ -191,7 +195,7 @@ class VerificationBottomSheetViewModel @AssistedInject constructor(@Assisted ini pendingRequest = Success(session .cryptoService() .verificationService() - .requestKeyVerificationInDMs(supportedVerificationMethods, otherUserId, roomId) + .requestKeyVerificationInDMs(supportedVerificationMethodsProvider.provide(), otherUserId, roomId) ) ) } @@ -362,9 +366,11 @@ class VerificationBottomSheetViewModel @AssistedInject constructor(@Assisted ini // auto ready in this case, as we are waiting // TODO, can I be here in DM mode? in this case should test if roomID is null? session.cryptoService().verificationService() - .readyPendingVerification(supportedVerificationMethods, + .readyPendingVerification( + supportedVerificationMethodsProvider.provide(), pr.otherUserId, - pr.transactionId ?: "") + pr.transactionId ?: "" + ) } // Use this one! diff --git a/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailViewModel.kt b/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailViewModel.kt index 8a231fb25d..f98dd1ae5c 100644 --- a/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailViewModel.kt +++ b/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailViewModel.kt @@ -65,7 +65,7 @@ import im.vector.riotx.core.resources.UserPreferencesProvider import im.vector.riotx.core.utils.subscribeLogError import im.vector.riotx.features.command.CommandParser import im.vector.riotx.features.command.ParsedCommand -import im.vector.riotx.features.crypto.verification.supportedVerificationMethods +import im.vector.riotx.features.crypto.verification.SupportedVerificationMethodsProvider import im.vector.riotx.features.home.room.detail.composer.rainbow.RainbowGenerator import im.vector.riotx.features.home.room.detail.timeline.helper.TimelineDisplayableEvents import im.vector.riotx.features.home.room.typing.TypingHelper @@ -81,13 +81,15 @@ import java.io.File import java.util.concurrent.TimeUnit import java.util.concurrent.atomic.AtomicBoolean -class RoomDetailViewModel @AssistedInject constructor(@Assisted initialState: RoomDetailViewState, - userPreferencesProvider: UserPreferencesProvider, - private val vectorPreferences: VectorPreferences, - private val stringProvider: StringProvider, - private val typingHelper: TypingHelper, - private val rainbowGenerator: RainbowGenerator, - private val session: Session +class RoomDetailViewModel @AssistedInject constructor( + @Assisted initialState: RoomDetailViewState, + userPreferencesProvider: UserPreferencesProvider, + private val vectorPreferences: VectorPreferences, + private val stringProvider: StringProvider, + private val typingHelper: TypingHelper, + private val rainbowGenerator: RainbowGenerator, + private val session: Session, + private val supportedVerificationMethodsProvider: SupportedVerificationMethodsProvider ) : VectorViewModel(initialState), Timeline.Listener { private val room = session.getRoom(initialState.roomId)!! @@ -421,7 +423,7 @@ class RoomDetailViewModel @AssistedInject constructor(@Assisted initialState: Ro session .cryptoService() .verificationService() - .requestKeyVerificationInDMs(supportedVerificationMethods, slashCommandResult.userId, room.roomId) + .requestKeyVerificationInDMs(supportedVerificationMethodsProvider.provide(), slashCommandResult.userId, room.roomId) _viewEvents.post(RoomDetailViewEvents.SlashCommandHandled()) popDraft() } @@ -828,7 +830,7 @@ class RoomDetailViewModel @AssistedInject constructor(@Assisted initialState: Ro private fun handleAcceptVerification(action: RoomDetailAction.AcceptVerificationRequest) { Timber.v("## SAS handleAcceptVerification ${action.otherUserId}, roomId:${room.roomId}, txId:${action.transactionId}") if (session.cryptoService().verificationService().readyPendingVerificationInDMs( - supportedVerificationMethods, + supportedVerificationMethodsProvider.provide(), action.otherUserId, room.roomId, action.transactionId)) { diff --git a/vector/src/main/java/im/vector/riotx/features/navigation/DefaultNavigator.kt b/vector/src/main/java/im/vector/riotx/features/navigation/DefaultNavigator.kt index 63fab290be..a080cabf1b 100644 --- a/vector/src/main/java/im/vector/riotx/features/navigation/DefaultNavigator.kt +++ b/vector/src/main/java/im/vector/riotx/features/navigation/DefaultNavigator.kt @@ -24,7 +24,6 @@ import androidx.core.app.ActivityOptionsCompat import androidx.core.app.TaskStackBuilder import androidx.core.view.ViewCompat import im.vector.matrix.android.api.session.crypto.verification.IncomingSasVerificationTransaction -import im.vector.matrix.android.api.session.crypto.verification.VerificationMethod import im.vector.matrix.android.api.session.room.model.roomdirectory.PublicRoom import im.vector.matrix.android.api.util.MatrixItem import im.vector.riotx.R @@ -35,6 +34,7 @@ import im.vector.riotx.core.utils.toast import im.vector.riotx.features.createdirect.CreateDirectRoomActivity import im.vector.riotx.features.crypto.keysbackup.settings.KeysBackupManageActivity import im.vector.riotx.features.crypto.keysbackup.setup.KeysBackupSetupActivity +import im.vector.riotx.features.crypto.verification.SupportedVerificationMethodsProvider import im.vector.riotx.features.crypto.verification.VerificationBottomSheet import im.vector.riotx.features.debug.DebugMenuActivity import im.vector.riotx.features.home.room.detail.RoomDetailActivity @@ -56,7 +56,8 @@ import javax.inject.Singleton @Singleton class DefaultNavigator @Inject constructor( private val sessionHolder: ActiveSessionHolder, - private val vectorPreferences: VectorPreferences + private val vectorPreferences: VectorPreferences, + private val supportedVerificationMethodsProvider: SupportedVerificationMethodsProvider ) : Navigator { override fun openRoom(context: Context, roomId: String, eventId: String?, buildTask: Boolean) { @@ -85,9 +86,10 @@ class DefaultNavigator @Inject constructor( override fun requestSessionVerification(context: Context) { val session = sessionHolder.getSafeActiveSession() ?: return val pr = session.cryptoService().verificationService().requestKeyVerification( - listOf(VerificationMethod.SAS, VerificationMethod.QR_CODE_SCAN, VerificationMethod.QR_CODE_SHOW), + supportedVerificationMethodsProvider.provide(), session.myUserId, - session.cryptoService().getUserDevices(session.myUserId).map { it.deviceId }) + session.cryptoService().getUserDevices(session.myUserId).map { it.deviceId } + ) if (context is VectorBaseActivity) { VerificationBottomSheet.withArgs( roomId = null, diff --git a/vector/src/main/java/im/vector/riotx/features/settings/devices/DevicesViewModel.kt b/vector/src/main/java/im/vector/riotx/features/settings/devices/DevicesViewModel.kt index ce6e388af6..79a5fe84aa 100644 --- a/vector/src/main/java/im/vector/riotx/features/settings/devices/DevicesViewModel.kt +++ b/vector/src/main/java/im/vector/riotx/features/settings/devices/DevicesViewModel.kt @@ -40,7 +40,7 @@ import im.vector.matrix.android.internal.crypto.model.rest.DeviceInfo import im.vector.matrix.android.internal.crypto.model.rest.DevicesListResponse import im.vector.matrix.rx.rx import im.vector.riotx.core.platform.VectorViewModel -import im.vector.riotx.features.crypto.verification.supportedVerificationMethods +import im.vector.riotx.features.crypto.verification.SupportedVerificationMethodsProvider data class DevicesViewState( val myDeviceId: String = "", @@ -50,8 +50,10 @@ data class DevicesViewState( val request: Async = Uninitialized ) : MvRxState -class DevicesViewModel @AssistedInject constructor(@Assisted initialState: DevicesViewState, - private val session: Session) +class DevicesViewModel @AssistedInject constructor( + @Assisted initialState: DevicesViewState, + private val session: Session, + private val supportedVerificationMethodsProvider: SupportedVerificationMethodsProvider) : VectorViewModel(initialState), VerificationService.Listener { @AssistedInject.Factory @@ -172,7 +174,9 @@ class DevicesViewModel @AssistedInject constructor(@Assisted initialState: Devic } private fun handleVerify(action: DevicesAction.VerifyMyDevice) { - val txID = session.cryptoService().verificationService().requestKeyVerification(supportedVerificationMethods, session.myUserId, listOf(action.deviceId)) + val txID = session.cryptoService() + .verificationService() + .requestKeyVerification(supportedVerificationMethodsProvider.provide(), session.myUserId, listOf(action.deviceId)) _viewEvents.post(DevicesViewEvents.ShowVerifyDevice( session.myUserId, txID.transactionId From 77dd911054ad100c6975074fb1dbd607a6c27140 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 27 Feb 2020 17:42:25 +0100 Subject: [PATCH 11/16] Code quality --- .../verification/VerificationBottomSheetViewModel.kt | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/vector/src/main/java/im/vector/riotx/features/crypto/verification/VerificationBottomSheetViewModel.kt b/vector/src/main/java/im/vector/riotx/features/crypto/verification/VerificationBottomSheetViewModel.kt index 29caea9683..bda483d6ef 100644 --- a/vector/src/main/java/im/vector/riotx/features/crypto/verification/VerificationBottomSheetViewModel.kt +++ b/vector/src/main/java/im/vector/riotx/features/crypto/verification/VerificationBottomSheetViewModel.kt @@ -177,7 +177,12 @@ class VerificationBottomSheetViewModel @AssistedInject constructor( session .cryptoService() .verificationService() - .requestKeyVerificationInDMs(supportedVerificationMethodsProvider.provide(), otherUserId, data, pendingLocalId) + .requestKeyVerificationInDMs( + supportedVerificationMethodsProvider.provide(), + otherUserId, + data, + pendingLocalId + ) ) ) } @@ -298,8 +303,6 @@ class VerificationBottomSheetViewModel @AssistedInject constructor( } catch (failure: Throwable) { _viewEvents.post(VerificationBottomSheetViewEvents.ModalError(failure.localizedMessage)) } - - Unit } }.exhaustive } From b7ff546f6608390f1d1fd5fe88615afa1c029a08 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Sun, 1 Mar 2020 09:59:00 +0100 Subject: [PATCH 12/16] Add support for `/plain` command (#12) --- CHANGES.md | 2 +- .../java/im/vector/riotx/features/command/Command.kt | 1 + .../im/vector/riotx/features/command/CommandParser.kt | 9 +++++++++ .../im/vector/riotx/features/command/ParsedCommand.kt | 1 + .../features/home/room/detail/RoomDetailViewModel.kt | 6 ++++++ vector/src/main/res/values/strings_riotX.xml | 2 +- 6 files changed, 19 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 4f8838deb6..b2ad0766c4 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -5,7 +5,7 @@ Features ✨: - Improvements 🙌: - - + - Add support for `/plain` command (#12) Bugfix 🐛: - Fix crash on attachment preview screen (#1088) diff --git a/vector/src/main/java/im/vector/riotx/features/command/Command.kt b/vector/src/main/java/im/vector/riotx/features/command/Command.kt index f39f1cb7cd..72f686c2c8 100644 --- a/vector/src/main/java/im/vector/riotx/features/command/Command.kt +++ b/vector/src/main/java/im/vector/riotx/features/command/Command.kt @@ -43,6 +43,7 @@ enum class Command(val command: String, val parameters: String, @StringRes val d SPOILER("/spoiler", "", R.string.command_description_spoiler), POLL("/poll", "Question | Option 1 | Option 2 ...", R.string.command_description_poll), SHRUG("/shrug", "", R.string.command_description_shrug), + PLAIN("/plain", "", R.string.command_description_plain), // TODO temporary command VERIFY_USER("/verify", "", R.string.command_description_verify); diff --git a/vector/src/main/java/im/vector/riotx/features/command/CommandParser.kt b/vector/src/main/java/im/vector/riotx/features/command/CommandParser.kt index abc047e273..875fe92610 100644 --- a/vector/src/main/java/im/vector/riotx/features/command/CommandParser.kt +++ b/vector/src/main/java/im/vector/riotx/features/command/CommandParser.kt @@ -57,6 +57,15 @@ object CommandParser { } return when (val slashCommand = messageParts.first()) { + Command.PLAIN.command -> { + val text = textMessage.substring(Command.PLAIN.command.length).trim() + + if (text.isNotEmpty()) { + ParsedCommand.SendPlainText(text) + } else { + ParsedCommand.ErrorSyntax(Command.PLAIN) + } + } Command.CHANGE_DISPLAY_NAME.command -> { val newDisplayName = textMessage.substring(Command.CHANGE_DISPLAY_NAME.command.length).trim() diff --git a/vector/src/main/java/im/vector/riotx/features/command/ParsedCommand.kt b/vector/src/main/java/im/vector/riotx/features/command/ParsedCommand.kt index d823429ac9..e4fee27ee6 100644 --- a/vector/src/main/java/im/vector/riotx/features/command/ParsedCommand.kt +++ b/vector/src/main/java/im/vector/riotx/features/command/ParsedCommand.kt @@ -33,6 +33,7 @@ sealed class ParsedCommand { // Valid commands: + class SendPlainText(val message: CharSequence) : ParsedCommand() class SendEmote(val message: CharSequence) : ParsedCommand() class SendRainbow(val message: CharSequence) : ParsedCommand() class SendRainbowEmote(val message: CharSequence) : ParsedCommand() diff --git a/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailViewModel.kt b/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailViewModel.kt index 8a231fb25d..1fcae90e95 100644 --- a/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailViewModel.kt +++ b/vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailViewModel.kt @@ -340,6 +340,12 @@ class RoomDetailViewModel @AssistedInject constructor(@Assisted initialState: Ro is ParsedCommand.ErrorUnknownSlashCommand -> { _viewEvents.post(RoomDetailViewEvents.SlashCommandUnknown(slashCommandResult.slashCommand)) } + is ParsedCommand.SendPlainText -> { + // Send the text message to the room, without markdown + room.sendTextMessage(slashCommandResult.message, autoMarkdown = false) + _viewEvents.post(RoomDetailViewEvents.MessageSent) + popDraft() + } is ParsedCommand.Invite -> { handleInviteSlashCommand(slashCommandResult) popDraft() diff --git a/vector/src/main/res/values/strings_riotX.xml b/vector/src/main/res/values/strings_riotX.xml index 00bf65e121..69d821c0ca 100644 --- a/vector/src/main/res/values/strings_riotX.xml +++ b/vector/src/main/res/values/strings_riotX.xml @@ -26,7 +26,7 @@ - + Sends a message as plain text, without interpreting it as markdown From 30e46445ca1c3f24324ce039febbdf32a5df5077 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 4 Mar 2020 09:35:09 +0100 Subject: [PATCH 13/16] Add documentation to install environment and run integration tests (#1098) Add documentation to install environment and run integration tests --- CONTRIBUTING.md | 2 + docs/integration_tests.md | 97 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 99 insertions(+) create mode 100644 docs/integration_tests.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8e08a921fb..176a6ee9c1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -82,6 +82,8 @@ Make sure the following commands execute without any error: RiotX is currently supported on Android KitKat (API 19+): please test your change on an Android device (or Android emulator) running with API 19. Many issues can happen (including crashes) on older devices. Also, if possible, please test your change on a real device. Testing on Android emulator may not be sufficient. +You should consider adding Unit tests with your PR, and also integration tests (AndroidTest). Please refer to [this document](./docs/integration_tests.md) to install and run the integration test environment. + ### Internationalisation When adding new string resources, please only add new entries in file `value/strings.xml`. Translations will be added later by the community of translators with a specific tool named [Weblate](https://translate.riot.im/projects/riot-android/). diff --git a/docs/integration_tests.md b/docs/integration_tests.md new file mode 100644 index 0000000000..f7557a87a2 --- /dev/null +++ b/docs/integration_tests.md @@ -0,0 +1,97 @@ +# Integration tests + +Integration tests are useful to ensure that the code works well for any use cases. + +They can also be used as sample on how to use the Matrix SDK. + +In a ideal world, every API of the SDK should be covered by integration tests. For the moment, we have test mainly for the Crypto part, which is the tricky part. But it covers quite a lot of features: accounts creation, login to existing account, send encrypted messages, keys backup, verification, etc. + +The Matrix SDK is able to open multiple sessions, for the same user, of for different users. This way we can test communication between several sessions on a single device. + +## Pre requirements + +Integration tests need a homeserver running on localhost. + +The documentation describes what we do to have one, using [Synapse](https://github.com/matrix-org/synapse/), which is the Matrix reference homeserver. + +## Install and run Synapse + +Steps: + +- Install virtualenv + +```bash +python3 -m pip install virtualenv +``` + +- Clone Synapse repository + +```bash +git clone -b develop https://github.com/matrix-org/synapse.git +``` +or +```bash +git clone -b develop git@github.com:matrix-org/synapse.git +``` + +You should have the develop branch cloned by default. + +- Run synapse, from the Synapse folder you just cloned + +```bash +virtualenv -p python3 env +source env/bin/activate +pip install -e . +demo/start.sh --no-rate-limit +``` + +Alternatively, to install the latest Synapse release package (and not a cloned branch) you can run the following instead of `pip install -e .`: + +```bash +pip install matrix-synapse +``` + +You should now have 3 running federated Synapse instances 🎉, at http://127.0.0.1:8080/, http://127.0.0.1:8081/ and http://127.0.0.1:8082/, which should display a "It Works! Synapse is running" message. + +## Run the test + +It's recommended to run tests using an Android Emulator and not a real device. First reason for that is that the tests will use http://10.0.2.2:8080 to connect to Synapse, which run locally on your machine. + +You can run all the tests in the `androidTest` folders. + +## Stop Synapse + +To stop Synapse, you can run the following commands: + +```bash +./demo/stop.sh +``` + +And you can deactivate the virtualenv: + +```bash +deactivate +``` + +## Troubleshoot + +You'll need python3 to be able to run synapse + +### Android Emulator does cannot reach the homeserver + +Try on the Emulator browser to open "http://10.0.2.2:8080". You should see the "Synapse is running" message. + +### virtualenv command fails + +You can try using +```bash +python3 -m venv env +``` +or +```bash +python3 -m virtualenv env +``` +instead of +```bash +virtualenv -p python3 env +``` From 0121eee5b83e36af7b2c97899198ec5f4ad834c5 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 4 Mar 2020 09:37:32 +0100 Subject: [PATCH 14/16] changelog --- CHANGES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index b2ad0766c4..37ff98758b 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -20,7 +20,7 @@ Build 🧱: - Other changes: - - + - Add a [documentation](./docs/integration_tests.md) to run integration tests Changes in RiotX 0.17.0 (2020-02-27) =================================================== From d6df0e451c585de1179ff8558ead6cead0636ad7 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 4 Mar 2020 10:37:31 +0100 Subject: [PATCH 15/16] Detect spaces in password if user fail to login (#1038) --- CHANGES.md | 1 + .../vector/riotx/features/login/LoginFragment.kt | 14 +++++++++++++- vector/src/main/res/values/strings_riotX.xml | 1 + 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 37ff98758b..0184981252 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -6,6 +6,7 @@ Features ✨: Improvements 🙌: - Add support for `/plain` command (#12) + - Detect spaces in password if user fail to login (#1038) Bugfix 🐛: - Fix crash on attachment preview screen (#1088) diff --git a/vector/src/main/java/im/vector/riotx/features/login/LoginFragment.kt b/vector/src/main/java/im/vector/riotx/features/login/LoginFragment.kt index 3e45eeb406..01cc19fa5b 100644 --- a/vector/src/main/java/im/vector/riotx/features/login/LoginFragment.kt +++ b/vector/src/main/java/im/vector/riotx/features/login/LoginFragment.kt @@ -209,7 +209,14 @@ class LoginFragment @Inject constructor() : AbstractLoginFragment() { } else { // Trick to display the error without text. loginFieldTil.error = " " - passwordFieldTil.error = errorFormatter.toHumanReadable(state.asyncLoginAction.error) + if (error is Failure.ServerError + && error.error.code == MatrixError.M_FORBIDDEN + && error.error.message == "Invalid password" + && spaceInPassword()) { + passwordFieldTil.error = getString(R.string.auth_invalid_login_param_space_in_password) + } else { + passwordFieldTil.error = errorFormatter.toHumanReadable(error) + } } } // Success is handled by the LoginActivity @@ -226,4 +233,9 @@ class LoginFragment @Inject constructor() : AbstractLoginFragment() { is Success -> Unit } } + + /** + * Detect if password ends or starts with spaces + */ + private fun spaceInPassword() = passwordField.text.toString().let { it.trim() != it } } diff --git a/vector/src/main/res/values/strings_riotX.xml b/vector/src/main/res/values/strings_riotX.xml index 69d821c0ca..579fdae874 100644 --- a/vector/src/main/res/values/strings_riotX.xml +++ b/vector/src/main/res/values/strings_riotX.xml @@ -29,4 +29,5 @@ Sends a message as plain text, without interpreting it as markdown + Incorrect username and/or password. The entered password starts or ends with spaces, please check it. From 78bc2bbaa5b2cdcc4380b568809952327daeac80 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 4 Mar 2020 12:15:33 +0100 Subject: [PATCH 16/16] AndroidStudio cleanup --- .idea/codeStyles/Project.xml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml index 40ee4ee5cf..b3719669fd 100644 --- a/.idea/codeStyles/Project.xml +++ b/.idea/codeStyles/Project.xml @@ -1,9 +1,6 @@