From 3e4e9a61ddb28a4b5e9f011f369faa70fcc642ab Mon Sep 17 00:00:00 2001
From: Janne Koschinski <janne@kuschku.de>
Date: Mon, 26 Mar 2018 13:58:41 +0200
Subject: [PATCH] Finish autocomplete implementation

---
 .../quasseldroid/dagger/SettingsModule.kt     | 107 +-----------------
 .../kuschku/quasseldroid/settings/Settings.kt |  21 ++++
 .../quasseldroid/ui/chat/ChatActivity.kt      |   9 ++
 .../quasseldroid/ui/chat/input/Editor.kt      |   7 ++
 app/src/main/res/drawable/ic_tab.xml          |   9 ++
 app/src/main/res/layout/layout_editor.xml     |  15 ++-
 6 files changed, 65 insertions(+), 103 deletions(-)
 create mode 100644 app/src/main/res/drawable/ic_tab.xml

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 e2fae088e..ac9e48fee 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/dagger/SettingsModule.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/dagger/SettingsModule.kt
@@ -3,116 +3,19 @@ package de.kuschku.quasseldroid.dagger
 import android.content.Context
 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
+import de.kuschku.quasseldroid.settings.Settings
 
 @Module
 class SettingsModule {
   @Provides
-  fun provideAppearanceSettings(context: Context) = context.sharedPreferences {
-    AppearanceSettings(
-      theme = AppearanceSettings.Theme.of(
-        getString(
-          context.getString(R.string.preference_theme_key),
-          ""
-        )
-      ) ?: AppearanceSettings.DEFAULT.theme,
-      useMonospace = getBoolean(
-        context.getString(R.string.preference_monospace_key),
-        AppearanceSettings.DEFAULT.useMonospace
-      ),
-      textSize = getInt(
-        context.getString(R.string.preference_textsize_key),
-        AppearanceSettings.DEFAULT.textSize
-      ),
-      showSeconds = getBoolean(
-        context.getString(R.string.preference_show_seconds_key),
-        AppearanceSettings.DEFAULT.showSeconds
-      ),
-      use24hClock = getBoolean(
-        context.getString(R.string.preference_use_24h_clock_key),
-        AppearanceSettings.DEFAULT.use24hClock
-      ),
-      showPrefix = AppearanceSettings.ShowPrefixMode.of(
-        getString(
-          context.getString(R.string.preference_show_prefix_key),
-          ""
-        )
-      ) ?: AppearanceSettings.DEFAULT.showPrefix,
-      colorizeNicknames = AppearanceSettings.ColorizeNicknamesMode.of(
-        getString(
-          context.getString(R.string.preference_colorize_nicknames_key),
-          ""
-        )
-      ) ?: AppearanceSettings.DEFAULT.colorizeNicknames,
-      inputEnter = AppearanceSettings.InputEnterMode.of(
-        getString(
-          context.getString(R.string.preference_input_enter_key),
-          ""
-        )
-      ) ?: AppearanceSettings.DEFAULT.inputEnter,
-      colorizeMirc = getBoolean(
-        context.getString(R.string.preference_colorize_mirc_key),
-        AppearanceSettings.DEFAULT.colorizeMirc
-      ),
-      showHostmask = getBoolean(
-        context.getString(R.string.preference_hostmask_key),
-        AppearanceSettings.DEFAULT.showHostmask
-      ),
-      showLag = getBoolean(
-        context.getString(R.string.preference_show_lag_key),
-        AppearanceSettings.DEFAULT.showLag
-      )
-    )
-  }
+  fun provideAppearanceSettings(context: Context) = Settings.appearance(context)
 
   @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
-      )
-    )
-  }
+  fun provideAutoCompleteSettings(context: Context) = Settings.autoComplete(context)
 
   @Provides
-  fun provideBacklogSettings(context: Context) = context.sharedPreferences {
-    BacklogSettings(
-      pageSize = getString(
-        context.getString(R.string.preference_page_size_key),
-        BacklogSettings.DEFAULT.pageSize.toString()
-      ).toIntOrNull() ?: BacklogSettings.DEFAULT.pageSize,
-      initialAmount = getString(
-        context.getString(R.string.preference_initial_amount_key),
-        BacklogSettings.DEFAULT.initialAmount.toString()
-      ).toIntOrNull() ?: BacklogSettings.DEFAULT.initialAmount
-    )
-  }
+  fun provideBacklogSettings(context: Context) = Settings.backlog(context)
 
   @Provides
-  fun provideConnectionSettings(context: Context) = context.sharedPreferences {
-    ConnectionSettings(
-      showNotification = getBoolean(
-        context.getString(R.string.preference_show_notification_key),
-        ConnectionSettings.DEFAULT.showNotification
-      )
-    )
-  }
+  fun provideConnectionSettings(context: Context) = Settings.connection(context)
 }
\ 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 2bb8a0cc7..059386303 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/settings/Settings.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/settings/Settings.kt
@@ -63,6 +63,27 @@ object Settings {
     )
   }
 
