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