From 59fa2e28c2943e7b321ec44344de87b79c52cc40 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 27 Aug 2020 15:37:10 +0200 Subject: [PATCH 1/7] Fix sonar analysis version name issue --- vector/build.gradle | 3 +++ 1 file changed, 3 insertions(+) diff --git a/vector/build.gradle b/vector/build.gradle index ef2d6c3d9e..e55ad31ef3 100644 --- a/vector/build.gradle +++ b/vector/build.gradle @@ -122,6 +122,9 @@ android { // Other branches (master, features, etc.) will have version code based on application version. versionCode project.getVersionCode() + // Required for sonar analysis + versionName "${versionMajor}.${versionMinor}.${versionPatch}-sonar" + buildConfigField "String", "GIT_REVISION", "\"${gitRevision()}\"" resValue "string", "git_revision", "\"${gitRevision()}\"" From b69616117f7578cc5053b625fd32808c1819287d Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 27 Aug 2020 15:37:39 +0200 Subject: [PATCH 2/7] Sonar: skip project `diff-match-patch` --- build.gradle | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/build.gradle b/build.gradle index fdaef6a2f7..93ea529163 100644 --- a/build.gradle +++ b/build.gradle @@ -105,6 +105,12 @@ project(":vector") { } } +project(":diff-match-patch") { + sonarqube { + skipProject = true + } +} + //project(":matrix-sdk-android") { // sonarqube { // properties { From cd28ad4c07aad9bf3c60d69d5ff12816c8bec254 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 27 Aug 2020 15:51:28 +0200 Subject: [PATCH 3/7] Remove dead code (QrCode animation) --- .../app/features/debug/DebugMenuActivity.kt | 2 +- .../app/core/ui/views/QrCodeImageView.kt | 50 ++----------------- .../VerificationChooseMethodController.kt | 1 - .../BottomSheetVerificationQrCodeItem.kt | 5 +- 4 files changed, 5 insertions(+), 53 deletions(-) diff --git a/vector/src/debug/java/im/vector/app/features/debug/DebugMenuActivity.kt b/vector/src/debug/java/im/vector/app/features/debug/DebugMenuActivity.kt index 855333d96b..5590e19c10 100644 --- a/vector/src/debug/java/im/vector/app/features/debug/DebugMenuActivity.kt +++ b/vector/src/debug/java/im/vector/app/features/debug/DebugMenuActivity.kt @@ -68,7 +68,7 @@ class DebugMenuActivity : VectorBaseActivity() { } private fun renderQrCode(text: String) { - debug_qr_code.setData(text, true) + debug_qr_code.setData(text) } @OnClick(R.id.debug_test_text_view_link) diff --git a/vector/src/main/java/im/vector/app/core/ui/views/QrCodeImageView.kt b/vector/src/main/java/im/vector/app/core/ui/views/QrCodeImageView.kt index 11e319ab78..f4b371bc52 100644 --- a/vector/src/main/java/im/vector/app/core/ui/views/QrCodeImageView.kt +++ b/vector/src/main/java/im/vector/app/core/ui/views/QrCodeImageView.kt @@ -18,28 +18,23 @@ package im.vector.app.core.ui.views import android.content.Context import android.graphics.Color -import android.graphics.drawable.AnimationDrawable -import android.graphics.drawable.BitmapDrawable import android.util.AttributeSet import androidx.appcompat.widget.AppCompatImageView import im.vector.app.core.qrcode.toBitMatrix import im.vector.app.core.qrcode.toBitmap -import kotlin.random.Random class QrCodeImageView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 ) : AppCompatImageView(context, attrs, defStyleAttr) { private var data: String? = null - private var animate = false init { setBackgroundColor(Color.WHITE) } - fun setData(data: String, animate: Boolean) { + fun setData(data: String) { this.data = data - this.animate = animate render() } @@ -53,47 +48,8 @@ class QrCodeImageView @JvmOverloads constructor( data ?.takeIf { height > 0 } ?.let { - if (animate) { - // NOT SUPPORTED YET val anim = createAnimation(it) - // NOT SUPPORTED YET setImageDrawable(anim) - // NOT SUPPORTED YET anim.start() - // NOT SUPPORTED YET setImageDrawable(BitmapDrawable(resources, it.toBitMatrix(height).toBitmap())) - val bitmap = it.toBitMatrix(height).toBitmap() - post { setImageBitmap(bitmap) } - } else { - val bitmap = it.toBitMatrix(height).toBitmap() - post { setImageBitmap(bitmap) } - } + val bitmap = it.toBitMatrix(height).toBitmap() + post { setImageBitmap(bitmap) } } } - - private fun createAnimation(data: String): AnimationDrawable { - val finalQr = data.toBitMatrix(height) - - val list = mutableListOf(finalQr) - - val random = Random(System.currentTimeMillis()) - val repeatTime = 8 - repeat(repeatTime) { index -> - val alteredQr = finalQr.clone() - for (x in 0 until alteredQr.width) { - for (y in 0 until alteredQr.height) { - if (random.nextInt(repeatTime - index) == 0) { - // Pb is that it does not toggle a whole black square, but only a pixel - alteredQr.unset(x, y) - } - } - } - list.add(alteredQr) - } - - val animDrawable = AnimationDrawable() - - list.asReversed() - .forEach { - animDrawable.addFrame(BitmapDrawable(resources, it.toBitmap()), 150) - } - - return animDrawable - } } diff --git a/vector/src/main/java/im/vector/app/features/crypto/verification/choose/VerificationChooseMethodController.kt b/vector/src/main/java/im/vector/app/features/crypto/verification/choose/VerificationChooseMethodController.kt index 953b20cb0c..0406a63bc6 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/verification/choose/VerificationChooseMethodController.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/verification/choose/VerificationChooseMethodController.kt @@ -53,7 +53,6 @@ class VerificationChooseMethodController @Inject constructor( bottomSheetVerificationQrCodeItem { id("qr") data(state.qrCodeText) - animate(false) } dividerItem { diff --git a/vector/src/main/java/im/vector/app/features/crypto/verification/epoxy/BottomSheetVerificationQrCodeItem.kt b/vector/src/main/java/im/vector/app/features/crypto/verification/epoxy/BottomSheetVerificationQrCodeItem.kt index 8d78c1c9d6..41c92fa76f 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/verification/epoxy/BottomSheetVerificationQrCodeItem.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/verification/epoxy/BottomSheetVerificationQrCodeItem.kt @@ -32,12 +32,9 @@ abstract class BottomSheetVerificationQrCodeItem : VectorEpoxyModel Date: Thu, 27 Aug 2020 17:38:35 +0200 Subject: [PATCH 4/7] Remove commented out code and useless code --- .../settings/VectorSettingsLabsFragment.kt | 100 +----------------- 1 file changed, 1 insertion(+), 99 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsLabsFragment.kt b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsLabsFragment.kt index c8cf44778c..6a4ea83d68 100644 --- a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsLabsFragment.kt +++ b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsLabsFragment.kt @@ -17,7 +17,6 @@ package im.vector.app.features.settings import im.vector.app.R -import im.vector.app.core.preference.VectorSwitchPreference import javax.inject.Inject class VectorSettingsLabsFragment @Inject constructor( @@ -28,103 +27,6 @@ class VectorSettingsLabsFragment @Inject constructor( override val preferenceXmlRes = R.xml.vector_settings_labs override fun bindPref() { - // Lab - - findPreference(VectorPreferences.SETTINGS_LABS_ALLOW_EXTENDED_LOGS)?.let { - it.isChecked = vectorPreferences.labAllowedExtendedLogging() - } - - findPreference(VectorPreferences.SETTINGS_LABS_UNREAD_NOTIFICATIONS_AS_TAB)?.let { - it.isChecked = vectorPreferences.labAddNotificationTab() - } - -// val useCryptoPref = findPreference(VectorPreferences.SETTINGS_ROOM_SETTINGS_LABS_END_TO_END_PREFERENCE_KEY) as SwitchPreference -// val cryptoIsEnabledPref = findPreference(VectorPreferences.SETTINGS_ROOM_SETTINGS_LABS_END_TO_END_IS_ACTIVE_PREFERENCE_KEY) - - if (session.cryptoService().isCryptoEnabled()) { -// mLabsCategory.removePreference(useCryptoPref) -// -// cryptoIsEnabledPref.isEnabled = false - } else { -// mLabsCategory.removePreference(cryptoIsEnabledPref) -// -// useCryptoPref.isChecked = false -// -// useCryptoPref.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, newValueAsVoid -> -// if (TextUtils.isEmpty(mSession.sessionParams.deviceId)) { -// activity?.let { activity -> -// AlertDialog.Builder(activity) -// .setMessage(R.string.room_settings_labs_end_to_end_warnings) -// .setPositiveButton(R.string.logout) { _, _ -> -// notImplemented() -// // TODO CommonActivityUtils.logout(activity) -// } -// .setNegativeButton(R.string.cancel) { _, _ -> -// useCryptoPref.isChecked = false -// } -// .setOnCancelListener { -// useCryptoPref.isChecked = false -// } -// .show() -// } -// } else { -// val newValue = newValueAsVoid as Boolean -// -// if (mSession.isCryptoEnabled() != newValue) { -// notImplemented() -// /* TODO -// displayLoadingView() -// -// session.enableCrypto(newValue, object : MatrixCallback { -// private fun refresh() { -// activity?.runOnUiThread { -// hideLoadingView() -// useCryptoPref.isChecked = session.isCryptoEnabled -// -// if (session.isCryptoEnabled) { -// mLabsCategory.removePreference(useCryptoPref) -// mLabsCategory.addPreference(cryptoIsEnabledPref) -// } -// } -// } -// -// override fun onSuccess(info: Void?) { -// useCryptoPref.isEnabled = false -// refresh() -// } -// -// override fun onNetworkError(e: Exception) { -// useCryptoPref.isChecked = false -// } -// -// override fun onMatrixError(e: MatrixError) { -// useCryptoPref.isChecked = false -// } -// -// override fun onUnexpectedError(e: Exception) { -// useCryptoPref.isChecked = false -// } -// }) -// */ -// } -// } -// -// true -// } - } - - // SaveMode Management -// findPreference(VectorPreferences.SETTINGS_DATA_SAVE_MODE_PREFERENCE_KEY) -// .onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, newValue -> -// notImplemented() -// /* TODO -// val sessions = Matrix.getMXSessions(activity) -// for (session in sessions) { -// session.setUseDataSaveMode(newValue as Boolean) -// } -// */ -// -// true -// } + // Nothing to do } } From a857d8e3063ab4e36d659869554c575d30c9dd29 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 27 Aug 2020 17:39:09 +0200 Subject: [PATCH 5/7] Fix bugs detected by sonar --- build.gradle | 3 ++- .../roompreview/RoomPreviewActivity.kt | 2 ++ .../devices/VectorSettingsDevicesFragment.kt | 13 +++++++------ 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/build.gradle b/build.gradle index 93ea529163..aa941e1445 100644 --- a/build.gradle +++ b/build.gradle @@ -100,7 +100,8 @@ project(":vector") { properties { property "sonar.sources", project(":vector").android.sourceSets.main.java.srcDirs // exclude source code from analyses separated by a colon (:) - // property "sonar.exclusions", "**/*.*" + // Exclude Java source + property "sonar.exclusions", "**/BugReporterMultipartBody.java" } } } diff --git a/vector/src/main/java/im/vector/app/features/roomdirectory/roompreview/RoomPreviewActivity.kt b/vector/src/main/java/im/vector/app/features/roomdirectory/roompreview/RoomPreviewActivity.kt index 8bbaa14ab0..4876bd7f98 100644 --- a/vector/src/main/java/im/vector/app/features/roomdirectory/roompreview/RoomPreviewActivity.kt +++ b/vector/src/main/java/im/vector/app/features/roomdirectory/roompreview/RoomPreviewActivity.kt @@ -28,6 +28,7 @@ import kotlinx.android.parcel.Parcelize import org.matrix.android.sdk.api.session.room.model.roomdirectory.PublicRoom import org.matrix.android.sdk.api.session.room.model.thirdparty.RoomDirectoryData import org.matrix.android.sdk.api.util.MatrixItem +import timber.log.Timber @Parcelize data class RoomPreviewData( @@ -83,6 +84,7 @@ class RoomPreviewActivity : VectorBaseActivity(), ToolbarConfigurable { if (args?.worldReadable == true) { // TODO Room preview: Note: M does not recommend to use /events anymore, so for now we just display the room preview // TODO the same way if it was not world readable + Timber.d("just display the room preview the same way if it was not world readable") addFragment(R.id.simpleFragmentContainer, RoomPreviewNoPreviewFragment::class.java, args) } else { addFragment(R.id.simpleFragmentContainer, RoomPreviewNoPreviewFragment::class.java, args) diff --git a/vector/src/main/java/im/vector/app/features/settings/devices/VectorSettingsDevicesFragment.kt b/vector/src/main/java/im/vector/app/features/settings/devices/VectorSettingsDevicesFragment.kt index b33a0cb5d8..bc72f812ff 100644 --- a/vector/src/main/java/im/vector/app/features/settings/devices/VectorSettingsDevicesFragment.kt +++ b/vector/src/main/java/im/vector/app/features/settings/devices/VectorSettingsDevicesFragment.kt @@ -48,7 +48,8 @@ class VectorSettingsDevicesFragment @Inject constructor( ) : VectorBaseFragment(), DevicesController.Callback { // used to avoid requesting to enter the password for each deletion - private var mAccountPassword: String = "" + // Note: Sonar does not like to use password for member name. + private var mAccountPass: String = "" override fun getLayoutResId() = R.layout.fragment_generic_recycler @@ -91,7 +92,7 @@ class VectorSettingsDevicesFragment @Inject constructor( super.showFailure(throwable) // Password is maybe not good, for safety measure, reset it here - mAccountPassword = "" + mAccountPass = "" } override fun onDestroyView() { @@ -153,12 +154,12 @@ class VectorSettingsDevicesFragment @Inject constructor( * Show a dialog to ask for user password, or use a previously entered password. */ private fun maybeShowDeleteDeviceWithPasswordDialog() { - if (mAccountPassword.isNotEmpty()) { - viewModel.handle(DevicesAction.Password(mAccountPassword)) + if (mAccountPass.isNotEmpty()) { + viewModel.handle(DevicesAction.Password(mAccountPass)) } else { PromptPasswordDialog().show(requireActivity()) { password -> - mAccountPassword = password - viewModel.handle(DevicesAction.Password(mAccountPassword)) + mAccountPass = password + viewModel.handle(DevicesAction.Password(mAccountPass)) } } } From 02145eaa06ac153ca5f9b2e44ac0ca54e6d88c5c Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 27 Aug 2020 17:43:22 +0200 Subject: [PATCH 6/7] Github repository has been renamed --- .github/PULL_REQUEST_TEMPLATE.md | 2 +- AUTHORS.md | 2 +- README.md | 2 +- build.gradle | 6 +++--- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 77dffb43d2..34d7b40a88 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,6 +1,6 @@ ### Pull Request Checklist - + - [ ] Changes has been tested on an Android device or Android emulator with API 21 - [ ] UI change has been tested on both light and dark themes diff --git a/AUTHORS.md b/AUTHORS.md index 3d9dffbef5..a85beb2d6f 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -1,4 +1,4 @@ -A full developer contributors list can be found [here](https://github.com/vector-im/riotX-android/graphs/contributors). +A full developer contributors list can be found [here](https://github.com/vector-im/element-android/graphs/contributors). # Core team: diff --git a/README.md b/README.md index 1ec425793f..ab1a121792 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,6 @@ The team will work to add them on a regular basis. ## Contributing -Please refer to [CONTRIBUTING.md](https://github.com/vector-im/riotX-android/blob/develop/CONTRIBUTING.md) if you want to contribute on Matrix Android projects! +Please refer to [CONTRIBUTING.md](https://github.com/vector-im/element-android/blob/develop/CONTRIBUTING.md) if you want to contribute on Matrix Android projects! Come chat with the community in the dedicated Matrix [room](https://matrix.to/#/#element-android:matrix.org). diff --git a/build.gradle b/build.gradle index aa941e1445..84fa1cd713 100644 --- a/build.gradle +++ b/build.gradle @@ -86,10 +86,10 @@ sonarqube { property "sonar.host.url", "https://sonarcloud.io" property "sonar.projectVersion", project(":vector").android.defaultConfig.versionName property "sonar.sourceEncoding", "UTF-8" - property "sonar.links.homepage", "https://github.com/vector-im/riotX-android/" + property "sonar.links.homepage", "https://github.com/vector-im/element-android/" property "sonar.links.ci", "https://buildkite.com/matrix-dot-org/riotx-android" - property "sonar.links.scm", "https://github.com/vector-im/riotX-android/" - property "sonar.links.issue", "https://github.com/vector-im/riotX-android/issues" + property "sonar.links.scm", "https://github.com/vector-im/element-android/" + property "sonar.links.issue", "https://github.com/vector-im/element-android/issues" property "sonar.organization", "new_vector_ltd_organization" property "sonar.login", project.hasProperty("SONAR_LOGIN") ? SONAR_LOGIN : "invalid" } From 8369003bdf517cad85bf819c992277b0d473ad9d Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 27 Aug 2020 17:48:19 +0200 Subject: [PATCH 7/7] Sonar: rename project name and project key --- README.md | 6 +++--- build.gradle | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index ab1a121792..457b18d775 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ [![Buildkite](https://badge.buildkite.com/657d3db27364448d69d54f66c690f7788bc6aa80a7628e37f3.svg?branch=develop)](https://buildkite.com/matrix-dot-org/riotx-android/builds?branch=develop) [![Weblate](https://translate.riot.im/widgets/element-android/-/svg-badge.svg)](https://translate.riot.im/engage/element-android/?utm_source=widget) [![Element Android Matrix room #element-android:matrix.org](https://img.shields.io/matrix/element-android:matrix.org.svg?label=%23element-android:matrix.org&logo=matrix&server_fqdn=matrix.org)](https://matrix.to/#/#element-android:matrix.org) -[![Quality Gate](https://sonarcloud.io/api/project_badges/measure?project=vector.android.riotx&metric=alert_status)](https://sonarcloud.io/dashboard?id=vector.android.riotx) -[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=vector.android.riotx&metric=vulnerabilities)](https://sonarcloud.io/dashboard?id=vector.android.riotx) -[![Bugs](https://sonarcloud.io/api/project_badges/measure?project=vector.android.riotx&metric=bugs)](https://sonarcloud.io/dashboard?id=vector.android.riotx) +[![Quality Gate](https://sonarcloud.io/api/project_badges/measure?project=im.vector.app.android&metric=alert_status)](https://sonarcloud.io/dashboard?id=im.vector.app.android) +[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=im.vector.app.android&metric=vulnerabilities)](https://sonarcloud.io/dashboard?id=im.vector.app.android) +[![Bugs](https://sonarcloud.io/api/project_badges/measure?project=im.vector.app.android&metric=bugs)](https://sonarcloud.io/dashboard?id=im.vector.app.android) # Element Android diff --git a/build.gradle b/build.gradle index 84fa1cd713..061dd73a40 100644 --- a/build.gradle +++ b/build.gradle @@ -81,8 +81,8 @@ apply plugin: 'org.sonarqube' sonarqube { properties { - property "sonar.projectName", "RiotX-Android" - property "sonar.projectKey", "vector.android.riotx" + property "sonar.projectName", "Element-Android" + property "sonar.projectKey", "im.vector.app.android" property "sonar.host.url", "https://sonarcloud.io" property "sonar.projectVersion", project(":vector").android.defaultConfig.versionName property "sonar.sourceEncoding", "UTF-8"