+  fun autoComplete(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
+      )
+    )
+  }
+
   fun backlog(context: Context) = context.sharedPreferences {
     BacklogSettings(
       pageSize = getString(
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 7f74e4e07..954d5e392 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
@@ -35,6 +35,7 @@ import de.kuschku.libquassel.util.or
 import de.kuschku.quasseldroid.Keys
 import de.kuschku.quasseldroid.R
 import de.kuschku.quasseldroid.persistence.QuasselDatabase
+import de.kuschku.quasseldroid.settings.Settings
 import de.kuschku.quasseldroid.ui.chat.input.Editor
 import de.kuschku.quasseldroid.ui.chat.input.MessageHistoryAdapter
 import de.kuschku.quasseldroid.ui.settings.app.AppSettingsActivity
@@ -111,6 +112,7 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
       viewModel.lastWord,
       findViewById(R.id.chatline),
       findViewById(R.id.send),
+      findViewById(R.id.tab_complete),
       listOf(
         findViewById(R.id.autocomplete_list),
         findViewById(R.id.autocomplete_list_expanded)
@@ -255,6 +257,13 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
     editorPanel.panelState = SlidingUpPanelLayout.PanelState.COLLAPSED
   }
 
+  override fun onStart() {
+    if (Settings.autoComplete(this) != autoCompleteSettings) {
+      recreate()
+    }
+    super.onStart()
+  }
+
   data class AutoCompletionState(
     val originalWord: String,
     val range: IntRange,
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 aae660e5f..9c46b3684 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
@@ -19,6 +19,7 @@ import de.kuschku.quasseldroid.ui.chat.ChatActivity
 import de.kuschku.quasseldroid.util.helper.lastWordIndices
 import de.kuschku.quasseldroid.util.helper.lineSequence
 import de.kuschku.quasseldroid.util.helper.retint
+import de.kuschku.quasseldroid.util.helper.visibleIf
 import de.kuschku.quasseldroid.viewmodel.data.AutoCompleteItem
 import io.reactivex.Observable
 import io.reactivex.subjects.BehaviorSubject
@@ -32,6 +33,7 @@ class Editor(
   // Views
   val chatline: AppCompatEditText,
   send: AppCompatImageButton,
+  tabComplete: AppCompatImageButton,
   autoCompleteLists: List<RecyclerView>,
   formattingMenu: ActionMenuView,
   formattingToolbar: Toolbar,
@@ -158,6 +160,11 @@ class Editor(
       }
     }
 
+    tabComplete.visibleIf(autoCompleteSettings.button)
+    tabComplete.setOnClickListener {
+      autoComplete()
+    }
+
     lastWordContainer.onNext(lastWord)
 
     activity.menuInflater.inflate(formatHandler.menu, formattingMenu.menu)
diff --git a/app/src/main/res/drawable/ic_tab.xml b/app/src/main/res/drawable/ic_tab.xml
new file mode 100644
index 000000000..0ef923225
--- /dev/null
+++ b/app/src/main/res/drawable/ic_tab.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+  android:width="24dp"
+  android:height="24dp"
+  android:viewportHeight="24"
+  android:viewportWidth="24">
+  <path
+    android:fillColor="#000"
+    android:pathData="M20,18H22V6H20M11.59,7.41L15.17,11H1V13H15.17L11.59,16.58L13,18L19,12L13,6L11.59,7.41Z" />
+</vector>
\ No newline at end of file
diff --git a/app/src/main/res/layout/layout_editor.xml b/app/src/main/res/layout/layout_editor.xml
index 75f654333..898de974f 100644
--- a/app/src/main/res/layout/layout_editor.xml
+++ b/app/src/main/res/layout/layout_editor.xml
@@ -4,6 +4,19 @@
   android:layout_width="match_parent"
   android:layout_height="match_parent">
 
+  <android.support.v7.widget.AppCompatImageButton
+    android:id="@+id/tab_complete"
+    style="?attr/buttonStyleSmall"
+    android:layout_width="?attr/actionBarSize"
+    android:layout_height="?attr/actionBarSize"
+    android:layout_gravity="top"
+    android:background="?attr/selectableItemBackgroundBorderless"
+    android:padding="12dp"
+    android:scaleType="fitXY"
+    app:tint="?attr/colorTextSecondary"
+    app:layout_constraintStart_toStartOf="parent"
+    app:srcCompat="@drawable/ic_tab" />
+
   <ScrollView
     android:id="@+id/chatline_scroller"
     android:layout_width="0dp"
@@ -11,7 +24,7 @@
     app:layout_constraintBottom_toTopOf="@+id/autocomplete_list_expanded"
     app:layout_constraintEnd_toStartOf="@+id/send"
     app:layout_constraintHorizontal_bias="1.0"
-    app:layout_constraintStart_toStartOf="parent"
+    app:layout_constraintStart_toEndOf="@+id/tab_complete"
     app:layout_constraintTop_toTopOf="parent">
 
     <android.support.v7.widget.AppCompatEditText
-- 
GitLab