Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit 5cec85cb authored by cketti's avatar cketti Committed by GitHub
Browse files

Merge pull request #4958 from k9mail/GH-3653_fix_search_crash

Return empty result when EmailProvider query fails
parents 172f98cd 7992be90
Loading
Loading
Loading
Loading
+17 −1
Original line number Diff line number Diff line
package com.fsck.k9.ui.messagelist

import android.annotation.SuppressLint
import android.content.ContentResolver
import android.database.Cursor
import android.database.MatrixCursor
import android.database.sqlite.SQLiteException
import android.net.Uri
import com.fsck.k9.Account
import com.fsck.k9.Account.SortType
import com.fsck.k9.K9
import com.fsck.k9.Preferences
import com.fsck.k9.fragment.MLFProjectionInfo
import com.fsck.k9.fragment.MessageListFragmentComparators.ArrivalComparator
@@ -26,6 +30,7 @@ import com.fsck.k9.search.SqlQueryBuilder
import com.fsck.k9.search.getAccounts
import java.util.ArrayList
import java.util.Comparator
import timber.log.Timber

class MessageListLoader(
    private val preferences: Preferences,
@@ -62,6 +67,7 @@ class MessageListLoader(
        return MessageListInfo(messageListItems, hasMoreMessages)
    }

    @SuppressLint("Recycle")
    private fun loadMessageListForAccount(account: Account, config: MessageListConfig): Cursor? {
        val accountUuid = account.uuid
        val threadId: String? = getThreadId(config.search)
@@ -110,7 +116,17 @@ class MessageListLoader(

        val sortOrder: String = buildSortOrder(config)

        return contentResolver.query(uri, projection, selection, selectionArgs, sortOrder)
        return try {
            contentResolver.query(uri, projection, selection, selectionArgs, sortOrder)
        } catch (e: SQLiteException) {
            Timber.e(e, "Error querying EmailProvider")

            if (K9.DEVELOPER_MODE && e.message?.contains("malformed MATCH expression") == false) {
                throw e
            }

            return MatrixCursor(projection)
        }
    }

    private fun getThreadId(search: LocalSearch): String? {