diff --git a/app/src/main/java/de/kuschku/quasseldroid/dagger/SettingsModule.kt b/app/src/main/java/de/kuschku/quasseldroid/dagger/SettingsModule.kt index 0441232d688cfd7e71dacdcffc9d7e56ea7085ff..e2fae088eb573b4cda714437c8828d9679733bb7 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/dagger/SettingsModule.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/dagger/SettingsModule.kt @@ -5,6 +5,7 @@ import dagger.Module import dagger.Provides import de.kuschku.quasseldroid.R import de.kuschku.quasseldroid.settings.AppearanceSettings +import de.kuschku.quasseldroid.settings.AutoCompleteSettings import de.kuschku.quasseldroid.settings.BacklogSettings import de.kuschku.quasseldroid.settings.ConnectionSettings import de.kuschku.quasseldroid.util.helper.sharedPreferences @@ -58,10 +59,6 @@ class SettingsModule { context.getString(R.string.preference_colorize_mirc_key), AppearanceSettings.DEFAULT.colorizeMirc ), - showAutocomplete = getBoolean( - context.getString(R.string.preference_autocomplete_key), - AppearanceSettings.DEFAULT.showAutocomplete - ), showHostmask = getBoolean( context.getString(R.string.preference_hostmask_key), AppearanceSettings.DEFAULT.showHostmask @@ -73,6 +70,28 @@ class SettingsModule { ) } + @Provides + fun provideAutoCompleteSettings(context: Context) = context.sharedPreferences { + AutoCompleteSettings( + button = getBoolean( + context.getString(R.string.preference_autocomplete_button_key), + AutoCompleteSettings.DEFAULT.button + ), + doubleTap = getBoolean( + context.getString(R.string.preference_autocomplete_doubletap_key), + AutoCompleteSettings.DEFAULT.button + ), + auto = getBoolean( + context.getString(R.string.preference_autocomplete_auto_key), + AutoCompleteSettings.DEFAULT.button + ), + prefix = getBoolean( + context.getString(R.string.preference_autocomplete_prefix_key), + AutoCompleteSettings.DEFAULT.button + ) + ) + } + @Provides fun provideBacklogSettings(context: Context) = context.sharedPreferences { BacklogSettings( diff --git a/app/src/main/java/de/kuschku/quasseldroid/settings/AppearanceSettings.kt b/app/src/main/java/de/kuschku/quasseldroid/settings/AppearanceSettings.kt index 31b2c0e941e1192fcd5fcb0fcec7bd77c30f94ea..4589a3a95267c4f65bb25b685da48032870af3dc 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/settings/AppearanceSettings.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/settings/AppearanceSettings.kt @@ -12,7 +12,6 @@ data class AppearanceSettings( val textSize: Int = 14, val showSeconds: Boolean = false, val use24hClock: Boolean = true, - val showAutocomplete: Boolean = true, val showHostmask: Boolean = false, val showLag: Boolean = true, val theme: Theme = Theme.QUASSEL_LIGHT diff --git a/app/src/main/java/de/kuschku/quasseldroid/settings/AutoCompleteSettings.kt b/app/src/main/java/de/kuschku/quasseldroid/settings/AutoCompleteSettings.kt new file mode 100644 index 0000000000000000000000000000000000000000..f66f35a67ad4150bde8a666702266f29c3e1c468 --- /dev/null +++ b/app/src/main/java/de/kuschku/quasseldroid/settings/AutoCompleteSettings.kt @@ -0,0 +1,12 @@ +package de.kuschku.quasseldroid.settings + +data class AutoCompleteSettings( + val button: Boolean = false, + val doubleTap: Boolean = true, + val auto: Boolean = true, + val prefix: Boolean = true +) { + companion object { + val DEFAULT = AutoCompleteSettings() + } +} \ No newline at end of file diff --git a/app/src/main/java/de/kuschku/quasseldroid/settings/Settings.kt b/app/src/main/java/de/kuschku/quasseldroid/settings/Settings.kt index 926e270e395041a3c658713eff5044473730e01e..2bb8a0cc7c9b6949a766a3dd1392ae4c10bc3694 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/settings/Settings.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/settings/Settings.kt @@ -52,10 +52,6 @@ object Settings { context.getString(R.string.preference_colorize_mirc_key), AppearanceSettings.DEFAULT.colorizeMirc ), - showAutocomplete = getBoolean( - context.getString(R.string.preference_autocomplete_key), - AppearanceSettings.DEFAULT.showAutocomplete - ), showHostmask = getBoolean( context.getString(R.string.preference_hostmask_key), AppearanceSettings.DEFAULT.showHostmask diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt index cf6d3b697d776995505610b31cc8bd27e5d9d060..7f74e4e0745f74f1a7833940ac1209a5d5da9b05 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt @@ -118,6 +118,7 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc findViewById(R.id.formatting_menu), findViewById(R.id.formatting_toolbar), appearanceSettings, + autoCompleteSettings, { lines -> viewModel.session { sessionOptional -> val session = sessionOptional.orNull() diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/Editor.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/Editor.kt index 96884a00436a1fb27f2b18f534ae0f50cdbff106..aae660e5f3a3fda9939f9229496154e6c185c681 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/Editor.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/Editor.kt @@ -7,11 +7,14 @@ import android.support.v7.widget.* import android.text.Editable import android.text.InputType import android.text.TextWatcher +import android.view.GestureDetector import android.view.KeyEvent import android.view.MenuItem +import android.view.MotionEvent import android.view.inputmethod.EditorInfo import de.kuschku.quasseldroid.R import de.kuschku.quasseldroid.settings.AppearanceSettings +import de.kuschku.quasseldroid.settings.AutoCompleteSettings import de.kuschku.quasseldroid.ui.chat.ChatActivity import de.kuschku.quasseldroid.util.helper.lastWordIndices import de.kuschku.quasseldroid.util.helper.lineSequence @@ -34,6 +37,7 @@ class Editor( formattingToolbar: Toolbar, // Settings private val appearanceSettings: AppearanceSettings, + private val autoCompleteSettings: AutoCompleteSettings, // Listeners private val sendCallback: (Sequence<Pair<CharSequence, String>>) -> Unit, private val panelStateCallback: (Boolean) -> Unit @@ -116,7 +120,6 @@ class Editor( chatline.addTextChangedListener(textWatcher) - val autocompleteAdapter = AutoCompleteAdapter( // This is still broken when mixing tab complete and UI auto complete formatHandler::autoComplete @@ -124,12 +127,13 @@ class Editor( autoCompleteData.observe(activity, Observer { val query = it?.first ?: "" - val list = if (query.length >= 3) it?.second.orEmpty() else emptyList() - - autocompleteAdapter.submitList(list) + val shouldShowResults = (autoCompleteSettings.auto && query.length >= 3) || + (autoCompleteSettings.prefix && query.startsWith('@')) || + (autoCompleteSettings.prefix && query.startsWith('#')) + autocompleteAdapter.submitList(if (shouldShowResults) it?.second.orEmpty() else emptyList()) }) - if (appearanceSettings.showAutocomplete) { + if (autoCompleteSettings.prefix || autoCompleteSettings.auto) { for (autoCompleteList in autoCompleteLists) { autoCompleteList.layoutManager = LinearLayoutManager(activity) autoCompleteList.itemAnimator = DefaultItemAnimator() @@ -137,6 +141,23 @@ class Editor( } } + if (autoCompleteSettings.doubleTap) { + val gestureDetector = GestureDetector( + chatline.context, object : GestureDetector.SimpleOnGestureListener() { + override fun onDoubleTap(e: MotionEvent?): Boolean { + autoComplete() + return true + } + + override fun onDoubleTapEvent(e: MotionEvent?): Boolean { + return true + } + }) + chatline.setOnTouchListener { _, event -> + gestureDetector.onTouchEvent(event) + } + } + lastWordContainer.onNext(lastWord) activity.menuInflater.inflate(formatHandler.menu, formattingMenu.menu) diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/FormatHandler.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/FormatHandler.kt index e1656a01e3534fc4d7b97d22da29f67191b0ff53..bce5465b27c99e74b7a82bd598064036714f10dd 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/FormatHandler.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/FormatHandler.kt @@ -19,7 +19,9 @@ import de.kuschku.quasseldroid.util.helper.selection import de.kuschku.quasseldroid.util.irc.format.IrcFormatSerializer import de.kuschku.quasseldroid.util.irc.format.spans.* -class FormatHandler(private val editText: EditText) { +class FormatHandler( + private val editText: EditText +) { private val serializer = IrcFormatSerializer(editText.context) val formattedText: Sequence<String> get() = editText.text.lineSequence().map { serializer.toEscapeCodes(SpannableString(it)) } diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/service/ServiceBoundActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/util/service/ServiceBoundActivity.kt index 4c0283e63b8b4e9d9729864dca78e06bc24d96c4..e620847e62132d54d61a16fec2b5ec7a7f733300 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/util/service/ServiceBoundActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/util/service/ServiceBoundActivity.kt @@ -19,6 +19,7 @@ import de.kuschku.libquassel.util.Optional import de.kuschku.quasseldroid.Keys import de.kuschku.quasseldroid.R import de.kuschku.quasseldroid.settings.AppearanceSettings +import de.kuschku.quasseldroid.settings.AutoCompleteSettings import de.kuschku.quasseldroid.settings.ConnectionSettings import de.kuschku.quasseldroid.settings.Settings import de.kuschku.quasseldroid.ui.setup.accounts.selection.AccountSelectionActivity @@ -70,6 +71,9 @@ abstract class ServiceBoundActivity : AppCompatActivity(), @Inject lateinit var appearanceSettings: AppearanceSettings + @Inject + lateinit var autoCompleteSettings: AutoCompleteSettings + @Inject lateinit var connectionSettings: ConnectionSettings diff --git a/app/src/main/res/values-de/strings_preferences.xml b/app/src/main/res/values-de/strings_preferences.xml index e10cb54069ba5869d44656338533fd552293dac1..18dcf1f24f14fed5d6dfbb491e9f2cdf402f4f02 100644 --- a/app/src/main/res/values-de/strings_preferences.xml +++ b/app/src/main/res/values-de/strings_preferences.xml @@ -37,7 +37,19 @@ <string name="preference_input_enter_entry_emoji">Emoji-Auswahl</string> <string name="preference_input_enter_entry_send">Senden</string> - <string name="preference_autocomplete_title">Autovervollständigungs-UI</string> + <string name="preference_autocomplete_title">Autovervollständigung</string> + + <string name="preference_autocomplete_button_title">Autovervollständigungsknopf</string> + <string name="preference_autocomplete_button_summary">Zeigt einen Knopf um Namen und Chats zu vervollständigen</string> + + <string name="preference_autocomplete_doubletap_title">Doppelclick-Autocomplete</string> + <string name="preference_autocomplete_doubletap_summary">Vervollständigt Namen und Chats automatisch, wenn auf das Eingabefeld doppelgeklickt wird</string> + + <string name="preference_autocomplete_auto_title">Automatisch anzeigen</string> + <string name="preference_autocomplete_auto_summary">Vervollständigt Namen und Chats automatischen nach den ersten 3 Buchstaben</string> + + <string name="preference_autocomplete_prefix_title">Nach Präfix anzeigen</string> + <string name="preference_autocomplete_prefix_summary">Vervollständigt Namen und Chats automatisch nach einem @ oder #</string> <string name="preference_hostmask_title">Hostmaske</string> <string name="preference_hostmask_summary">Zeigt die gesame Spitzname!Ident@Host Information an</string> diff --git a/app/src/main/res/values/strings_preferences.xml b/app/src/main/res/values/strings_preferences.xml index 8993c6ae33ec996949ac8a407125fdd0bda6de28..66e6c5b1eda65a4a47324db79ced2960d6f2247d 100644 --- a/app/src/main/res/values/strings_preferences.xml +++ b/app/src/main/res/values/strings_preferences.xml @@ -92,8 +92,23 @@ <item>SEND</item> </string-array> - <string name="preference_autocomplete_key" translatable="false">autocomplete</string> - <string name="preference_autocomplete_title">Show AutoComplete UI</string> + <string name="preference_autocomplete_title">Autocomplete</string> + + <string name="preference_autocomplete_button_key" translatable="false">autocomplete_button</string> + <string name="preference_autocomplete_button_title">Autocomplete Button</string> + <string name="preference_autocomplete_button_summary">Shows a button on the left of the input line that triggers tabcomplete</string> + + <string name="preference_autocomplete_doubletap_key" translatable="false">autocomplete_doubletap</string> + <string name="preference_autocomplete_doubletap_title">Double tap to autocomplete</string> + <string name="preference_autocomplete_doubletap_summary">Suggest nicks and channels after doubleclicking on the input field</string> + + <string name="preference_autocomplete_auto_key" translatable="false">autocomplete_auto</string> + <string name="preference_autocomplete_auto_title">Show automatically</string> + <string name="preference_autocomplete_auto_summary">Suggest nicks and channels after entering the first 3 characters</string> + + <string name="preference_autocomplete_prefix_key" translatable="false">autocomplete_prefix</string> + <string name="preference_autocomplete_prefix_title">Show after prefix</string> + <string name="preference_autocomplete_prefix_summary">Suggest nicks and channels after entering @ or #</string> <string name="preference_hostmask_key" translatable="false">hostmask</string> <string name="preference_hostmask_title">Show Hostmask</string> diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index aa6a895532d3436eebea84f07762dacc45ce33d5..768aec53125cb908d8f226d8c39f7506b28b8058 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -59,11 +59,6 @@ android:key="@string/preference_show_prefix_key" android:title="@string/preference_show_prefix_title" /> - <SwitchPreference - android:defaultValue="true" - android:key="@string/preference_autocomplete_key" - android:title="@string/preference_autocomplete_title" /> - <SwitchPreference android:defaultValue="false" android:key="@string/preference_hostmask_key" @@ -77,6 +72,33 @@ android:title="@string/preference_show_lag_title" /> </PreferenceCategory> + <PreferenceCategory android:title="@string/preference_autocomplete_title"> + + <SwitchPreference + android:defaultValue="false" + android:key="@string/preference_autocomplete_button_key" + android:summary="@string/preference_autocomplete_button_summary" + android:title="@string/preference_autocomplete_button_title" /> + + <SwitchPreference + android:defaultValue="true" + android:key="@string/preference_autocomplete_doubletap_key" + android:summary="@string/preference_autocomplete_doubletap_summary" + android:title="@string/preference_autocomplete_doubletap_title" /> + + <SwitchPreference + android:defaultValue="true" + android:key="@string/preference_autocomplete_auto_key" + android:summary="@string/preference_autocomplete_auto_summary" + android:title="@string/preference_autocomplete_auto_title" /> + + <SwitchPreference + android:defaultValue="true" + android:key="@string/preference_autocomplete_prefix_key" + android:summary="@string/preference_autocomplete_prefix_summary" + android:title="@string/preference_autocomplete_prefix_title" /> + </PreferenceCategory> + <PreferenceCategory android:title="@string/preference_backlog_title"> <EditTextPreference android:defaultValue="150"