From 432ea617c963b0abb71f3d1be80b52eb36a89969 Mon Sep 17 00:00:00 2001 From: Naveen Singh <36371707+naveensingh@users.noreply.github.com> Date: Tue, 24 Jun 2025 16:14:54 +0530 Subject: [PATCH] chore: update lint rules and baselines (#442) --- .github/workflows/update-lint-baselines.yml | 11 + .gitignore | 1 + app/build.gradle.kts | 8 +- app/detekt-baseline.xml | 187 +-- app/lint-baseline.xml | 1151 ++++++++++++------- lint.xml | 34 + 6 files changed, 825 insertions(+), 567 deletions(-) create mode 100644 .github/workflows/update-lint-baselines.yml create mode 100644 lint.xml diff --git a/.github/workflows/update-lint-baselines.yml b/.github/workflows/update-lint-baselines.yml new file mode 100644 index 00000000..17043a58 --- /dev/null +++ b/.github/workflows/update-lint-baselines.yml @@ -0,0 +1,11 @@ +name: Update lint baselines + +on: + workflow_dispatch: + schedule: + - cron: "0 0 1 * *" + +jobs: + update-lint-baselines: + uses: FossifyOrg/.github/.github/workflows/update-lint-baselines.yml@main + secrets: inherit diff --git a/.gitignore b/.gitignore index d209458c..72ae8c3b 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,4 @@ keystore.jks keystore.properties fastlane/fastlane.json fastlane/report.xml +.kotlin/ diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f3340745..10c436d7 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,3 +1,4 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import org.jetbrains.kotlin.konan.properties.Properties import java.io.FileInputStream @@ -102,7 +103,9 @@ android { } tasks.withType { - kotlinOptions.jvmTarget = project.libs.versions.app.build.kotlinJVMTarget.get() + compilerOptions.jvmTarget.set( + JvmTarget.fromTarget(project.libs.versions.app.build.kotlinJVMTarget.get()) + ) } namespace = project.property("APP_ID").toString() @@ -110,8 +113,9 @@ android { lint { checkReleaseBuilds = false abortOnError = true - warningsAsErrors = true + warningsAsErrors = false baseline = file("lint-baseline.xml") + lintConfig = rootProject.file("lint.xml") } bundle { diff --git a/app/detekt-baseline.xml b/app/detekt-baseline.xml index 90842d8b..1b77bb60 100644 --- a/app/detekt-baseline.xml +++ b/app/detekt-baseline.xml @@ -1,10 +1,11 @@ - + ComplexCondition:Activity.kt$contact.rawId > 1000000 && contact.contactId > 1000000 && contact.rawId == contact.contactId && (isPackageInstalled(simpleContacts) || isPackageInstalled(simpleContactsDebug)) - ComplexCondition:NewConversationActivity.kt$NewConversationActivity$(intent.action == Intent.ACTION_SENDTO || intent.action == Intent.ACTION_SEND || intent.action == Intent.ACTION_VIEW) && intent.dataString != null ComplexCondition:NewConversationActivity.kt$NewConversationActivity$contact.phoneNumbers.any { it.normalizedNumber.contains(searchString, true) } || contact.name.contains(searchString, true) || contact.name.contains(searchString.normalizeString(), true) || contact.name.normalizeString().contains(searchString, true) + CyclomaticComplexMethod:Context.kt$fun Context.getConversations( threadId: Long? = null, privateContacts: ArrayList<SimpleContact> = ArrayList(), ): ArrayList<Conversation> + CyclomaticComplexMethod:ConversationsAdapter.kt$ConversationsAdapter$override fun actionItemPressed(id: Int) CyclomaticComplexMethod:MainActivity.kt$MainActivity$private fun getNewConversations(cachedConversations: ArrayList<Conversation>) CyclomaticComplexMethod:MessagesImporter.kt$MessagesImporter$private fun InputStream.importXml() CyclomaticComplexMethod:NotificationHelper.kt$NotificationHelper$@SuppressLint("NewApi") fun showMessageNotification( messageId: Long, address: String, body: String, threadId: Long, bitmap: Bitmap?, sender: String?, alertOnlyOnce: Boolean = false ) @@ -12,7 +13,6 @@ CyclomaticComplexMethod:ThreadActivity.kt$ThreadActivity$private fun refreshMenuItems() CyclomaticComplexMethod:ThreadActivity.kt$ThreadActivity$private fun setupButtons() CyclomaticComplexMethod:ThreadActivity.kt$ThreadActivity$private fun setupThread() - EmptyCatchBlock:Context.kt${ } EmptyCatchBlock:MessagesWriter.kt$MessagesWriter${ } EmptyFunctionBlock:ArchivedConversationsAdapter.kt$ArchivedConversationsAdapter${} EmptyFunctionBlock:BaseConversationsAdapter.kt$BaseConversationsAdapter${} @@ -22,21 +22,27 @@ EmptyFunctionBlock:SearchResultsAdapter.kt$SearchResultsAdapter${} EmptyFunctionBlock:ThreadActivity.kt$ThreadActivity.<no name provided>${} EmptyFunctionBlock:ThreadAdapter.kt$ThreadAdapter${} + ForbiddenComment:MainActivity.kt$MainActivity$// FIXME: Scheduled message date is being reset here. Conversations with + ForbiddenComment:ShortcutHelper.kt$ShortcutHelper$// TODO: verify that thread isn't in recycle bin ForbiddenComment:SmsStatusDeliveredReceiver.kt$SmsStatusDeliveredReceiver$// TODO: Need to check whether SC still trying to deliver the SMS to destination and will send the report again? FunctionParameterNaming:Config.kt$Config$SIMId: Int LargeClass:ThreadActivity.kt$ThreadActivity : SimpleActivity - LongMethod:Context.kt$fun Context.getConversations(threadId: Long? = null, privateContacts: ArrayList<SimpleContact> = ArrayList()): ArrayList<Conversation> - LongMethod:Context.kt$fun Context.getMMS(threadId: Long? = null, getImageResolutions: Boolean = false, sortOrder: String? = null, dateFrom: Int = -1): ArrayList<Message> - LongMethod:Context.kt$fun Context.getMessages( threadId: Long, getImageResolutions: Boolean, dateFrom: Int = -1, includeScheduledMessages: Boolean = true, limit: Int = MESSAGES_LIMIT ): ArrayList<Message> - LongMethod:MessagesReader.kt$MessagesReader$private fun getMmsMessages(threadIds: List<Long>, includeTextOnlyAttachment: Boolean = false): List<MmsBackup> + LongMethod:Context.kt$@SuppressLint("NewApi") fun Context.getMmsAttachment(id: Long, getImageResolutions: Boolean): MessageAttachment + LongMethod:Context.kt$fun Context.getConversations( threadId: Long? = null, privateContacts: ArrayList<SimpleContact> = ArrayList(), ): ArrayList<Conversation> + LongMethod:Context.kt$fun Context.getMMS( threadId: Long? = null, getImageResolutions: Boolean = false, sortOrder: String? = null, dateFrom: Int = -1, ): ArrayList<Message> + LongMethod:Context.kt$fun Context.getMessages( threadId: Long, getImageResolutions: Boolean, dateFrom: Int = -1, includeScheduledMessages: Boolean = true, limit: Int = MESSAGES_LIMIT, ): ArrayList<Message> + LongMethod:MainActivity.kt$MainActivity$private fun getNewConversations(cachedConversations: ArrayList<Conversation>) + LongMethod:MainActivity.kt$MainActivity$private fun showSearchResults( messages: List<Message>, conversations: List<Conversation>, searchedText: String, ) + LongMethod:MessagesReader.kt$MessagesReader$@SuppressLint("NewApi") private fun getParts(mmsId: Long): List<MmsPart> + LongMethod:MessagesReader.kt$MessagesReader$private fun getMmsMessages( threadIds: List<Long>, includeTextOnlyAttachment: Boolean = false ): List<MmsBackup> LongMethod:NotificationHelper.kt$NotificationHelper$@SuppressLint("NewApi") fun showMessageNotification( messageId: Long, address: String, body: String, threadId: Long, bitmap: Bitmap?, sender: String?, alertOnlyOnce: Boolean = false ) LongMethod:ThreadActivity.kt$ThreadActivity$private fun setupAttachmentPickerView() LongMethod:ThreadActivity.kt$ThreadActivity$private fun setupButtons() LongMethod:ThreadActivity.kt$ThreadActivity$private fun setupThread() LongParameterList:AttachmentPreviews.kt$( activity: Activity, uri: Uri, attachment: Boolean = false, onClick: (() -> Unit)? = null, onLongClick: (() -> Unit)? = null, onVCardLoaded: (() -> Unit)? = null, ) LongParameterList:AttachmentPreviews.kt$( uri: Uri, title: String, mimeType: String, onClick: (() -> Unit)? = null, onLongClick: (() -> Unit)? = null, onRemoveButtonClicked: (() -> Unit)? = null ) - LongParameterList:Context.kt$( address: String, subject: String, body: String, date: Long, read: Int, threadId: Long, type: Int, subscriptionId: Int ) - LongParameterList:Context.kt$( uri: Uri, projection: Array<String>, selection: String? = null, selectionArgs: Array<String>? = null, sortOrder: String? = null, callback: (cursor: Cursor) -> Unit ) + LongParameterList:Context.kt$( address: String, subject: String, body: String, date: Long, read: Int, threadId: Long, type: Int, subscriptionId: Int, ) + LongParameterList:Context.kt$( uri: Uri, projection: Array<String>, selection: String? = null, selectionArgs: Array<String>? = null, sortOrder: String? = null, callback: (cursor: Cursor) -> Unit, ) LongParameterList:MessagingUtils.kt$MessagingUtils$( subId: Int, dest: String, text: String, timestamp: Long, threadId: Long, status: Int = Sms.STATUS_NONE, type: Int = Sms.MESSAGE_TYPE_OUTBOX, messageId: Long? = null ) LongParameterList:NotificationHelper.kt$NotificationHelper$( messageId: Long, address: String, body: String, threadId: Long, bitmap: Bitmap?, sender: String?, alertOnlyOnce: Boolean = false ) LongParameterList:SmsReceiver.kt$SmsReceiver$( context: Context, address: String, subject: String, body: String, date: Long, read: Int, threadId: Long, type: Int, subscriptionId: Int, status: Int ) @@ -47,10 +53,10 @@ MagicNumber:BaseConversationsAdapter.kt$BaseConversationsAdapter$0.8f MagicNumber:BaseConversationsAdapter.kt$BaseConversationsAdapter$0.9f MagicNumber:BaseConversationsAdapter.kt$BaseConversationsAdapter$1.2f + MagicNumber:BaseConversationsAdapter.kt$BaseConversationsAdapter$1000L MagicNumber:ContactsAdapter.kt$ContactsAdapter$1.2f MagicNumber:Context.kt$10 MagicNumber:Context.kt$1000 - MagicNumber:Context.kt$1000L MagicNumber:Context.kt$500L MagicNumber:ImageCompressor.kt$ImageCompressor$0.6f MagicNumber:ImageCompressor.kt$ImageCompressor$100 @@ -62,6 +68,7 @@ MagicNumber:ImageCompressor.kt$ImageCompressor$6 MagicNumber:ImageCompressor.kt$ImageCompressor$8 MagicNumber:ImageCompressor.kt$ImageCompressor$90f + MagicNumber:MainActivity.kt$MainActivity$1000L MagicNumber:MainActivity.kt$MainActivity$30 MagicNumber:Message.kt$Message$1000L MagicNumber:Message.kt$Message.Companion$31 @@ -72,6 +79,7 @@ MagicNumber:MessagesDatabase.kt$MessagesDatabase.Companion.<no name provided>$6 MagicNumber:MessagesDatabase.kt$MessagesDatabase.Companion.<no name provided>$7 MagicNumber:MessagesDatabase.kt$MessagesDatabase.Companion.<no name provided>$8 + MagicNumber:MessagesDatabase.kt$MessagesDatabase.Companion.<no name provided>$9 MagicNumber:ScheduleMessageDialog.kt$ScheduleMessageDialog$23 MagicNumber:ScheduleMessageDialog.kt$ScheduleMessageDialog$5 MagicNumber:ScheduleMessageDialog.kt$ScheduleMessageDialog$59 @@ -84,6 +92,7 @@ MagicNumber:SettingsActivity.kt$SettingsActivity$5 MagicNumber:SettingsActivity.kt$SettingsActivity$6 MagicNumber:SettingsActivity.kt$SettingsActivity$7 + MagicNumber:ShortcutHelper.kt$ShortcutHelper$99 MagicNumber:SmsReceiver.kt$SmsReceiver$1000 MagicNumber:SmsStatusDeliveredReceiver.kt$SmsStatusDeliveredReceiver$0x03 MagicNumber:SmsStatusDeliveredReceiver.kt$SmsStatusDeliveredReceiver$0x3f @@ -104,6 +113,7 @@ MagicNumber:ThreadActivity.kt$ThreadActivity$300 MagicNumber:ThreadActivity.kt$ThreadActivity$500L MagicNumber:ThreadAdapter.kt$ThreadAdapter$0.8f + MagicNumber:ThreadAdapter.kt$ThreadAdapter$1000L MagicNumber:ThreadAdapter.kt$ThreadAdapter$4 MagicNumber:VCardViewerAdapter.kt$VCardViewerAdapter.VCardContactViewHolder$1.1f MagicNumber:VCardViewerAdapter.kt$VCardViewerAdapter.VCardPropertyViewHolder$1.1f @@ -116,142 +126,59 @@ MaxLineLength:AttachmentsAdapter.kt$AttachmentsAdapter$onClick = { activity.launchViewIntent(attachment.uri, attachment.mimetype, attachment.filename) } MaxLineLength:AttachmentsAdapter.kt$AttachmentsAdapter.<no name provided>$override MaxLineLength:AutoCompleteTextViewAdapter.kt$AutoCompleteTextViewAdapter$class - MaxLineLength:BaseConversationsAdapter.kt$BaseConversationsAdapter$SimpleContactsHelper(activity).loadContactImage(conversation.photoUri, conversationImage, conversation.title, placeholder) - MaxLineLength:BaseConversationsAdapter.kt$BaseConversationsAdapter$protected fun getSelectedItems() - MaxLineLength:BaseConversationsAdapter.kt$BaseConversationsAdapter.<no name provided>$override fun onItemRangeMoved(fromPosition: Int, toPosition: Int, itemCount: Int) - MaxLineLength:Config.kt$Config$set(lockScreenVisibilitySetting) = prefs.edit().putInt(LOCK_SCREEN_VISIBILITY, lockScreenVisibilitySetting).apply() MaxLineLength:Constants.kt$/** Not to be used with real messages persisted in the telephony db. This is for internal use only (e.g. scheduled messages, notification ids etc). */ MaxLineLength:ContactsAdapter.kt$ContactsAdapter$activity: SimpleActivity - MaxLineLength:Context.kt$for - MaxLineLength:Context.kt$fun - MaxLineLength:Context.kt$if - MaxLineLength:Context.kt$selection = "${Sms.DATE} < ${dateFrom.toLong()}" - MaxLineLength:Context.kt$val attachment = Attachment(partId, id, Uri.withAppendedPath(uri, partId.toString()).toString(), mimetype, 0, 0, attachmentName) - MaxLineLength:Context.kt$val contact = SimpleContact(addressId, addressId, name, photoUri, arrayListOf(phoneNumber), ArrayList(), ArrayList()) - MaxLineLength:Context.kt$val conversation = Conversation(id, snippet, date.toInt(), read, title, photoUri, isGroupConversation, phoneNumbers.first(), isArchived = archived) - MaxLineLength:Context.kt$val photoUri = if (phoneNumbers.size == 1) simpleContactHelper.getPhotoUriFromPhoneNumber(phoneNumbers.first()) else "" - MaxLineLength:Context.kt$val privateContact = privateContacts.firstOrNull { it.phoneNumbers.first().normalizedNumber == senderNumber } - MaxLineLength:ConversationDetailsActivity.kt$ConversationDetailsActivity$setupMaterialScrollListener(scrollingView = binding.participantsRecyclerview, toolbar = binding.conversationDetailsToolbar) - MaxLineLength:ConversationsAdapter.kt$ConversationsAdapter$findItem(R.id.cab_block_number).title = activity.addLockedLabelIfNeeded(org.fossify.commons.R.string.block_number) - MaxLineLength:ConversationsAdapter.kt$ConversationsAdapter$findItem(R.id.cab_dial_number).isVisible = isSingleSelection && !isGroupConversation && !isShortCodeWithLetters(selectedConversation.phoneNumber) - MaxLineLength:ConversationsAdapter.kt$ConversationsAdapter$menu.findItem(R.id.cab_pin_conversation).isVisible = selectedConversations.any { !pinnedConversations.contains(it.threadId.toString()) } - MaxLineLength:ConversationsAdapter.kt$ConversationsAdapter$menu.findItem(R.id.cab_unpin_conversation).isVisible = selectedConversations.any { pinnedConversations.contains(it.threadId.toString()) } - MaxLineLength:ConversationsAdapter.kt$ConversationsAdapter$val conversationsMarkedAsRead = currentList.filter { selectedKeys.contains(it.hashCode()) } as ArrayList<Conversation> - MaxLineLength:ConversationsAdapter.kt$ConversationsAdapter$val conversationsMarkedAsUnread = currentList.filter { selectedKeys.contains(it.hashCode()) } as ArrayList<Conversation> - MaxLineLength:ConversationsAdapter.kt$ConversationsAdapter$val conversationsToRemove = currentList.filter { selectedKeys.contains(it.hashCode()) } as ArrayList<Conversation> - MaxLineLength:ConversationsAdapter.kt$ConversationsAdapter$val question = String.format(resources.getString(org.fossify.commons.R.string.block_confirmation), numbersString) MaxLineLength:ConversationsDao.kt$ConversationsDao$@Query("SELECT (SELECT body FROM messages LEFT OUTER JOIN recycle_bin_messages ON messages.id = recycle_bin_messages.id WHERE recycle_bin_messages.id IS NOT NULL AND messages.thread_id = conversations.thread_id ORDER BY messages.date DESC LIMIT 1) as new_snippet, * FROM conversations WHERE (SELECT COUNT(*) FROM messages LEFT OUTER JOIN recycle_bin_messages ON messages.id = recycle_bin_messages.id WHERE recycle_bin_messages.id IS NOT NULL AND messages.thread_id = conversations.thread_id) > 0") MaxLineLength:ConversationsDao.kt$ConversationsDao$@Query("SELECT (SELECT body FROM messages LEFT OUTER JOIN recycle_bin_messages ON messages.id = recycle_bin_messages.id WHERE recycle_bin_messages.id IS NULL AND messages.thread_id = conversations.thread_id ORDER BY messages.date DESC LIMIT 1) as new_snippet, * FROM conversations WHERE archived = 0") MaxLineLength:ConversationsDao.kt$ConversationsDao$@Query("SELECT (SELECT body FROM messages LEFT OUTER JOIN recycle_bin_messages ON messages.id = recycle_bin_messages.id WHERE recycle_bin_messages.id IS NULL AND messages.thread_id = conversations.thread_id ORDER BY messages.date DESC LIMIT 1) as new_snippet, * FROM conversations WHERE archived = 1") MaxLineLength:DirectReplyReceiver.kt$DirectReplyReceiver$context.notificationHelper.showMessageNotification(messageId, address, body, threadId, bitmap, sender = null, alertOnlyOnce = true) MaxLineLength:DirectReplyReceiver.kt$DirectReplyReceiver$val message = context.getMessages(threadId, getImageResolutions = false, includeScheduledMessages = false, limit = 1).lastOrNull() + MaxLineLength:ExportBlockedKeywordsDialog.kt$ExportBlockedKeywordsDialog$exportBlockedKeywordsFilename.setText("${activity.getString(R.string.blocked_keywords)}_${activity.getCurrentFormattedDateTime()}") MaxLineLength:Gson.kt$private val gsonBuilder = GsonBuilder().registerTypeAdapter(object : TypeToken<Map<String, Any>>() {}.type, MapDeserializerDoubleAsIntFix()) MaxLineLength:HeadlessSmsSendService.kt$HeadlessSmsSendService$val number = Uri.decode(intent.dataString!!.removePrefix("sms:").removePrefix("smsto:").removePrefix("mms").removePrefix("mmsto:").trim()) MaxLineLength:ImageCompressor.kt$ImageCompressor$fun MaxLineLength:ImageCompressor.kt$ImageCompressor$private MaxLineLength:ImageCompressor.kt$ImageCompressor$var imageFile = File(outputDirectory, System.currentTimeMillis().toString().plus(mimeType.getExtensionFromMimeType())) - MaxLineLength:MainActivity.kt$MainActivity$(drawable as LayerDrawable).findDrawableByLayerId(org.fossify.commons.R.id.shortcut_plus_background).applyColorFilter(appIconColor) - MaxLineLength:MainActivity.kt$MainActivity$// there are no cached conversations on the first run so we show the loading placeholder and progress until we are done loading from telephony - MaxLineLength:MainActivity.kt$MainActivity$// while SEND_SMS and READ_SMS permissions are mandatory, READ_CONTACTS is optional. If we don't have it, we just won't be able to show the contact name in some cases - MaxLineLength:MainActivity.kt$MainActivity$faqItems.add(FAQItem(org.fossify.commons.R.string.faq_2_title_commons, org.fossify.commons.R.string.faq_2_text_commons)) - MaxLineLength:MainActivity.kt$MainActivity$faqItems.add(FAQItem(org.fossify.commons.R.string.faq_6_title_commons, org.fossify.commons.R.string.faq_6_text_commons)) - MaxLineLength:MainActivity.kt$MainActivity$val searchResult = SearchResult(-1, conversation.title, conversation.phoneNumber, date, conversation.threadId, conversation.photoUri) - MaxLineLength:MainActivity.kt$MainActivity$val searchResult = SearchResult(message.id, recipient, message.body, date, message.threadId, message.senderPhotoUri) - MaxLineLength:ManageBlockedKeywordsActivity.kt$ManageBlockedKeywordsActivity$ManageBlockedKeywordsAdapter - MaxLineLength:ManageBlockedKeywordsActivity.kt$ManageBlockedKeywordsActivity$setupMaterialScrollListener(scrollingView = binding.manageBlockedKeywordsList, toolbar = binding.blockKeywordsToolbar) MaxLineLength:MessagesDao.kt$MessagesDao$@Query("SELECT messages.* FROM messages LEFT OUTER JOIN recycle_bin_messages ON messages.id = recycle_bin_messages.id WHERE recycle_bin_messages.id IS NOT NULL AND recycle_bin_messages.deleted_ts < :timestamp") MaxLineLength:MessagesDao.kt$MessagesDao$@Query("SELECT messages.* FROM messages LEFT OUTER JOIN recycle_bin_messages ON messages.id = recycle_bin_messages.id WHERE recycle_bin_messages.id IS NOT NULL AND thread_id = :threadId") MaxLineLength:MessagesDao.kt$MessagesDao$@Query("SELECT messages.* FROM messages LEFT OUTER JOIN recycle_bin_messages ON messages.id = recycle_bin_messages.id WHERE recycle_bin_messages.id IS NOT NULL") MaxLineLength:MessagesDao.kt$MessagesDao$@Query("SELECT messages.* FROM messages LEFT OUTER JOIN recycle_bin_messages ON messages.id = recycle_bin_messages.id WHERE recycle_bin_messages.id IS NULL AND thread_id = :threadId AND is_scheduled = 1") MaxLineLength:MessagesDao.kt$MessagesDao$@Query("SELECT messages.* FROM messages LEFT OUTER JOIN recycle_bin_messages ON messages.id = recycle_bin_messages.id WHERE recycle_bin_messages.id IS NULL AND thread_id = :threadId") - MaxLineLength:MessagesDatabase.kt$MessagesDatabase$@Database(entities = [Conversation::class, Attachment::class, MessageAttachment::class, Message::class, RecycleBinMessage::class], version = 8) - MaxLineLength:MessagesDatabase.kt$MessagesDatabase.Companion$db MaxLineLength:MessagesDatabase.kt$MessagesDatabase.Companion.<no name provided>$"INSERT OR IGNORE INTO conversations_new (thread_id, snippet, date, read, title, photo_uri, is_group_conversation, phone_number) " MaxLineLength:MessagesDatabase.kt$MessagesDatabase.Companion.<no name provided>$"SELECT thread_id, snippet, date, read, title, photo_uri, is_group_conversation, phone_number FROM conversations" MaxLineLength:MessagesDatabase.kt$MessagesDatabase.Companion.<no name provided>$execSQL("CREATE TABLE IF NOT EXISTS `attachments` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `message_id` INTEGER NOT NULL, `uri_string` TEXT NOT NULL, `mimetype` TEXT NOT NULL, `width` INTEGER NOT NULL, `height` INTEGER NOT NULL, `filename` TEXT NOT NULL)") + MaxLineLength:MessagesDatabase.kt$MessagesDatabase.Companion.<no name provided>$execSQL("CREATE TABLE IF NOT EXISTS `drafts` (`thread_id` INTEGER NOT NULL PRIMARY KEY, `body` TEXT NOT NULL, `date` INTEGER NOT NULL)") MaxLineLength:MessagesDatabase.kt$MessagesDatabase.Companion.<no name provided>$execSQL("CREATE TABLE IF NOT EXISTS `message_attachments` (`id` INTEGER PRIMARY KEY NOT NULL, `text` TEXT NOT NULL, `attachments` TEXT NOT NULL)") MaxLineLength:MessagesDatabase.kt$MessagesDatabase.Companion.<no name provided>$execSQL("CREATE TABLE IF NOT EXISTS `messages` (`id` INTEGER PRIMARY KEY NOT NULL, `body` TEXT NOT NULL, `type` INTEGER NOT NULL, `participants` TEXT NOT NULL, `date` INTEGER NOT NULL, `read` INTEGER NOT NULL, `thread_id` INTEGER NOT NULL, `is_mms` INTEGER NOT NULL, `attachment` TEXT, `sender_name` TEXT NOT NULL, `sender_photo_uri` TEXT NOT NULL, `subscription_id` INTEGER NOT NULL)") MaxLineLength:MessagesDatabase.kt$MessagesDatabase.Companion.<no name provided>$execSQL("CREATE TABLE IF NOT EXISTS `recycle_bin_messages` (`id` INTEGER NOT NULL PRIMARY KEY, `deleted_ts` INTEGER NOT NULL)") MaxLineLength:MessagesDatabase.kt$MessagesDatabase.Companion.<no name provided>$execSQL("CREATE TABLE conversations_new (`thread_id` INTEGER NOT NULL PRIMARY KEY, `snippet` TEXT NOT NULL, `date` INTEGER NOT NULL, `read` INTEGER NOT NULL, `title` TEXT NOT NULL, `photo_uri` TEXT NOT NULL, `is_group_conversation` INTEGER NOT NULL, `phone_number` TEXT NOT NULL)") MaxLineLength:MessagesDatabase.kt$MessagesDatabase.Companion.<no name provided>$execSQL("CREATE UNIQUE INDEX IF NOT EXISTS `index_conversations_id` ON `conversations` (`thread_id`)") MaxLineLength:MessagesDatabase.kt$MessagesDatabase.Companion.<no name provided>$execSQL("CREATE UNIQUE INDEX IF NOT EXISTS `index_recycle_bin_messages_id` ON `recycle_bin_messages` (`id`)") - MaxLineLength:MessagesImporter.kt$MessagesImporter$messagesFailed > 0 && messagesImported > 0 -> activity.toast(org.fossify.commons.R.string.importing_some_entries_failed) - MaxLineLength:MessagesReader.kt$MessagesReader$parts.add(MmsPart(contentDisposition, charset, contentId, contentLocation, contentType, ctStart, ctType, filename, name, sequenceOrder, text, data)) - MaxLineLength:MessagesReader.kt$MessagesReader$smsList.add(SmsBackup(subscriptionId, address, body, date, dateSent, locked, protocol, read, status, type, serviceCenter)) - MaxLineLength:MessagesReader.kt$MessagesReader$val partUri = if (isQPlus()) Mms.Part.CONTENT_URI.buildUpon().appendPath(partId.toString()).build() else Uri.parse("content://mms/part/$partId") - MaxLineLength:MessagesReader.kt$MessagesReader$val uri = if (isRPlus()) Mms.Addr.getAddrUriForMessage(messageId.toString()) else Uri.parse("content://mms/$messageId/addr") MaxLineLength:MessagesWriter.kt$MessagesWriter$// 2. write parts - parts depend on the msg id, check if part exist before writing, write data if it is a non-text part - MaxLineLength:MessagesWriter.kt$MessagesWriter$val addressUri = if (isRPlus()) Mms.Addr.getAddrUriForMessage(messageId.toString()) else Uri.parse("content://mms/$messageId/addr") MaxLineLength:MessagesWriter.kt$MessagesWriter$val selection = "${Mms.Part.CONTENT_LOCATION} = ? AND ${Mms.Part.CONTENT_TYPE} = ? AND ${Mms.Part.MSG_ID} = ? AND ${Mms.Part.CONTENT_ID} = ?" - MaxLineLength:MessagesWriter.kt$MessagesWriter$val selectionArgs = arrayOf(mmsBackup.date.toString(), mmsBackup.dateSent.toString(), threadId.toString(), mmsBackup.messageBox.toString()) - MaxLineLength:MessagesWriter.kt$MessagesWriter$val selectionArgs = arrayOf(mmsPart.contentLocation.toString(), mmsPart.contentType, messageId.toString(), mmsPart.contentId.toString()) MaxLineLength:Messaging.kt$* - MaxLineLength:Messaging.kt$fun - MaxLineLength:Messaging.kt$messagingUtils.sendSmsMessage(text, addresses.toSet(), settings.subscriptionId, settings.deliveryReports, messageId) MaxLineLength:MessagingUtils.kt$MessagingUtils$context.showErrorToast(e.localizedMessage ?: context.getString(org.fossify.commons.R.string.unknown_error_occurred)) - MaxLineLength:MessagingUtils.kt$MessagingUtils$fun MaxLineLength:MmsPart.kt$MmsPart$return !(text != null || contentType.lowercase().startsWith("text") || contentType.lowercase() == "application/smil") - MaxLineLength:MmsReceiver.kt$MmsReceiver$override fun onError(context: Context, error: String) MaxLineLength:NewConversationActivity.kt$NewConversationActivity$// READ_CONTACTS permission is not mandatory, but without it we won't be able to show any suggestions during typing - MaxLineLength:NewConversationActivity.kt$NewConversationActivity$SimpleContactsHelper(this@NewConversationActivity).loadContactImage(contact.photoUri, suggestedContactImage, contact.name) - MaxLineLength:NewConversationActivity.kt$NewConversationActivity$if - MaxLineLength:NewConversationActivity.kt$NewConversationActivity$items.add(RadioItem(index, "${phoneNumber.normalizedNumber} ($type)", phoneNumber.normalizedNumber)) - MaxLineLength:NewConversationActivity.kt$NewConversationActivity$val number = intent.dataString!!.removePrefix("sms:").removePrefix("smsto:").removePrefix("mms").removePrefix("mmsto:").replace("+", "%2b").trim() - MaxLineLength:NewConversationActivity.kt$NewConversationActivity$} - MaxLineLength:NotificationHelper.kt$NotificationHelper$PendingIntent.getActivity(context, notificationId, contentIntent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_MUTABLE) - MaxLineLength:NotificationHelper.kt$NotificationHelper$PendingIntent.getBroadcast(context, notificationId, deleteSmsIntent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_MUTABLE) - MaxLineLength:NotificationHelper.kt$NotificationHelper$PendingIntent.getBroadcast(context, notificationId, markAsReadIntent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_MUTABLE) - MaxLineLength:NotificationHelper.kt$NotificationHelper$builder.addAction(org.fossify.commons.R.drawable.ic_check_vector, context.getString(R.string.mark_as_read), markAsReadPendingIntent) - MaxLineLength:NotificationHelper.kt$NotificationHelper$private - MaxLineLength:NotificationHelper.kt$NotificationHelper$val activeStyle = NotificationCompat.MessagingStyle.extractMessagingStyleFromNotification(currentNotification.notification) - MaxLineLength:NotificationHelper.kt$NotificationHelper$val contentPendingIntent = PendingIntent.getActivity(context, notificationId, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_MUTABLE) MaxLineLength:RecycleBinConversationsAdapter.kt$RecycleBinConversationsAdapter$val conversationsToRemove = currentList.filter { selectedKeys.contains(it.hashCode()) } as ArrayList<Conversation> - MaxLineLength:ScheduleMessageDialog.kt$ScheduleMessageDialog$activity MaxLineLength:ScheduledMessageReceiver.kt$ScheduledMessageReceiver$context.showErrorToast(e.localizedMessage ?: context.getString(org.fossify.commons.R.string.unknown_error_occurred)) MaxLineLength:ScheduledMessageReceiver.kt$ScheduledMessageReceiver$val wakelock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "simple.messenger:scheduled.message.receiver") MaxLineLength:SearchResult.kt$SearchResult MaxLineLength:SearchResultsAdapter.kt$SearchResultsAdapter$SimpleContactsHelper(activity).loadContactImage(searchResult.photoUri, searchResultImage, searchResult.title) MaxLineLength:SearchResultsAdapter.kt$SearchResultsAdapter$activity: SimpleActivity - MaxLineLength:SettingsActivity.kt$SettingsActivity$ConfirmationDialog(this@SettingsActivity, "", confirmationTextId, org.fossify.commons.R.string.ok, 0) { } - MaxLineLength:SettingsActivity.kt$SettingsActivity$private - MaxLineLength:SettingsActivity.kt$SettingsActivity$settingsUseEnglishHolder.beVisibleIf((config.wasUseEnglishToggled || Locale.getDefault().language != "en") && !isTiramisuPlus()) MaxLineLength:SmsReceiver.kt$SmsReceiver$handleMessage(context, address, subject, body, date, read, threadId, type, subscriptionId, status) MaxLineLength:SmsReceiver.kt$SmsReceiver$val newMessageId = context.insertNewSMS(address, subject, body, date, read, threadId, type, subscriptionId) MaxLineLength:SmsReceiver.kt$SmsReceiver$val participant = SimpleContact(0, 0, senderName, photoUri, arrayListOf(phoneNumber), ArrayList(), ArrayList()) MaxLineLength:SmsSender.kt$SmsSender$val intent = Intent(SendStatusReceiver.SMS_DELIVERED_ACTION, requestUri, app, SmsStatusDeliveredReceiver::class.java) MaxLineLength:SmsStatusDeliveredReceiver.kt$SmsStatusDeliveredReceiver$// TODO: Need to check whether SC still trying to deliver the SMS to destination and will send the report again? - MaxLineLength:ThreadActivity.kt$ThreadActivity$(selectedContactBg as LayerDrawable).findDrawableByLayerId(R.id.selected_contact_bg).applyColorFilter(properPrimaryColor) MaxLineLength:ThreadActivity.kt$ThreadActivity$// do not show the date/time above every message, only if the difference between the 2 messages is at least MIN_DATE_TIME_DIFF_SECS, - MaxLineLength:ThreadActivity.kt$ThreadActivity$CAPTURE_VIDEO_INTENT, PICK_DOCUMENT_INTENT, CAPTURE_AUDIO_INTENT, PICK_PHOTO_INTENT, PICK_VIDEO_INTENT -> addAttachment(data) - MaxLineLength:ThreadActivity.kt$ThreadActivity$binding.messageHolder.scheduledMessageButton.text - MaxLineLength:ThreadActivity.kt$ThreadActivity$binding.messageHolder.threadSelectSimNumber.text = (availableSIMCards[currentSIMCardIndex].id).toString() - MaxLineLength:ThreadActivity.kt$ThreadActivity$deleteMessages = { messages, toRecycleBin, fromRecycleBin -> deleteMessages(messages, toRecycleBin, fromRecycleBin) } - MaxLineLength:ThreadActivity.kt$ThreadActivity$findItem(R.id.add_number_to_contact).isVisible - MaxLineLength:ThreadActivity.kt$ThreadActivity$findItem(R.id.archive).isVisible = threadItems.isNotEmpty() && conversation?.isArchived == false && !isRecycleBin && archiveAvailable - MaxLineLength:ThreadActivity.kt$ThreadActivity$findItem(R.id.rename_conversation).isVisible = participants.size > 1 && conversation != null && !isRecycleBin - MaxLineLength:ThreadActivity.kt$ThreadActivity$findItem(R.id.unarchive).isVisible = threadItems.isNotEmpty() && conversation?.isArchived == true && !isRecycleBin && archiveAvailable MaxLineLength:ThreadActivity.kt$ThreadActivity$if - MaxLineLength:ThreadActivity.kt$ThreadActivity$it.height = metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT)!!.toInt() - MaxLineLength:ThreadActivity.kt$ThreadActivity$it.width = metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH)!!.toInt() - MaxLineLength:ThreadActivity.kt$ThreadActivity$launchActivityForResult(this, PICK_SAVE_FILE_INTENT, error = org.fossify.commons.R.string.system_service_disabled) - MaxLineLength:ThreadActivity.kt$ThreadActivity$messages = messages.filter { !recycledMessages.contains(it.id) }.toMutableList() as ArrayList<Message> - MaxLineLength:ThreadActivity.kt$ThreadActivity$private MaxLineLength:ThreadActivity.kt$ThreadActivity$privateContacts.firstOrNull { it.doesHavePhoneNumber(participant.phoneNumbers.first().normalizedNumber) } - MaxLineLength:ThreadActivity.kt$ThreadActivity$updateMaterialActivityViews(binding.threadCoordinator, null, useTransparentNavigation = false, useTopSearchMenu = false) - MaxLineLength:ThreadActivity.kt$ThreadActivity$val contact = SimpleContact(number.hashCode(), number.hashCode(), number, "", arrayListOf(phoneNumber), ArrayList(), ArrayList()) - MaxLineLength:ThreadActivity.kt$ThreadActivity$val firstRowWidth = parentWidth - resources.getDimension(org.fossify.commons.R.dimen.normal_icon_size).toInt() + sideMargin / 2 - MaxLineLength:ThreadActivity.kt$ThreadActivity$val isSentFromDifferentKnownSIM = prevSIMId != -1 && message.subscriptionId != -1 && prevSIMId != message.subscriptionId - MaxLineLength:ThreadActivity.kt$ThreadActivity$val question = String.format(resources.getString(org.fossify.commons.R.string.block_confirmation), numbersString) - MaxLineLength:ThreadActivity.kt$ThreadActivity$val shouldScrollToBottom = currentList.lastOrNull() != threadItems.lastOrNull() && lastPosition - lastVisiblePosition == 1 - MaxLineLength:ThreadActivity.kt$ThreadActivity$val subscriptionId = availableSIMCards.getOrNull(currentSIMCardIndex)?.subscriptionId ?: SmsManager.getDefaultSmsSubscriptionId() - MaxLineLength:ThreadActivity.kt$ThreadActivity.<no name provided>$override fun onProgress(insets: WindowInsetsCompat, runningAnimations: MutableList<WindowInsetsAnimationCompat>) - MaxLineLength:ThreadActivity.kt$ThreadActivity.<no name provided>$val isCloseToBottom = lastVisibleItemPosition >= getOrCreateThreadAdapter().itemCount - SCROLL_TO_BOTTOM_FAB_LIMIT MaxLineLength:ThreadAdapter.kt$ThreadAdapter$// not sure how we can get UnknownFormatConversionException here, so show the error and hope that someone reports it MaxLineLength:ThreadAdapter.kt$ThreadAdapter$mimetype.isImageMimeType() || mimetype.isVideoMimeType() -> setupImageView(holder, binding = this, message, attachment) MaxLineLength:ThreadAdapter.kt$ThreadAdapter$mimetype.isVCardMimeType() -> setupVCardView(holder, threadMessageAttachmentsHolder, message, attachment) MaxLineLength:ThreadAdapter.kt$ThreadAdapter$private MaxLineLength:ThreadAdapter.kt$ThreadAdapter$private fun getSelectedItems() - MaxLineLength:ThreadAdapter.kt$ThreadAdapter$text = dateTime.date.formatDateOrTime(context, hideTimeAtOtherDays = false, showYearEvenIfCurrent = false) MaxLineLength:ThreadAdapter.kt$ThreadAdapter$threadSuccess.setImageResource(if (isDelivered) R.drawable.ic_check_double_vector else org.fossify.commons.R.drawable.ic_check_vector) MaxLineLength:ThreadAdapter.kt$ThreadAdapter$val MaxLineLength:ThreadAdapter.kt$ThreadAdapter.<no name provided>$override @@ -263,12 +190,11 @@ MaxLineLength:VCardViewerActivity.kt$VCardViewerActivity$updateMaterialActivityViews(binding.vcardViewerCoordinator, binding.contactsList, useTransparentNavigation = true, useTopSearchMenu = false) MaxLineLength:VCardViewerAdapter.kt$VCardViewerAdapter.VCardPropertyViewHolder$inner NestedBlockDepth:AttachmentUtils.kt$AttachmentUtils$private fun readBody(parser: XmlPullParser): List<String> - NestedBlockDepth:Context.kt$fun Context.getAllDrafts(): HashMap<Long, String?> - NestedBlockDepth:Context.kt$fun Context.getThreadParticipants(threadId: Long, contactsMap: HashMap<Int, SimpleContact>?): ArrayList<SimpleContact> + NestedBlockDepth:Context.kt$fun Context.getThreadParticipants( threadId: Long, contactsMap: HashMap<Int, SimpleContact>?, ): ArrayList<SimpleContact> NestedBlockDepth:MessagesImporter.kt$MessagesImporter$private fun InputStream.importXml() NestedBlockDepth:MessagesWriter.kt$MessagesWriter$@SuppressLint("NewApi") private fun writeMmsPart(mmsPart: MmsPart, messageId: Long) - NestedBlockDepth:Messaging.kt$fun Context.sendMessageCompat(text: String, addresses: List<String>, subId: Int?, attachments: List<Attachment>, messageId: Long? = null) - NestedBlockDepth:MessagingUtils.kt$MessagingUtils$@Deprecated("TODO: Move/rewrite MMS code into the app.") fun sendMmsMessage(text: String, addresses: List<String>, attachment: Attachment?, settings: Settings, messageId: Long? = null) + NestedBlockDepth:Messaging.kt$fun Context.sendMessageCompat( text: String, addresses: List<String>, subId: Int?, attachments: List<Attachment>, messageId: Long? = null ) + NestedBlockDepth:MessagingUtils.kt$MessagingUtils$@Deprecated("TODO: Move/rewrite MMS code into the app.") fun sendMmsMessage( text: String, addresses: List<String>, attachment: Attachment?, settings: Settings, messageId: Long? = null ) NestedBlockDepth:MessagingUtils.kt$MessagingUtils$fun updateSmsMessageSendingStatus(messageUri: Uri?, type: Int) NestedBlockDepth:SmsStatusDeliveredReceiver.kt$SmsStatusDeliveredReceiver$override fun updateAndroidDatabase(context: Context, intent: Intent, receiverResultCode: Int) NestedBlockDepth:ThreadActivity.kt$ThreadActivity$private fun fetchNextMessages() @@ -283,27 +209,26 @@ ReturnCount:Context.kt$fun Context.getNameAndPhotoFromPhoneNumber(number: String): NamePhoto ReturnCount:MapDeserializerDoubleAsIntFix.kt$MapDeserializerDoubleAsIntFix$fun read(element: JsonElement): Any? ReturnCount:MessagesReader.kt$MessagesReader$@SuppressLint("NewApi") private fun usePart(partId: Long, block: (InputStream) -> String): String + ReturnCount:ShortcutHelper.kt$ShortcutHelper$fun shouldPresentShortcut(conv: Conversation): Boolean + ReturnCount:SmsIntentParser.kt$SmsIntentParser$private fun extractBodyFromUri(uri: Uri?): String? + ReturnCount:SmsIntentParser.kt$SmsIntentParser$private fun parseRecipientsFromUri(uri: Uri?): Array<String>? ReturnCount:ThreadActivity.kt$ThreadActivity$private fun addAttachment(uri: Uri) ReturnCount:VCardParser.kt$fun VCard?.parseNameFromVCard(): String? SpreadOperator:Context.kt$(*scheduledMessages) SpreadOperator:MainActivity.kt$MainActivity$(*currentMessages.toTypedArray()) SpreadOperator:ThreadActivity.kt$ThreadActivity$(*currentMessages.toTypedArray()) - SwallowedException:Activity.kt$e: ActivityNotFoundException SwallowedException:ArchivedConversationsActivity.kt$ArchivedConversationsActivity$e: Exception SwallowedException:AttachmentPreviews.kt$e: Exception - SwallowedException:Context.kt$e: Exception - SwallowedException:Context.kt$e: FileNotFoundException + SwallowedException:BlockedKeywordsExporter.kt$BlockedKeywordsExporter$e: Exception SwallowedException:ImageCompressor.kt$ImageCompressor$e: Exception SwallowedException:JsonElement.kt$e: Exception - SwallowedException:MainActivity.kt$MainActivity$e: Exception - SwallowedException:MessagesImporter.kt$MessagesImporter$e: Exception - SwallowedException:MessagesImporter.kt$MessagesImporter$e: IllegalArgumentException - SwallowedException:MessagesImporter.kt$MessagesImporter$e: SerializationException SwallowedException:MessagesReader.kt$MessagesReader$e: IOException SwallowedException:MessagesWriter.kt$MessagesWriter$e: Exception SwallowedException:MmsReceiver.kt$MmsReceiver$e: Exception SwallowedException:NewConversationActivity.kt$NewConversationActivity$e: Exception SwallowedException:RecycleBinConversationsActivity.kt$RecycleBinConversationsActivity$e: Exception + SwallowedException:SimpleContact.kt$e: Exception + SwallowedException:SmsIntentParser.kt$SmsIntentParser$e: UnsupportedEncodingException SwallowedException:SmsStatusDeliveredReceiver.kt$SmsStatusDeliveredReceiver$e: NullPointerException SwallowedException:ThreadActivity.kt$ThreadActivity$e: ActivityNotFoundException SwallowedException:ThreadActivity.kt$ThreadActivity$e: Exception @@ -314,12 +239,16 @@ TooGenericExceptionCaught:Activity.kt$e: Exception TooGenericExceptionCaught:ArchivedConversationsActivity.kt$ArchivedConversationsActivity$e: Exception TooGenericExceptionCaught:AttachmentPreviews.kt$e: Exception + TooGenericExceptionCaught:BlockedKeywordsExporter.kt$BlockedKeywordsExporter$e: Exception + TooGenericExceptionCaught:BlockedKeywordsImporter.kt$BlockedKeywordsImporter$e: Exception TooGenericExceptionCaught:Context.kt$e: Exception TooGenericExceptionCaught:DirectReplyReceiver.kt$DirectReplyReceiver$e: Exception + TooGenericExceptionCaught:ExportMessagesDialog.kt$ExportMessagesDialog$e: Throwable TooGenericExceptionCaught:ImageCompressor.kt$ImageCompressor$e: Exception TooGenericExceptionCaught:JsonElement.kt$e: Exception - TooGenericExceptionCaught:MainActivity.kt$MainActivity$e: Exception + TooGenericExceptionCaught:ManageBlockedKeywordsActivity.kt$ManageBlockedKeywordsActivity$e: Exception TooGenericExceptionCaught:MessagesImporter.kt$MessagesImporter$e: Exception + TooGenericExceptionCaught:MessagesImporter.kt$MessagesImporter$e: Throwable TooGenericExceptionCaught:MessagesWriter.kt$MessagesWriter$e: Exception TooGenericExceptionCaught:Messaging.kt$e: Exception TooGenericExceptionCaught:MessagingUtils.kt$MessagingUtils$e: Error @@ -329,7 +258,7 @@ TooGenericExceptionCaught:RecycleBinConversationsActivity.kt$RecycleBinConversationsActivity$e: Exception TooGenericExceptionCaught:ScheduledMessageReceiver.kt$ScheduledMessageReceiver$e: Error TooGenericExceptionCaught:ScheduledMessageReceiver.kt$ScheduledMessageReceiver$e: Exception - TooGenericExceptionCaught:SettingsActivity.kt$SettingsActivity$e: Exception + TooGenericExceptionCaught:SimpleContact.kt$e: Exception TooGenericExceptionCaught:SmsManager.kt$e: Exception TooGenericExceptionCaught:SmsSender.kt$SmsSender$e: Exception TooGenericExceptionCaught:SmsStatusDeliveredReceiver.kt$SmsStatusDeliveredReceiver$e: NullPointerException @@ -345,18 +274,20 @@ TooManyFunctions:ConversationsDao.kt$ConversationsDao TooManyFunctions:JsonObject.kt$org.fossify.messages.extensions.gson.JsonObject.kt TooManyFunctions:MainActivity.kt$MainActivity : SimpleActivity + TooManyFunctions:ManageBlockedKeywordsActivity.kt$ManageBlockedKeywordsActivity : SimpleActivityRefreshRecyclerViewListener TooManyFunctions:ManageBlockedKeywordsAdapter.kt$ManageBlockedKeywordsAdapter : MyRecyclerViewAdapter TooManyFunctions:MessagesDao.kt$MessagesDao + TooManyFunctions:MessagesWriter.kt$MessagesWriter TooManyFunctions:RecycleBinConversationsActivity.kt$RecycleBinConversationsActivity : SimpleActivity TooManyFunctions:SearchResultsAdapter.kt$SearchResultsAdapter : MyRecyclerViewAdapter TooManyFunctions:SettingsActivity.kt$SettingsActivity : SimpleActivity + TooManyFunctions:ShortcutHelper.kt$ShortcutHelper TooManyFunctions:ThreadActivity.kt$ThreadActivity : SimpleActivity TooManyFunctions:ThreadAdapter.kt$ThreadAdapter : MyRecyclerViewListAdapter UnusedParameter:ArchivedConversationsActivity.kt$ArchivedConversationsActivity$event: Events.RefreshMessages UnusedParameter:MainActivity.kt$MainActivity$event: Events.RefreshMessages UnusedParameter:RecycleBinConversationsActivity.kt$RecycleBinConversationsActivity$event: Events.RefreshMessages UnusedParameter:ThreadActivity.kt$ThreadActivity$event: Events.RefreshMessages - UnusedPrivateMember:MessagesImporter.kt$MessagesImporter$private fun isJsonMimeType(mimeType: String): Boolean UseCheckOrError:AttachmentUtils.kt$AttachmentUtils$throw IllegalStateException() UseCheckOrError:MessagesImporter.kt$MessagesImporter$throw IllegalStateException() UseRequire:SmsSender.kt$SmsSender$throw IllegalArgumentException("SmsSender: empty text message") @@ -367,56 +298,18 @@ VariableNaming:ThreadActivity.kt$ThreadActivity$private val TYPE_DELETE = 16 VariableNaming:ThreadActivity.kt$ThreadActivity$private val TYPE_EDIT = 14 VariableNaming:ThreadActivity.kt$ThreadActivity$private val TYPE_SEND = 15 - WildcardImport:Activity.kt$import org.fossify.commons.extensions.* WildcardImport:ArchivedConversationsActivity.kt$import org.fossify.commons.extensions.* WildcardImport:AttachmentPreviews.kt$import org.fossify.commons.extensions.* WildcardImport:AttachmentPreviews.kt$import org.fossify.messages.extensions.* WildcardImport:AttachmentsAdapter.kt$import org.fossify.commons.extensions.* WildcardImport:AttachmentsAdapter.kt$import org.fossify.messages.extensions.* WildcardImport:AttachmentsAdapter.kt$import org.fossify.messages.helpers.* - WildcardImport:BaseConversationsAdapter.kt$import org.fossify.commons.extensions.* - WildcardImport:Context.kt$import android.provider.Telephony.* - WildcardImport:Context.kt$import org.fossify.commons.extensions.* - WildcardImport:Context.kt$import org.fossify.commons.helpers.* - WildcardImport:Context.kt$import org.fossify.messages.helpers.* - WildcardImport:Context.kt$import org.fossify.messages.models.* - WildcardImport:ConversationDetailsActivity.kt$import org.fossify.commons.extensions.* - WildcardImport:ConversationDetailsActivity.kt$import org.fossify.messages.extensions.* - WildcardImport:ConversationsAdapter.kt$import org.fossify.commons.extensions.* - WildcardImport:ConversationsAdapter.kt$import org.fossify.messages.extensions.* WildcardImport:DirectReplyReceiver.kt$import org.fossify.messages.extensions.* - WildcardImport:ExportMessagesDialog.kt$import org.fossify.commons.extensions.* WildcardImport:JsonElement.kt$import com.google.gson.* - WildcardImport:MainActivity.kt$import org.fossify.commons.extensions.* - WildcardImport:MainActivity.kt$import org.fossify.commons.helpers.* - WildcardImport:MainActivity.kt$import org.fossify.messages.extensions.* - WildcardImport:ManageBlockedKeywordsActivity.kt$import org.fossify.commons.extensions.* WildcardImport:ManageBlockedKeywordsAdapter.kt$import android.view.* WildcardImport:MessagesDao.kt$import androidx.room.* - WildcardImport:MessagesDatabase.kt$import org.fossify.messages.models.* - WildcardImport:MessagesImporter.kt$import org.fossify.messages.models.* - WildcardImport:MessagesReader.kt$import org.fossify.commons.extensions.* - WildcardImport:MessagesReader.kt$import org.fossify.messages.models.* - WildcardImport:MmsReceiver.kt$import org.fossify.messages.extensions.* - WildcardImport:NewConversationActivity.kt$import org.fossify.commons.extensions.* - WildcardImport:NewConversationActivity.kt$import org.fossify.commons.helpers.* - WildcardImport:NewConversationActivity.kt$import org.fossify.messages.helpers.* - WildcardImport:RecycleBinConversationsActivity.kt$import org.fossify.commons.extensions.* - WildcardImport:ScheduleMessageDialog.kt$import org.fossify.commons.extensions.* - WildcardImport:SettingsActivity.kt$import org.fossify.commons.dialogs.* - WildcardImport:SettingsActivity.kt$import org.fossify.commons.extensions.* - WildcardImport:SettingsActivity.kt$import org.fossify.commons.helpers.* - WildcardImport:SettingsActivity.kt$import org.fossify.messages.helpers.* WildcardImport:SmsReceiver.kt$import org.fossify.messages.extensions.* WildcardImport:SmsStatusSentReceiver.kt$import org.fossify.messages.extensions.* - WildcardImport:ThreadActivity.kt$import androidx.core.view.* - WildcardImport:ThreadActivity.kt$import org.fossify.commons.extensions.* - WildcardImport:ThreadActivity.kt$import org.fossify.commons.helpers.* - WildcardImport:ThreadActivity.kt$import org.fossify.messages.extensions.* - WildcardImport:ThreadActivity.kt$import org.fossify.messages.helpers.* - WildcardImport:ThreadActivity.kt$import org.fossify.messages.messaging.* - WildcardImport:ThreadActivity.kt$import org.fossify.messages.models.* - WildcardImport:ThreadActivity.kt$import org.fossify.messages.models.ThreadItem.* WildcardImport:ThreadAdapter.kt$import org.fossify.commons.extensions.* WildcardImport:ThreadAdapter.kt$import org.fossify.messages.databinding.* WildcardImport:ThreadAdapter.kt$import org.fossify.messages.extensions.* diff --git a/app/lint-baseline.xml b/app/lint-baseline.xml index 328e901f..ee99eb23 100644 --- a/app/lint-baseline.xml +++ b/app/lint-baseline.xml @@ -1,5 +1,5 @@ - + + id="OldTargetApi" + message="Not targeting the latest versions of Android; compatibility modes apply. Consider testing and updating this version. Consult the `android.os.Build.VERSION_CODES` javadoc for details." + errorLine1="app-build-targetSDK = "34"" + errorLine2=" ~~~~"> - - - - + file="$HOME/Projects/Fossify/FossifyOrg/Messages/gradle/libs.versions.toml" + line="25" + column="23"/> - - - - - - - - @@ -79,69 +46,80 @@ + id="AndroidGradlePluginVersion" + message="A newer version of Gradle than 8.11.1 is available: 8.14.2" + errorLine1="distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + column="17"/> - - - - - - - - - - - - + message="A newer version of androidx.room:room-compiler than 2.7.1 is available: 2.7.2" + errorLine1="room = "2.7.1"" + errorLine2=" ~~~~~~~"> + file="$HOME/Projects/Fossify/FossifyOrg/Messages/gradle/libs.versions.toml" + line="16" + column="8"/> + + + + + + + + + + + + + + + + - - - - - - - - + + + + + message=""keywords" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "el" (Greek), "en" (English), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "ar" (Arabic), "vi" (Vietnamese), "nb" (Norwegian Bokmål), "ja" (Japanese), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "ro" (Romanian), "nn" (Norwegian Nynorsk), "be" (Belarusian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "sk" (Slovak), "sl" (Slovenian), "zgh" (Standard Moroccan Tamazight), "ltg", "sr" (Serbian), "kn" (Kannada), "or" (Odia), "ko" (Korean), "gl" (Galician), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "gu" (Gujarati), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb"" + errorLine1=" <string name="keywords">Keywords</string>" + errorLine2=" ~~~~~~~~~~~~~~~"> + message=""export_messages" is not translated in "fil" (Filipino; Pilipino), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "ne" (Nepali), "az" (Azerbaijani), "nn" (Norwegian Nynorsk), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "gl" (Galician), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb"" + errorLine1=" <string name="export_messages">Export messages</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> + message=""export_mms" is not translated in "fil" (Filipino; Pilipino), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "ne" (Nepali), "az" (Azerbaijani), "nn" (Norwegian Nynorsk), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb"" + errorLine1=" <string name="export_mms">Export MMS</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~"> + message=""import_messages" is not translated in "fil" (Filipino; Pilipino), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "ne" (Nepali), "az" (Azerbaijani), "nn" (Norwegian Nynorsk), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "gl" (Galician), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb"" + errorLine1=" <string name="import_messages">Import messages</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> + message=""import_mms" is not translated in "fil" (Filipino; Pilipino), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "ne" (Nepali), "az" (Azerbaijani), "nn" (Norwegian Nynorsk), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb"" + errorLine1=" <string name="import_mms">Import MMS</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~"> + message=""no_option_selected" is not translated in "fil" (Filipino; Pilipino), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "ne" (Nepali), "az" (Azerbaijani), "nn" (Norwegian Nynorsk), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "cr" (Cree), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb"" + errorLine1=" <string name="no_option_selected">You have to select at least one item</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> + + + + + message=""import_blocked_keywords" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "el" (Greek), "en" (English), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "ar" (Arabic), "vi" (Vietnamese), "nb" (Norwegian Bokmål), "ja" (Japanese), "ne" (Nepali), "az" (Azerbaijani), "fa" (Persian), "ro" (Romanian), "nn" (Norwegian Nynorsk), "be" (Belarusian), "bn" (Bangla), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "sk" (Slovak), "sl" (Slovenian), "zgh" (Standard Moroccan Tamazight), "ltg", "sr" (Serbian), "kn" (Kannada), "or" (Odia), "ko" (Korean), "gl" (Galician), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb"" + errorLine1=" <string name="import_blocked_keywords">Import blocked keywords</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> - - - - + message=""empty_destination_address" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "ne" (Nepali), "az" (Azerbaijani), "nn" (Norwegian Nynorsk), "be" (Belarusian), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "sr" (Serbian), "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb"" + errorLine1=" <string name="empty_destination_address">Can\'t send message to an empty number</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + message=""unable_to_save_message" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "ne" (Nepali), "az" (Azerbaijani), "nn" (Norwegian Nynorsk), "be" (Belarusian), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "sr" (Serbian), "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "gu" (Gujarati), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb"" + errorLine1=" <string name="unable_to_save_message">Unable to save message to the telephony database</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + message=""error_service_is_unavailable" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "ne" (Nepali), "az" (Azerbaijani), "nn" (Norwegian Nynorsk), "be" (Belarusian), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "sr" (Serbian), "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb"" + errorLine1=" <string name="error_service_is_unavailable">Couldn\'t send message, service unavailable</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + message=""error_radio_turned_off" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "ne" (Nepali), "az" (Azerbaijani), "nn" (Norwegian Nynorsk), "be" (Belarusian), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "sr" (Serbian), "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb"" + errorLine1=" <string name="error_radio_turned_off">Couldn\'t send message, radio turned off</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + message=""carrier_send_error" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "ne" (Nepali), "az" (Azerbaijani), "nn" (Norwegian Nynorsk), "be" (Belarusian), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "sr" (Serbian), "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb"" + errorLine1=" <string name="carrier_send_error">Couldn\'t send message, carrier error</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> + message=""unknown_error_occurred_sending_message" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "ne" (Nepali), "az" (Azerbaijani), "nn" (Norwegian Nynorsk), "be" (Belarusian), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "sr" (Serbian), "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb"" + errorLine1=" <string name="unknown_error_occurred_sending_message">Couldn\'t send message, error code: %d</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + message=""invalid_short_code" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "ne" (Nepali), "az" (Azerbaijani), "nn" (Norwegian Nynorsk), "be" (Belarusian), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "sr" (Serbian), "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "gu" (Gujarati), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb"" + errorLine1=" <string name="invalid_short_code">Can\'t reply to short codes like this</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> + message=""invalid_short_code_desc" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "ne" (Nepali), "az" (Azerbaijani), "nn" (Norwegian Nynorsk), "be" (Belarusian), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "sr" (Serbian), "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "gu" (Gujarati), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb"" + errorLine1=" <string name="invalid_short_code_desc">You can only reply to short codes with numbers like \"503501\" but not to codes containing letters and numbers like \"AB-CD0\".</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + message=""attachment_sized_exceeds_max_limit" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "ne" (Nepali), "az" (Azerbaijani), "nn" (Norwegian Nynorsk), "be" (Belarusian), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "sr" (Serbian), "kn" (Kannada), "or" (Odia), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "gu" (Gujarati), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb"" + errorLine1=" <string name="attachment_sized_exceeds_max_limit">Attachment size exceeds max MMS limit</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + + + + + message=""couldnt_download_mms" is not translated in "fil" (Filipino; Pilipino), "lt" (Lithuanian), "ia" (Interlingua), "mk" (Macedonian), "ml" (Malayalam), "ms" (Malay), "en" (English), "is" (Icelandic), "my" (Burmese), "eu" (Basque), "ne" (Nepali), "az" (Azerbaijani), "nn" (Norwegian Nynorsk), "be" (Belarusian), "br" (Breton), "bs" (Bosnian), "si" (Sinhala), "zgh" (Standard Moroccan Tamazight), "ltg", "sr" (Serbian), "kn" (Kannada), "or" (Odia), "gl" (Galician), "kr" (Kanuri), "sat" (Santali), "ta" (Tamil), "gu" (Gujarati), "cr" (Cree), "pa" (Punjabi), "te" (Telugu), "th" (Thai), "cy" (Welsh), "ckb"" + errorLine1=" <string name="couldnt_download_mms">Couldn\'t download MMS</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + + + + + + + + @@ -1475,28 +1475,6 @@ column="288"/> - - - - - - - - + + + + + + + + @@ -1548,18 +1548,7 @@ errorLine2=" ~~~~~~~~"> - - - - @@ -1574,28 +1563,6 @@ column="36"/> - - - - - - - - + id="ObsoleteSdkInt" + message="This folder configuration (`v26`) is unnecessary; `minSdkVersion` is 26. Merge all the resources in this folder into `mipmap-anydpi`."> + file="src/main/res/mipmap-anydpi-v26"/> - - - - + + + + @@ -1841,7 +1808,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~"> @@ -1857,31 +1824,423 @@ + id="UnnecessaryRequiredFeature" + message="Consider whether this feature (`android.hardware.telephony`) really is required for the app to function; you can set `android:required="false"` to indicate that the feature is used but not required" + errorLine1=" <uses-feature android:name="android.hardware.telephony" />" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~"> - - - - + file="src/main/AndroidManifest.xml" + line="28" + column="33"/> + id="UseKtx" + message="Use the KTX extension function `String.toUri` instead?" + errorLine1=" fun getUri() = Uri.parse(uriString)" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1948,28 +2307,6 @@ column="6"/> - - - - - - - - + errorLine1=" exportBlockedKeywordsFilename.setText("${activity.getString(R.string.blocked_keywords)}_${activity.getCurrentFormattedDateTime()}")" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> - - - - - - - - + file="src/main/kotlin/org/fossify/messages/dialogs/ExportBlockedKeywordsDialog.kt" + line="37" + column="55"/> + errorLine1=" android:paddingStart="@dimen/small_margin"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~"> + file="src/main/res/layout/dialog_export_blocked_keywords.xml" + line="29" + column="13"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +