From d3343ed808e7dd669f94ec8369a2109b65979268 Mon Sep 17 00:00:00 2001 From: Janne Koschinski <janne@kuschku.de> Date: Fri, 18 May 2018 18:22:05 +0200 Subject: [PATCH] Fixes autocomplete - Autocomplete works in Aliases and Topics - Handle \n, \r, \t for lastWord - Improve display of autocompleted alias items --- .../util/helper/CharSequenceHelper.kt | 15 ++- app/src/main/res/layout/fragment_topic.xml | 5 +- .../main/res/layout/settings_aliasitem.xml | 96 +++++++++---------- .../quasseldroid/viewmodel/EditorViewModel.kt | 2 +- .../viewmodel/data/AutoCompleteItem.kt | 2 +- 5 files changed, 62 insertions(+), 58 deletions(-) diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/helper/CharSequenceHelper.kt b/app/src/main/java/de/kuschku/quasseldroid/util/helper/CharSequenceHelper.kt index a637d8c8d..898e97dc8 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/util/helper/CharSequenceHelper.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/util/helper/CharSequenceHelper.kt @@ -160,8 +160,19 @@ fun CharSequence.lastWordIndices(cursor: Int = this.length, length } - val beginningOfWord = lastIndexOf(' ', cursorPosition - 1) - val endOfWord = indexOf(' ', cursorPosition) + val beginningOfWord = sequenceOf( + lastIndexOf(' ', cursorPosition - 1), + lastIndexOf('\r', cursorPosition - 1), + lastIndexOf('\n', cursorPosition - 1), + lastIndexOf('\t', cursorPosition - 1) + ).max() ?: -1 + + val endOfWord = sequenceOf( + indexOf(' ', cursorPosition), + indexOf('\r', cursorPosition), + indexOf('\n', cursorPosition), + indexOf('\t', cursorPosition) + ).min() ?: -1 val start = beginningOfWord + 1 val end = when { diff --git a/app/src/main/res/layout/fragment_topic.xml b/app/src/main/res/layout/fragment_topic.xml index fe0600db4..cb7661fe0 100644 --- a/app/src/main/res/layout/fragment_topic.xml +++ b/app/src/main/res/layout/fragment_topic.xml @@ -22,7 +22,6 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - android:minHeight="240dp" android:orientation="vertical"> <android.support.design.widget.CoordinatorLayout @@ -31,9 +30,9 @@ android:layout_weight="1"> <ScrollView - android:id="@+id/chatline_scroller" android:layout_width="match_parent" - android:layout_height="match_parent"> + android:layout_height="match_parent" + android:scrollbars="vertical"> <de.kuschku.quasseldroid.ui.chat.input.RichEditText android:id="@+id/chatline" diff --git a/app/src/main/res/layout/settings_aliasitem.xml b/app/src/main/res/layout/settings_aliasitem.xml index be394214e..921f00741 100644 --- a/app/src/main/res/layout/settings_aliasitem.xml +++ b/app/src/main/res/layout/settings_aliasitem.xml @@ -17,27 +17,26 @@ with this program. If not, see <http://www.gnu.org/licenses/>. --> -<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android" +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - android:fillViewport="true" - android:scrollbars="vertical"> + android:orientation="vertical"> - <LinearLayout + <android.support.design.widget.CoordinatorLayout android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="vertical"> + android:layout_height="0dip" + android:layout_weight="1"> - <android.support.design.widget.CoordinatorLayout + <android.support.v4.widget.NestedScrollView android:layout_width="match_parent" - android:layout_height="0dip" - android:layout_weight="1"> + android:layout_height="match_parent" + android:scrollbars="vertical"> <LinearLayout android:layout_width="match_parent" - android:layout_height="wrap_content" + android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout style="@style/Widget.CoreSettings.Wrapper"> @@ -59,50 +58,45 @@ </LinearLayout> </LinearLayout> - <ScrollView - android:layout_width="match_parent" - android:layout_height="match_parent"> - - <LinearLayout style="@style/Widget.CoreSettings.Wrapper"> - - <android.support.design.widget.TextInputLayout - style="@style/Widget.CoreSettings.PrimaryItemSwitch" - android:hint="@string/settings_aliasitem_expansion"> + <LinearLayout style="@style/Widget.CoreSettings.Wrapper"> - <de.kuschku.quasseldroid.ui.chat.input.RichEditText - android:id="@+id/expansion" - style="@style/Widget.CoreSettings.EditText" - android:imeOptions="flagNoExtractUi" - android:inputType="textMultiLine" - android:textColor="?attr/colorForeground" - android:textSize="16sp" /> - </android.support.design.widget.TextInputLayout> - </LinearLayout> - </ScrollView> + <android.support.design.widget.TextInputLayout + style="@style/Widget.CoreSettings.PrimaryItemSwitch" + android:hint="@string/settings_aliasitem_expansion"> + + <de.kuschku.quasseldroid.ui.chat.input.RichEditText + android:id="@+id/expansion" + style="@style/Widget.CoreSettings.EditText" + android:imeOptions="flagNoExtractUi" + android:inputType="textMultiLine" + android:textColor="?attr/colorForeground" + android:textSize="16sp" /> + </android.support.design.widget.TextInputLayout> + </LinearLayout> </LinearLayout> + </android.support.v4.widget.NestedScrollView> - <android.support.v7.widget.RecyclerView - android:id="@+id/autocomplete_list" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:background="?colorBackgroundCard" - app:behavior_hideable="true" - app:behavior_peekHeight="@dimen/autocomplete_max_height" - app:layout_behavior="@string/bottom_sheet_behavior" - tools:listitem="@layout/widget_nick" /> - - </android.support.design.widget.CoordinatorLayout> - - <android.support.design.widget.AppBarLayout + <android.support.v7.widget.RecyclerView + android:id="@+id/autocomplete_list" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="?attr/colorBackgroundCard"> + android:background="?colorBackgroundCard" + app:behavior_hideable="true" + app:behavior_peekHeight="@dimen/autocomplete_max_height" + app:layout_behavior="@string/bottom_sheet_behavior" + tools:listitem="@layout/widget_nick" /> - <de.kuschku.quasseldroid.ui.chat.input.RichToolbar - android:id="@+id/formatting_toolbar" - android:layout_width="match_parent" - android:layout_height="?attr/actionBarSize" - app:contentInsetStart="0dip" /> - </android.support.design.widget.AppBarLayout> - </LinearLayout> -</android.support.v4.widget.NestedScrollView> + </android.support.design.widget.CoordinatorLayout> + + <android.support.design.widget.AppBarLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="?attr/colorBackgroundCard"> + + <de.kuschku.quasseldroid.ui.chat.input.RichToolbar + android:id="@+id/formatting_toolbar" + android:layout_width="match_parent" + android:layout_height="?attr/actionBarSize" + app:contentInsetStart="0dip" /> + </android.support.design.widget.AppBarLayout> +</LinearLayout> diff --git a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/EditorViewModel.kt b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/EditorViewModel.kt index 00f17a985..92d8566b5 100644 --- a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/EditorViewModel.kt +++ b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/EditorViewModel.kt @@ -89,7 +89,7 @@ class EditorViewModel : ViewModel() { fun getAliases() = aliases.map { Observable.just(AutoCompleteItem.AliasItem( - it.name, + "/${it.name}", it.expansion )) } diff --git a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/data/AutoCompleteItem.kt b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/data/AutoCompleteItem.kt index c292aabad..d2943ed4b 100644 --- a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/data/AutoCompleteItem.kt +++ b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/data/AutoCompleteItem.kt @@ -46,7 +46,7 @@ sealed class AutoCompleteItem(open val name: String, val suffix: String, private data class AliasItem( val alias: String, val expansion: String - ) : AutoCompleteItem("/$alias", " ", 1) + ) : AutoCompleteItem(alias, " ", 1) data class ChannelItem( val info: BufferInfo, -- GitLab