diff --git a/app/src/gplay/java/com/nextcloud/talk/services/firebase/MagicFirebaseMessagingService.kt b/app/src/gplay/java/com/nextcloud/talk/services/firebase/MagicFirebaseMessagingService.kt index 6c0e0bffe..6a24dab79 100644 --- a/app/src/gplay/java/com/nextcloud/talk/services/firebase/MagicFirebaseMessagingService.kt +++ b/app/src/gplay/java/com/nextcloud/talk/services/firebase/MagicFirebaseMessagingService.kt @@ -81,7 +81,9 @@ import javax.inject.Inject @SuppressLint("LongLogTag") @AutoInjector(NextcloudTalkApplication::class) class MagicFirebaseMessagingService : FirebaseMessagingService() { - private val TAG = "MagicFirebaseMessagingService" + companion object { + const val TAG = "MagicFirebaseMessagingService" + } @JvmField @Inject @@ -147,6 +149,7 @@ class MagicFirebaseMessagingService : FirebaseMessagingService() { } } + @Suppress("Detekt.TooGenericExceptionCaught") private fun decryptMessage(subject: String, signature: String) { try { val base64DecodedSubject = Base64.decode(subject, Base64.DEFAULT) @@ -283,6 +286,7 @@ class MagicFirebaseMessagingService : FirebaseMessagingService() { .subscribeOn(Schedulers.io()) .subscribe(object : Observer { override fun onSubscribe(d: Disposable) { + // unused atm } override fun onNext(participantsOverall: ParticipantsOverall) { diff --git a/app/src/gplay/java/com/nextcloud/talk/utils/ClosedInterfaceImpl.kt b/app/src/gplay/java/com/nextcloud/talk/utils/ClosedInterfaceImpl.kt index 83edacd4a..1a4d25ccb 100644 --- a/app/src/gplay/java/com/nextcloud/talk/utils/ClosedInterfaceImpl.kt +++ b/app/src/gplay/java/com/nextcloud/talk/utils/ClosedInterfaceImpl.kt @@ -52,9 +52,11 @@ class ClosedInterfaceImpl : ClosedInterface, ProviderInstaller.ProviderInstallLi } override fun onProviderInstalled() { + // unused atm } override fun onProviderInstallFailed(p0: Int, p1: Intent?) { + // unused atm } private fun isGPlayServicesAvailable(): Boolean { diff --git a/app/src/main/java/com/nextcloud/talk/activities/MainActivity.kt b/app/src/main/java/com/nextcloud/talk/activities/MainActivity.kt index 231082239..c46d755e8 100644 --- a/app/src/main/java/com/nextcloud/talk/activities/MainActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/activities/MainActivity.kt @@ -87,6 +87,7 @@ class MainActivity : BaseActivity(), ActionBarProvider { private var router: Router? = null + @Suppress("Detekt.TooGenericExceptionCaught") override fun onCreate(savedInstanceState: Bundle?) { Log.d(TAG, "onCreate: Activity: " + System.identityHashCode(this).toString()) diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingLocationMessageViewHolder.kt b/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingLocationMessageViewHolder.kt index b55017140..3c1d70d53 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingLocationMessageViewHolder.kt +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingLocationMessageViewHolder.kt @@ -53,6 +53,7 @@ import com.nextcloud.talk.models.json.chat.ChatMessage import com.nextcloud.talk.ui.bottom.sheet.ProfileBottomSheet import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.DisplayUtils +import com.nextcloud.talk.utils.UriUtils import com.nextcloud.talk.utils.preferences.AppPreferences import com.stfalcon.chatkit.messages.MessageHolders import java.net.URLEncoder @@ -218,7 +219,7 @@ class IncomingLocationMessageViewHolder(incomingView: View, payload: Any) : Mess binding.webview.webViewClient = object : WebViewClient() { override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean { - return if (url != null && (url.startsWith("http://") || url.startsWith("https://")) + return if (url != null && UriUtils.hasHttpProtocollPrefixed(url) ) { view?.context?.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url))) true diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingLocationMessageViewHolder.kt b/app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingLocationMessageViewHolder.kt index 6ef0c283b..3a0fe3a6a 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingLocationMessageViewHolder.kt +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingLocationMessageViewHolder.kt @@ -47,6 +47,7 @@ import com.nextcloud.talk.models.json.chat.ChatMessage import com.nextcloud.talk.models.json.chat.ReadStatus import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.DisplayUtils +import com.nextcloud.talk.utils.UriUtils import com.stfalcon.chatkit.messages.MessageHolders import java.net.URLEncoder import javax.inject.Inject @@ -131,7 +132,7 @@ class OutcomingLocationMessageViewHolder(incomingView: View) : MessageHolders binding.webview.webViewClient = object : WebViewClient() { override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean { - return if (url != null && (url.startsWith("http://") || url.startsWith("https://")) + return if (url != null && UriUtils.hasHttpProtocollPrefixed(url) ) { view?.context?.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url))) true diff --git a/app/src/main/java/com/nextcloud/talk/controllers/AccountVerificationController.kt b/app/src/main/java/com/nextcloud/talk/controllers/AccountVerificationController.kt index 9380395b4..3074aaa9d 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/AccountVerificationController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/AccountVerificationController.kt @@ -48,6 +48,7 @@ import com.nextcloud.talk.models.json.generic.Status import com.nextcloud.talk.models.json.userprofile.UserProfileOverall import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.ClosedInterfaceImpl +import com.nextcloud.talk.utils.UriUtils import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_BASE_URL import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_INTERNAL_USER_ID import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_IS_ACCOUNT_IMPORT @@ -112,11 +113,10 @@ class AccountVerificationController(args: Bundle? = null) : actionBar?.hide() - if (isAccountImport && - !baseUrl!!.startsWith("http://") && - !baseUrl!!.startsWith("https://") || - !TextUtils.isEmpty(originalProtocol!!) && - !baseUrl!!.startsWith(originalProtocol!!) + if ( + isAccountImport && + !UriUtils.hasHttpProtocollPrefixed(baseUrl!!) || + isSameProtocol(baseUrl!!, originalProtocol!!) ) { determineBaseUrlProtocol(true) } else { @@ -124,6 +124,10 @@ class AccountVerificationController(args: Bundle? = null) : } } + private fun isSameProtocol(baseUrl: String, originalProtocol: String): Boolean { + return !TextUtils.isEmpty(originalProtocol) && !baseUrl.startsWith(originalProtocol) + } + private fun checkEverything() { val credentials = ApiUtils.getCredentials(username, token) cookieManager.cookieStore.removeAll() @@ -176,7 +180,9 @@ class AccountVerificationController(args: Bundle? = null) : } } - override fun onComplete() {} + override fun onComplete() { + // unused atm + } }) } @@ -231,7 +237,9 @@ class AccountVerificationController(args: Bundle? = null) : abortVerification() } - override fun onComplete() {} + override fun onComplete() { + // unused atm + } }) } @@ -275,7 +283,9 @@ class AccountVerificationController(args: Bundle? = null) : abortVerification() } - override fun onComplete() {} + override fun onComplete() { + // unused atm + } }) } @@ -328,7 +338,9 @@ class AccountVerificationController(args: Bundle? = null) : abortVerification() } - override fun onComplete() {} + override fun onComplete() { + // unused atm + } }) } @@ -457,12 +469,16 @@ class AccountVerificationController(args: Bundle? = null) : if (!isAccountImport) { if (internalAccountId != -1L) { userUtils.deleteUserWithId(internalAccountId).subscribe(object : CompletableObserver { - override fun onSubscribe(d: Disposable) {} + override fun onSubscribe(d: Disposable) { + // unused atm + } override fun onComplete() { activity?.runOnUiThread { Handler().postDelayed({ router.popToRoot() }, 7500) } } - override fun onError(e: Throwable) {} + override fun onError(e: Throwable) { + // unused atm + } }) } else { activity?.runOnUiThread { Handler().postDelayed({ router.popToRoot() }, 7500) } diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt index 185d23acd..2343f89da 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt @@ -433,7 +433,9 @@ class ChatController(args: Bundle) : } } - override fun onFailureImpl(dataSource: DataSource>) {} + override fun onFailureImpl(dataSource: DataSource>) { + // unused atm + } }, UiThreadImmediateExecutorService.getInstance() ) @@ -630,6 +632,7 @@ class ChatController(args: Bundle) : binding.messageInputView.inputEditText?.addTextChangedListener(object : TextWatcher { override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) { + // unused atm } @Suppress("Detekt.TooGenericExceptionCaught") @@ -1602,12 +1605,7 @@ class ChatController(args: Bundle) : activity?.findViewById(R.id.toolbar)?.setOnClickListener(null) } - if (conversationUser != null && - activity != null && - !activity?.isChangingConfigurations!! && - !ApplicationWideCurrentRoomHolder.getInstance().isInCall && - !ApplicationWideCurrentRoomHolder.getInstance().isDialing - ) { + if (conversationUser != null && isActivityNotChangingConfigurations() && isNotInCall()) { ApplicationWideCurrentRoomHolder.getInstance().clear() if (inConversation && validSessionId()) { leaveRoom() @@ -1619,6 +1617,15 @@ class ChatController(args: Bundle) : } } + private fun isActivityNotChangingConfigurations(): Boolean { + return activity != null && !activity?.isChangingConfigurations!! + } + + private fun isNotInCall(): Boolean { + return !ApplicationWideCurrentRoomHolder.getInstance().isInCall && + !ApplicationWideCurrentRoomHolder.getInstance().isDialing + } + override val title: String get() = if (currentConversation?.displayName != null) { @@ -2115,11 +2122,9 @@ class ChatController(args: Bundle) : for (i in chatMessageList.indices) { if (chatMessageList.size > i + 1) { - if (TextUtils.isEmpty(chatMessageList[i].systemMessage) && - TextUtils.isEmpty(chatMessageList[i + 1].systemMessage) && + if (isSameDayNonSystemMessages(chatMessageList[i], chatMessageList[i + 1]) && chatMessageList[i + 1].actorId == chatMessageList[i].actorId && - countGroupedMessages < 4 && - DateFormatter.isSameDay(chatMessageList[i].createdAt, chatMessageList[i + 1].createdAt) + countGroupedMessages < 4 ) { chatMessageList[i].isGrouped = true countGroupedMessages++ @@ -2251,6 +2256,12 @@ class ChatController(args: Bundle) : } } + private fun isSameDayNonSystemMessages(messageLeft: ChatMessage, messageRight: ChatMessage): Boolean { + return TextUtils.isEmpty(messageLeft.systemMessage) && + TextUtils.isEmpty(messageRight.systemMessage) && + DateFormatter.isSameDay(messageLeft.createdAt, messageRight.createdAt) + } + override fun onLoadMore(page: Int, totalItemsCount: Int) { if (!historyRead && inConversation) { pullChatMessages(0) diff --git a/app/src/main/java/com/nextcloud/talk/controllers/LocationPickerController.kt b/app/src/main/java/com/nextcloud/talk/controllers/LocationPickerController.kt index a4654d3f8..87618c774 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/LocationPickerController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/LocationPickerController.kt @@ -213,6 +213,7 @@ class LocationPickerController(args: Bundle) : return true } + @Suppress("Detekt.TooGenericExceptionCaught") private fun initMap() { binding.map.setTileSource(TileSourceFactory.MAPNIK) binding.map.onResume() diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ServerSelectionController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ServerSelectionController.kt index bd5d228a1..2058a6a1b 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ServerSelectionController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/ServerSelectionController.kt @@ -48,6 +48,7 @@ import com.nextcloud.talk.utils.AccountUtils.findAccounts import com.nextcloud.talk.utils.AccountUtils.getAppNameBasedOnPackage import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.DisplayUtils +import com.nextcloud.talk.utils.UriUtils import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_IS_ACCOUNT_IMPORT import com.nextcloud.talk.utils.database.user.UserUtils import com.nextcloud.talk.utils.singletons.ApplicationWideMessageHolder @@ -197,7 +198,7 @@ class ServerSelectionController : NewBaseController(R.layout.controller_server_s url = url.substring(0, url.length - 1) } val queryUrl = url + ApiUtils.getUrlPostfixForStatus() - if (url.startsWith("http://") || url.startsWith("https://")) { + if (UriUtils.hasHttpProtocollPrefixed(url)) { checkServer(queryUrl, false) } else { checkServer("https://$queryUrl", true) @@ -212,9 +213,7 @@ class ServerSelectionController : NewBaseController(R.layout.controller_server_s val productName = resources!!.getString(R.string.nc_server_product_name) val versionString: String = status.getVersion().substring(0, status.getVersion().indexOf(".")) val version: Int = versionString.toInt() - if (status.isInstalled && !status.isMaintenance && - !status.isNeedsUpgrade && version >= 13 - ) { + if (isServerStatusQueryable(status) && version >= 13) { router.pushController( RouterTransaction.with( WebViewLoginController( @@ -284,6 +283,10 @@ class ServerSelectionController : NewBaseController(R.layout.controller_server_s } } + private fun isServerStatusQueryable(status: Status): Boolean { + return status.isInstalled && !status.isMaintenance && !status.isNeedsUpgrade + } + private fun setErrorText(text: String) { binding.errorText.text = text binding.errorText.visibility = View.VISIBLE diff --git a/app/src/main/java/com/nextcloud/talk/controllers/SwitchAccountController.kt b/app/src/main/java/com/nextcloud/talk/controllers/SwitchAccountController.kt index d613ce8cc..dbf071560 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/SwitchAccountController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/SwitchAccountController.kt @@ -94,7 +94,9 @@ class SwitchAccountController(args: Bundle? = null) : null, java.lang.Boolean.TRUE, null, userEntity.id, null, null, null ) .subscribe(object : Observer { - override fun onSubscribe(d: Disposable) {} + override fun onSubscribe(d: Disposable) { + // unused atm + } override fun onNext(userEntity: UserEntity) { cookieManager.cookieStore.removeAll() userUtils.disableAllUsersWithoutId(userEntity.id) @@ -103,8 +105,12 @@ class SwitchAccountController(args: Bundle? = null) : } } - override fun onError(e: Throwable) {} - override fun onComplete() {} + override fun onError(e: Throwable) { + // unused atm + } + override fun onComplete() { + // unused atm + } }) } true diff --git a/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/EntryMenuController.kt b/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/EntryMenuController.kt index 711011cb2..1aaf44e0a 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/EntryMenuController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/EntryMenuController.kt @@ -46,10 +46,12 @@ import com.nextcloud.talk.controllers.util.viewBinding import com.nextcloud.talk.databinding.ControllerEntryMenuBinding import com.nextcloud.talk.models.json.conversations.Conversation import com.nextcloud.talk.utils.ShareUtils +import com.nextcloud.talk.utils.UriUtils import com.nextcloud.talk.utils.bundle.BundleKeys import com.nextcloud.talk.utils.database.user.UserUtils import com.nextcloud.talk.utils.singletons.ApplicationWideMessageHolder import com.vanniktech.emoji.EmojiPopup +import okhttp3.internal.immutableListOf import org.greenrobot.eventbus.EventBus import org.parceler.Parcels import org.parceler.Parcels.unwrap @@ -114,8 +116,14 @@ class EntryMenuController(args: Bundle) : } binding.textEdit.addTextChangedListener(object : TextWatcher { - override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {} - override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {} + override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) { + // unused atm + } + + override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) { + // unused atm + } + override fun afterTextChanged(s: Editable) { if (!TextUtils.isEmpty(s)) { if (operation === ConversationOperationEnum.OPS_CODE_RENAME_ROOM) { @@ -139,10 +147,7 @@ class EntryMenuController(args: Bundle) : } binding.textInputLayout.isErrorEnabled = false } else if ( - ( - binding.textEdit.text.toString().startsWith("http://") || - binding.textEdit.text.toString().startsWith("https://") - ) && + UriUtils.hasHttpProtocollPrefixed(binding.textEdit.text.toString()) && binding.textEdit.text.toString().contains("/call/") ) { if (!binding.okButton.isEnabled) { @@ -211,15 +216,12 @@ class EntryMenuController(args: Bundle) : else -> { } } - if (operation === ConversationOperationEnum.OPS_CODE_JOIN_ROOM || - operation === ConversationOperationEnum.OPS_CODE_CHANGE_PASSWORD || - operation === ConversationOperationEnum.OPS_CODE_SET_PASSWORD || - operation === ConversationOperationEnum.OPS_CODE_SHARE_LINK - ) { + if (PASSWORD_ENTRY_OPERATIONS.contains(operation)) { binding.textInputLayout.endIconMode = TextInputLayout.END_ICON_PASSWORD_TOGGLE } else { binding.textInputLayout.endIconMode = TextInputLayout.END_ICON_NONE } + binding.textInputLayout.hint = labelText binding.textInputLayout.requestFocus() @@ -323,4 +325,14 @@ class EntryMenuController(args: Bundle) : packageName = args.getString(BundleKeys.KEY_APP_ITEM_PACKAGE_NAME, "") callUrl = args.getString(BundleKeys.KEY_CALL_URL, "") } + + companion object { + private val PASSWORD_ENTRY_OPERATIONS: List = + immutableListOf( + ConversationOperationEnum.OPS_CODE_JOIN_ROOM, + ConversationOperationEnum.OPS_CODE_CHANGE_PASSWORD, + ConversationOperationEnum.OPS_CODE_SET_PASSWORD, + ConversationOperationEnum.OPS_CODE_SHARE_LINK + ) + } } diff --git a/app/src/main/java/com/nextcloud/talk/jobs/ContactAddressBookWorker.kt b/app/src/main/java/com/nextcloud/talk/jobs/ContactAddressBookWorker.kt index 7ac98967f..c1c96472b 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/ContactAddressBookWorker.kt +++ b/app/src/main/java/com/nextcloud/talk/jobs/ContactAddressBookWorker.kt @@ -129,9 +129,11 @@ class ContactAddressBookWorker(val context: Context, workerParameters: WorkerPar .observeOn(AndroidSchedulers.mainThread()) .subscribe(object : Observer { override fun onComplete() { + // unused atm } override fun onSubscribe(d: Disposable) { + // unused atm } override fun onNext(foundContacts: ContactsByNumberOverall) { diff --git a/app/src/main/java/com/nextcloud/talk/jobs/UploadAndShareFilesWorker.kt b/app/src/main/java/com/nextcloud/talk/jobs/UploadAndShareFilesWorker.kt index ee7f29db1..3a5f24afb 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/UploadAndShareFilesWorker.kt +++ b/app/src/main/java/com/nextcloud/talk/jobs/UploadAndShareFilesWorker.kt @@ -99,10 +99,18 @@ class UploadAndShareFilesWorker(val context: Context, workerParameters: WorkerPa checkNotNull(roomToken) for (index in sourcefiles.indices) { - val sourcefileUri = Uri.parse(sourcefiles[index]) - val filename = UriUtils.getFileName(sourcefileUri, context) - val requestBody = createRequestBody(sourcefileUri) - uploadFile(currentUser, ncTargetpath, filename, roomToken, requestBody, sourcefileUri, metaData) + val sourceFileUri = Uri.parse(sourcefiles[index]) + uploadFile( + currentUser!!, + UploadItem( + sourceFileUri, + UriUtils.getFileName(sourceFileUri, context), + createRequestBody(sourceFileUri) + ), + ncTargetpath, + roomToken, + metaData + ) } } catch (e: IllegalStateException) { Log.e(javaClass.simpleName, "Something went wrong when trying to upload file", e) @@ -114,6 +122,7 @@ class UploadAndShareFilesWorker(val context: Context, workerParameters: WorkerPa return Result.success() } + @Suppress("Detekt.TooGenericExceptionCaught") private fun createRequestBody(sourcefileUri: Uri): RequestBody? { var requestBody: RequestBody? = null try { @@ -129,34 +138,34 @@ class UploadAndShareFilesWorker(val context: Context, workerParameters: WorkerPa private fun uploadFile( currentUser: UserEntity, - ncTargetpath: String?, - filename: String, + uploadItem: UploadItem, + ncTargetPath: String?, roomToken: String?, - requestBody: RequestBody?, - sourcefileUri: Uri, metaData: String? ) { ncApi.uploadFile( ApiUtils.getCredentials(currentUser.username, currentUser.token), - ApiUtils.getUrlForFileUpload(currentUser.baseUrl, currentUser.userId, ncTargetpath, filename), - requestBody + ApiUtils.getUrlForFileUpload(currentUser.baseUrl, currentUser.userId, ncTargetPath, uploadItem.fileName), + uploadItem.requestBody ) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(object : Observer> { override fun onSubscribe(d: Disposable) { + // unused atm } override fun onNext(t: Response) { + // unused atm } override fun onError(e: Throwable) { - Log.e(TAG, "failed to upload file $filename") + Log.e(TAG, "failed to upload file ${uploadItem.fileName}") } override fun onComplete() { - shareFile(roomToken, currentUser, ncTargetpath, filename, metaData) - copyFileToCache(sourcefileUri, filename) + shareFile(roomToken, currentUser, ncTargetPath, uploadItem.fileName, metaData) + copyFileToCache(uploadItem.uri, uploadItem.fileName) } }) } @@ -271,4 +280,10 @@ class UploadAndShareFilesWorker(val context: Context, workerParameters: WorkerPa } } } + + private data class UploadItem( + val uri: Uri, + val fileName: String, + val requestBody: RequestBody?, + ) } diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/SetStatusDialogFragment.kt b/app/src/main/java/com/nextcloud/talk/ui/dialog/SetStatusDialogFragment.kt index 306f3df13..30271b244 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/SetStatusDialogFragment.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/SetStatusDialogFragment.kt @@ -122,6 +122,7 @@ class SetStatusDialogFragment : .subscribe(object : Observer { override fun onSubscribe(d: Disposable) { + // unused atm } override fun onNext(responseBody: ResponseBody) { @@ -136,9 +137,12 @@ class SetStatusDialogFragment : } override fun onError(e: Throwable) { + // unused atm } - override fun onComplete() {} + override fun onComplete() { + // unused atm + } }) } } @@ -322,8 +326,12 @@ class SetStatusDialogFragment : ncApi.statusDeleteMessage(credentials, ApiUtils.getUrlForStatusMessage(currentUser?.baseUrl)) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()).subscribe(object : Observer { - override fun onSubscribe(d: Disposable) {} - override fun onNext(statusOverall: GenericOverall) {} + override fun onSubscribe(d: Disposable) { + // unused atm + } + override fun onNext(statusOverall: GenericOverall) { + // unused atm + } override fun onError(e: Throwable) { Log.e(logTag, "Failed to clear status", e) } @@ -343,7 +351,9 @@ class SetStatusDialogFragment : .io() ) .observeOn(AndroidSchedulers.mainThread()).subscribe(object : Observer { - override fun onSubscribe(d: Disposable) {} + override fun onSubscribe(d: Disposable) { + // unused atm + } override fun onNext(statusOverall: GenericOverall) { Log.d(logTag, "statusType successfully set") } @@ -353,7 +363,9 @@ class SetStatusDialogFragment : clearTopStatus() } - override fun onComplete() {} + override fun onComplete() { + // unused atm + } }) } @@ -417,6 +429,7 @@ class SetStatusDialogFragment : ?.subscribe(object : Observer { override fun onSubscribe(d: Disposable) { + // unused atm } override fun onNext(t: GenericOverall) { @@ -428,7 +441,9 @@ class SetStatusDialogFragment : Log.e(logTag, "failed to set CustomStatusMessage", e) } - override fun onComplete() {} + override fun onComplete() { + // unused atm + } }) } diff --git a/app/src/main/java/com/nextcloud/talk/utils/AccountUtils.kt b/app/src/main/java/com/nextcloud/talk/utils/AccountUtils.kt index d6cbd1c68..34c66d86c 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/AccountUtils.kt +++ b/app/src/main/java/com/nextcloud/talk/utils/AccountUtils.kt @@ -55,10 +55,7 @@ object AccountUtils { internalUserEntity = userEntitiesList[i] importAccount = getInformationFromAccount(account) if (importAccount.token != null) { - if ( - importAccount.baseUrl.startsWith("http://") || - importAccount.baseUrl.startsWith("https://") - ) { + if (UriUtils.hasHttpProtocollPrefixed(importAccount.baseUrl)) { if ( internalUserEntity.username == importAccount.username && internalUserEntity.baseUrl == importAccount.baseUrl @@ -139,6 +136,7 @@ object AccountUtils { return false } + @Suppress("Detekt.TooGenericExceptionCaught") fun getInformationFromAccount(account: Account): ImportAccount { val lastAtPos = account.name.lastIndexOf("@") var urlString = account.name.substring(lastAtPos + 1) diff --git a/app/src/main/java/com/nextcloud/talk/utils/ImageEmojiEditText.kt b/app/src/main/java/com/nextcloud/talk/utils/ImageEmojiEditText.kt index 6a7c1b764..154565903 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/ImageEmojiEditText.kt +++ b/app/src/main/java/com/nextcloud/talk/utils/ImageEmojiEditText.kt @@ -43,6 +43,7 @@ class ImageEmojiEditText : EmojiEditText { constructor(context: Context) : super(context) constructor(context: Context, attrs: AttributeSet) : super(context, attrs) + @Suppress("Detekt.TooGenericExceptionCaught") override fun onCreateInputConnection(editorInfo: EditorInfo): InputConnection { val ic: InputConnection = super.onCreateInputConnection(editorInfo) diff --git a/app/src/main/java/com/nextcloud/talk/utils/NotificationUtils.kt b/app/src/main/java/com/nextcloud/talk/utils/NotificationUtils.kt index af769a3d7..61941f251 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/NotificationUtils.kt +++ b/app/src/main/java/com/nextcloud/talk/utils/NotificationUtils.kt @@ -2,6 +2,8 @@ * Nextcloud Talk application * * @author Mario Danic + * @author Andy Scherzinger + * Copyright (C) 2021 Andy Scherzinger * Copyright (C) 2017 Mario Danic * * This program is free software: you can redistribute it and/or modify @@ -62,9 +64,7 @@ object NotificationUtils { @TargetApi(Build.VERSION_CODES.O) private fun createNotificationChannel( context: Context, - channelId: String, - channelName: String, - channelDescription: String, + notificationChannel: Channel, sound: Uri?, audioAttributes: AudioAttributes ) { @@ -73,14 +73,14 @@ object NotificationUtils { if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && - notificationManager.getNotificationChannel(channelId) == null + notificationManager.getNotificationChannel(notificationChannel.id) == null ) { val channel = NotificationChannel( - channelId, channelName, + notificationChannel.id, notificationChannel.name, NotificationManager.IMPORTANCE_HIGH ) - channel.description = channelDescription + channel.description = notificationChannel.description channel.enableLights(true) channel.lightColor = R.color.colorPrimary channel.setSound(sound, audioAttributes) @@ -103,9 +103,11 @@ object NotificationUtils { createNotificationChannel( context, - NOTIFICATION_CHANNEL_CALLS_V4, - context.resources.getString(R.string.nc_notification_channel_calls), - context.resources.getString(R.string.nc_notification_channel_calls_description), + Channel( + NOTIFICATION_CHANNEL_CALLS_V4, + context.resources.getString(R.string.nc_notification_channel_calls), + context.resources.getString(R.string.nc_notification_channel_calls_description) + ), soundUri, audioAttributes ) @@ -124,9 +126,11 @@ object NotificationUtils { createNotificationChannel( context, - NOTIFICATION_CHANNEL_MESSAGES_V4, - context.resources.getString(R.string.nc_notification_channel_messages), - context.resources.getString(R.string.nc_notification_channel_messages_description), + Channel( + NOTIFICATION_CHANNEL_MESSAGES_V4, + context.resources.getString(R.string.nc_notification_channel_messages), + context.resources.getString(R.string.nc_notification_channel_messages_description) + ), soundUri, audioAttributes ) @@ -322,4 +326,10 @@ object NotificationUtils { appPreferences.messageRingtoneUri, DEFAULT_MESSAGE_RINGTONE_URI, NOTIFICATION_CHANNEL_MESSAGES_V4 ) } + + private data class Channel( + val id: String, + val name: String, + val description: String + ) } diff --git a/app/src/main/java/com/nextcloud/talk/utils/UriUtils.kt b/app/src/main/java/com/nextcloud/talk/utils/UriUtils.kt index 1397e7714..71d0e05ff 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/UriUtils.kt +++ b/app/src/main/java/com/nextcloud/talk/utils/UriUtils.kt @@ -1,7 +1,9 @@ /* * Nextcloud Talk application * + * @author Andy Scherzinger * @author Marcel Hibbe + * Copyright (C) 2022 Andy Scherzinger * Copyright (C) 2021 Marcel Hibbe * * This program is free software: you can redistribute it and/or modify @@ -50,5 +52,9 @@ class UriUtils { } return filename } + + fun hasHttpProtocollPrefixed(uri: String): Boolean { + return uri.startsWith("http://") || uri.startsWith("https://") + } } } diff --git a/detekt.yml b/detekt.yml index 36a91e080..7465a5835 100644 --- a/detekt.yml +++ b/detekt.yml @@ -1,5 +1,5 @@ build: - maxIssues: 217 + maxIssues: 149 weights: # complexity: 2 # LongParameterList: 1 diff --git a/scripts/analysis/lint-results.txt b/scripts/analysis/lint-results.txt index 2445b0e58..8146c9978 100644 --- a/scripts/analysis/lint-results.txt +++ b/scripts/analysis/lint-results.txt @@ -1,2 +1,2 @@ DO NOT TOUCH; GENERATED BY DRONE - Lint Report: 1 error and 171 warnings + Lint Report: 1 error and 172 warnings