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