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

Commit b2c232e4 authored by ByteHamster's avatar ByteHamster Committed by cketti
Browse files

Search function for general settings

parent 7b105d7c
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -19,6 +19,8 @@ dependencies {
    implementation project(':plugins:openpgp-api-lib:openpgp-api')

    implementation "com.android.support:appcompat-v7:${versions.supportLibrary}"
    implementation "com.android.support:preference-v14:${versions.supportLibrary}"
    implementation "com.android.support:cardview-v7:${versions.supportLibrary}"
    implementation "com.takisoft.fix:preference-v7:${versions.preferencesFix}"
    implementation "com.takisoft.fix:preference-v7-datetimepicker:${versions.preferencesFix}"
    implementation "com.takisoft.fix:preference-v7-colorpicker:${versions.preferencesFix}"
@@ -33,6 +35,7 @@ dependencies {
    implementation "com.xwray:groupie:2.1.0"
    implementation "com.xwray:groupie-kotlin-android-extensions:2.1.0"
    implementation 'com.mikepenz:materialdrawer:6.0.7'
    implementation 'com.github.ByteHamster:SearchPreference:v1.1.4'

    implementation "commons-io:commons-io:${versions.commonsIo}"
    implementation "androidx.core:core-ktx:${versions.coreKtx}"
+85 −1
Original line number Diff line number Diff line
@@ -3,16 +3,27 @@ package com.fsck.k9.ui.settings.general
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.os.Handler
import android.support.v7.preference.PreferenceFragmentCompat
import android.support.v7.preference.PreferenceFragmentCompat.OnPreferenceStartScreenCallback
import android.support.v7.preference.PreferenceScreen
import android.util.Log
import android.view.Menu
import android.view.MenuItem
import com.bytehamster.lib.preferencesearch.SearchPreferenceActionView
import com.bytehamster.lib.preferencesearch.SearchPreferenceResult
import com.bytehamster.lib.preferencesearch.SearchPreferenceResultListener
import com.fsck.k9.activity.K9Activity
import com.fsck.k9.activity.setup.FontSizeSettings
import com.fsck.k9.ui.R
import com.fsck.k9.ui.fragmentTransaction
import com.fsck.k9.ui.fragmentTransactionWithBackStack

class GeneralSettingsActivity : K9Activity(), OnPreferenceStartScreenCallback {
class GeneralSettingsActivity : K9Activity(), OnPreferenceStartScreenCallback, SearchPreferenceResultListener {
    private lateinit var searchPreferenceActionView: SearchPreferenceActionView
    private lateinit var searchPreferenceMenuItem: MenuItem
    private lateinit var searchQuery: String
    private var searchEnabled = false

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
@@ -24,6 +35,26 @@ class GeneralSettingsActivity : K9Activity(), OnPreferenceStartScreenCallback {
            fragmentTransaction {
                add(R.id.generalSettingsContainer, GeneralSettingsFragment.create())
            }
        } else {
            searchQuery = savedInstanceState.getString(KEY_SEARCH_QUERY)
            searchEnabled = savedInstanceState.getBoolean(KEY_SEARCH_ENABLED)
        }
    }

    override fun onSearchResultClicked(result: SearchPreferenceResult) {
        searchPreferenceActionView.close()
        searchPreferenceMenuItem.collapseActionView()

        if (result.resourceFile == R.xml.font_preferences) {
            startActivity(Intent(this, FontSizeSettings::class.java))
        } else {
            val fragment = GeneralSettingsFragment.create(result.screen)
            fragmentTransaction {
                addToBackStack("Search result")
                replace(R.id.generalSettingsContainer, fragment)
            }

            result.highlight(fragment as PreferenceFragmentCompat?, 0x009688) // Default material accent color
        }
    }

@@ -32,6 +63,44 @@ class GeneralSettingsActivity : K9Activity(), OnPreferenceStartScreenCallback {
        actionBar.setDisplayHomeAsUpEnabled(true)
    }

    override fun onCreateOptionsMenu(menu: Menu): Boolean {
        menuInflater.inflate(R.menu.general_settings_option, menu)
        searchPreferenceMenuItem = menu.findItem(R.id.search)
        searchPreferenceActionView = searchPreferenceMenuItem.actionView as SearchPreferenceActionView
        searchPreferenceActionView.setActivity(this)
        val config = searchPreferenceActionView.searchConfiguration
        config.setFragmentContainerViewId(R.id.generalSettingsContainer)
        config.setBreadcrumbsEnabled(true)
        config.setFuzzySearchEnabled(true)
        config.index().addFile(R.xml.general_settings)
        config.index().addBreadcrumb(R.string.general_settings_title)
                .addBreadcrumb(R.string.display_preferences)
                .addBreadcrumb(R.string.global_preferences)
                .addBreadcrumb(R.string.font_size_settings_title)
                .addFile(R.xml.font_preferences)

        searchPreferenceMenuItem.setOnActionExpandListener(object : MenuItem.OnActionExpandListener {
            override fun onMenuItemActionCollapse(item: MenuItem): Boolean {
                searchPreferenceActionView.onBackPressed()
                return true
            }

            override fun onMenuItemActionExpand(item: MenuItem): Boolean {
                return true
            }
        })

        if (searchEnabled) {
            Handler().post {
                // If we do not use a handler here, it will not be possible
                // to use the menuItem after dismissing the searchView
                searchPreferenceMenuItem.expandActionView()
                searchPreferenceActionView.setQuery(searchQuery, false)
            }
        }
        return true
    }

    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        if (item.itemId == android.R.id.home) {
            onBackPressed()
@@ -41,6 +110,12 @@ class GeneralSettingsActivity : K9Activity(), OnPreferenceStartScreenCallback {
        return super.onOptionsItemSelected(item)
    }

    override fun onBackPressed() {
        if (!searchPreferenceActionView.onBackPressed()) {
            super.onBackPressed()
        }
    }

    override fun onPreferenceStartScreen(
            caller: PreferenceFragmentCompat, preferenceScreen: PreferenceScreen
    ): Boolean {
@@ -53,9 +128,18 @@ class GeneralSettingsActivity : K9Activity(), OnPreferenceStartScreenCallback {


    companion object {
        private const val KEY_SEARCH_QUERY = "search_query"
        private const val KEY_SEARCH_ENABLED = "search_enabled"
        fun start(context: Context) {
            val intent = Intent(context, GeneralSettingsActivity::class.java)
            context.startActivity(intent)
        }
    }

    override fun onSaveInstanceState(outState: Bundle) {
        outState.putString(KEY_SEARCH_QUERY, searchPreferenceActionView.query.toString())
        outState.putBoolean(KEY_SEARCH_ENABLED, !searchPreferenceActionView.isIconified)
        searchPreferenceActionView.onBackPressed()
        super.onSaveInstanceState(outState)
    }
}
+14 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/search"
        android:title="@string/search_action"
        android:icon="?attr/iconActionSearch"
        app:showAsAction="collapseActionView|ifRoom"
        app:actionViewClass="com.bytehamster.lib.preferencesearch.SearchPreferenceActionView"
        android:showAsAction="collapseActionView|ifRoom"
        android:actionViewClass="com.bytehamster.lib.preferencesearch.SearchPreferenceActionView" />

</menu>
+30 −8
Original line number Diff line number Diff line
@@ -3,12 +3,15 @@
<PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:title="@string/general_settings_title">
    xmlns:search="http://schemas.android.com/apk/com.bytehamster.lib.preferencesearch"
    android:title="@string/general_settings_title"
    search:ignore="true">

    <PreferenceScreen
        android:icon="?attr/iconPreferencesDisplay"
        android:key="display_preferences"
        android:title="@string/display_preferences">
        android:title="@string/display_preferences"
        search:ignore="true">

        <PreferenceCategory
            android:key="global_preferences"
@@ -20,6 +23,7 @@
                android:entryValues="@array/language_values"
                android:key="language"
                android:summary="%s"
                search:summary=""
                android:title="@string/settings_language_label" />

            <ListPreference
@@ -28,12 +32,14 @@
                android:entryValues="@array/theme_values"
                android:key="theme"
                android:summary="%s"
                search:summary=""
                android:title="@string/settings_theme_label" />

            <CheckBoxPreference
                android:key="fixed_message_view_theme"
                android:summaryOff="@string/settings_message_theme_selection_summary_off"
                android:summaryOn="@string/settings_message_theme_selection_summary_on"
                search:summary=""
                android:title="@string/settings_message_theme_selection_label" />

            <ListPreference
@@ -43,6 +49,7 @@
                android:entryValues="@array/message_theme_values"
                android:key="messageViewTheme"
                android:summary="%s"
                search:summary=""
                android:title="@string/settings_message_theme_label" />

            <ListPreference
@@ -51,6 +58,7 @@
                android:entryValues="@array/message_theme_values"
                android:key="message_compose_theme"
                android:summary="%s"
                search:summary=""
                android:title="@string/settings_compose_theme_label" />

            <Preference
@@ -114,6 +122,7 @@
                android:entryValues="@array/preview_lines_values"
                android:key="messagelist_preview_lines"
                android:summary="%s"
                search:summary=""
                android:title="@string/global_settings_preview_lines_label" />

            <CheckBoxPreference
@@ -180,6 +189,7 @@
                android:entryValues="@array/splitview_mode_values"
                android:key="splitview_mode"
                android:summary="%s"
                search:summary=""
                android:title="@string/global_settings_splitview_mode_label" />

        </PreferenceCategory>
@@ -213,7 +223,8 @@
    <PreferenceScreen
        android:icon="?attr/iconPreferencesInteraction"
        android:key="interaction_preferences"
        android:title="@string/interaction_preferences">
        android:title="@string/interaction_preferences"
        search:ignore="true">

        <CheckBoxPreference
            android:key="start_integrated_inbox"
@@ -254,7 +265,8 @@
    <PreferenceScreen
        android:icon="?attr/iconPreferencesNotifications"
        android:key="notification_preferences"
        android:title="@string/notifications_title">
        android:title="@string/notifications_title"
        search:ignore="true">

        <CheckBoxPreference
            android:key="quiet_time_enabled"
@@ -272,6 +284,7 @@
            android:key="quiet_time_starts"
            android:title="@string/quiet_time_starts"
            app:pref_hourFormat="h24"
            search:summary=""
            app:pref_summaryHasTime="%s" />

        <com.takisoft.fix.support.v7.preference.TimePickerPreference
@@ -279,6 +292,7 @@
            android:key="quiet_time_ends"
            android:title="@string/quiet_time_ends"
            app:pref_hourFormat="h24"
            search:summary=""
            app:pref_summaryHasTime="%s" />

        <ListPreference
@@ -287,6 +301,7 @@
            android:entryValues="@array/notification_quick_delete_values"
            android:key="notification_quick_delete"
            android:summary="%s"
            search:summary=""
            android:title="@string/global_settings_notification_quick_delete_title" />

        <ListPreference
@@ -295,6 +310,7 @@
            android:entryValues="@array/lock_screen_notification_visibility_values"
            android:key="lock_screen_notification_visibility"
            android:summary="%s"
            search:summary=""
            android:title="@string/global_settings_lock_screen_notification_visibility_title" />

    </PreferenceScreen>
@@ -302,7 +318,8 @@
    <PreferenceScreen
        android:icon="?attr/iconPreferencesNetwork"
        android:key="network_preferences"
        android:title="@string/network_preferences">
        android:title="@string/network_preferences"
        search:ignore="true">

        <ListPreference
            android:dialogTitle="@string/background_ops_label"
@@ -310,6 +327,7 @@
            android:entryValues="@array/background_ops_values"
            android:key="background_ops"
            android:summary="%s"
            search:summary=""
            android:title="@string/background_ops_label" />

    </PreferenceScreen>
@@ -317,7 +335,8 @@
    <PreferenceScreen
        android:icon="?attr/iconPreferencesVarious"
        android:key="misc_preferences"
        android:title="@string/miscellaneous_preferences">
        android:title="@string/miscellaneous_preferences"
        search:ignore="true">

        <Preference
            android:key="attachment_default_path"
@@ -328,13 +347,15 @@
    <PreferenceScreen
        android:icon="?attr/iconPreferencesPrivacy"
        android:key="privacy_preferences"
        android:title="@string/privacy_preferences">
        android:title="@string/privacy_preferences"
        search:ignore="true">

        <ListPreference
            android:entries="@array/notification_hide_subject_entries"
            android:entryValues="@array/notification_hide_subject_values"
            android:key="notification_hide_subject"
            android:summary="%s"
            search:summary=""
            android:title="@string/global_settings_notification_hide_subject_title" />

        <CheckBoxPreference
@@ -357,7 +378,8 @@
    <PreferenceScreen
        android:icon="?attr/iconPreferencesDebug"
        android:key="debug_preferences"
        android:title="@string/debug_preferences">
        android:title="@string/debug_preferences"
        search:ignore="true">

        <CheckBoxPreference
            android:key="debug_logging"
+1 −0
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ subprojects {
    repositories {
        jcenter()
        google()
        maven { url 'https://jitpack.io' }
    }

    configurations.all {