diff --git a/CHANGELOG.md b/CHANGELOG.md index 87f594970..2c69cf1ad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ * Microsoft To Do support [#2011](https://github.com/tasks/tasks/issues/2011) * This feature is in early access, USE AT YOUR OWN RISK * Enable under 'Advanced' settings +* Add configuration option for new lines in titles * Subscription changes * Multiple Google Task accounts are now free to use * Tasker plugins are now free to use diff --git a/app/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.kt b/app/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.kt index aacc5bb64..976cf94ae 100755 --- a/app/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.kt +++ b/app/src/main/java/com/todoroo/astrid/activity/TaskEditFragment.kt @@ -324,6 +324,7 @@ class TaskEditFragment : Fragment() { } }, requestFocus = requestFocus, + multiline = viewState.multilineTitle, ) } diff --git a/app/src/main/java/org/tasks/compose/edit/DescriptionRow.kt b/app/src/main/java/org/tasks/compose/edit/DescriptionRow.kt index 311e8490f..03b9c2821 100644 --- a/app/src/main/java/org/tasks/compose/edit/DescriptionRow.kt +++ b/app/src/main/java/org/tasks/compose/edit/DescriptionRow.kt @@ -35,6 +35,7 @@ fun DescriptionRow( onChanged = onChanged, linkify = linkify, markdownProvider = markdownProvider, + multiline = true, ) Spacer(modifier = Modifier.height(11.dp)) } diff --git a/app/src/main/java/org/tasks/compose/edit/EditTextView.kt b/app/src/main/java/org/tasks/compose/edit/EditTextView.kt index 6f7030161..8e20b05e6 100644 --- a/app/src/main/java/org/tasks/compose/edit/EditTextView.kt +++ b/app/src/main/java/org/tasks/compose/edit/EditTextView.kt @@ -38,6 +38,7 @@ fun EditTextView( markdownProvider: MarkdownProvider?, strikethrough: Boolean = false, requestFocus: Boolean = false, + multiline: Boolean = false, ) { val context = LocalContext.current var shouldRequestFocus by remember { mutableStateOf(false) } @@ -57,23 +58,48 @@ fun EditTextView( onTextChanged = { text, _, _, _ -> onChanged(text) }, afterTextChanged = { editable -> textWatcher?.invoke(editable) } ) + + if (multiline) { + // Multiline configuration + setRawInputType( + InputType.TYPE_CLASS_TEXT or + InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or + InputType.TYPE_TEXT_FLAG_MULTI_LINE or + InputType.TYPE_TEXT_FLAG_AUTO_CORRECT + ) + isSingleLine = false + maxLines = Int.MAX_VALUE + imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI + } else { + // Single line with Done button + setRawInputType( + InputType.TYPE_CLASS_TEXT or + InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or + InputType.TYPE_TEXT_FLAG_AUTO_CORRECT + ) + isSingleLine = true + maxLines = 1 + imeOptions = EditorInfo.IME_ACTION_DONE or EditorInfo.IME_FLAG_NO_EXTRACT_UI + setImeActionLabel(context.getString(android.R.string.ok), EditorInfo.IME_ACTION_DONE) + setOnEditorActionListener { _, actionId, _ -> + if (actionId == EditorInfo.IME_ACTION_DONE) { + clearFocus() + val imm = context.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager + imm.hideSoftInputFromWindow(windowToken, 0) + true + } else { + false + } + } + } + setBackgroundColor(context.getColor(android.R.color.transparent)) textAlignment = View.TEXT_ALIGNMENT_VIEW_START - imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI - inputType = - InputType.TYPE_CLASS_TEXT or - InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or - InputType.TYPE_TEXT_FLAG_MULTI_LINE or - InputType.TYPE_TEXT_FLAG_AUTO_CORRECT - isSingleLine = false - maxLines = Int.MAX_VALUE if (AndroidUtilities.atLeastOreo()) { importantForAutofill = View.IMPORTANT_FOR_AUTOFILL_NO } - isVerticalScrollBarEnabled = true freezesText = true setHorizontallyScrolling(false) - isHorizontalScrollBarEnabled = false setHint(hint) setHintTextColor(context.getColor(R.color.text_tertiary)) setTextSize( diff --git a/app/src/main/java/org/tasks/compose/edit/TitleRow.kt b/app/src/main/java/org/tasks/compose/edit/TitleRow.kt index 57802e9fe..c8c819d81 100644 --- a/app/src/main/java/org/tasks/compose/edit/TitleRow.kt +++ b/app/src/main/java/org/tasks/compose/edit/TitleRow.kt @@ -30,6 +30,7 @@ fun TitleRow( priority: Int, onComplete: () -> Unit, requestFocus: Boolean, + multiline: Boolean, ) { TaskEditRow( icon = { @@ -55,6 +56,7 @@ fun TitleRow( markdownProvider = markdownProvider, strikethrough = isCompleted, requestFocus = requestFocus, + multiline = multiline, ) Spacer(modifier = Modifier.height(11.dp)) } @@ -78,6 +80,7 @@ fun EmptyTitlePreview() { priority = 0, onComplete = {}, requestFocus = false, + multiline = false, ) } } @@ -102,6 +105,7 @@ fun TitlePreview() { priority = 0, onComplete = {}, requestFocus = false, + multiline = false, ) } } diff --git a/app/src/main/java/org/tasks/preferences/Preferences.kt b/app/src/main/java/org/tasks/preferences/Preferences.kt index 4b51a47a5..a89518822 100644 --- a/app/src/main/java/org/tasks/preferences/Preferences.kt +++ b/app/src/main/java/org/tasks/preferences/Preferences.kt @@ -577,6 +577,9 @@ class Preferences @JvmOverloads constructor( val linkify: Boolean get() = getBoolean(R.string.p_linkify_task_edit, false) + val multilineTitle: Boolean + get() = getBoolean(R.string.p_multiline_title, false) + companion object { private fun getSharedPreferencesName(context: Context): String = context.packageName + "_preferences" diff --git a/app/src/main/java/org/tasks/ui/TaskEditViewModel.kt b/app/src/main/java/org/tasks/ui/TaskEditViewModel.kt index 816e6527f..049c4df38 100644 --- a/app/src/main/java/org/tasks/ui/TaskEditViewModel.kt +++ b/app/src/main/java/org/tasks/ui/TaskEditViewModel.kt @@ -124,6 +124,7 @@ class TaskEditViewModel @Inject constructor( val attachments: ImmutableSet = persistentSetOf(), val alarms: ImmutableSet, val newSubtasks: ImmutableList = persistentListOf(), + val multilineTitle: Boolean, ) { val isNew: Boolean get() = task.isNew @@ -199,6 +200,7 @@ class TaskEditViewModel @Inject constructor( } else { savedStateHandle[TaskEditFragment.EXTRA_ALARMS]!! }.toPersistentSet(), + multilineTitle = preferences.multilineTitle, ) ) val viewState: StateFlow = _viewState diff --git a/app/src/main/res/values/keys.xml b/app/src/main/res/values/keys.xml index c4c8f9fa5..cc81fd808 100644 --- a/app/src/main/res/values/keys.xml +++ b/app/src/main/res/values/keys.xml @@ -436,4 +436,5 @@ shown_beast_mode_hint last_sync_time microsoft_sync + multiline_title diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2d8392ad0..1949c4c74 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -730,4 +730,7 @@ File %1$s contained %2$s.\n\n Cost: Free Cost: $ Cost: $$$ + Allow multiline titles + Press Enter key to add line breaks + Press Done to close keyboard diff --git a/app/src/main/res/xml/preferences_task_edit.xml b/app/src/main/res/xml/preferences_task_edit.xml index d48df45e2..92c147ce0 100644 --- a/app/src/main/res/xml/preferences_task_edit.xml +++ b/app/src/main/res/xml/preferences_task_edit.xml @@ -24,6 +24,13 @@ android:key="@string/p_back_button_saves_task" android:title="@string/back_button_saves_task" /> + +