For #15508: Show error when trying to save empty or invalid bookmark URL (#15674)

upstream-sync
Jocelyne Abi Haidar 4 years ago committed by GitHub
parent d9c44f761f
commit f514f6099a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -5,7 +5,10 @@
package org.mozilla.fenix.library.bookmarks.edit
import android.content.DialogInterface
import android.content.res.ColorStateList
import android.os.Bundle
import android.text.Editable
import android.text.TextWatcher
import android.view.Menu
import android.view.MenuInflater
import android.view.MenuItem
@ -13,6 +16,7 @@ import android.view.View
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.lifecycle.ViewModelProvider
@ -134,6 +138,23 @@ class EditBookmarkFragment : Fragment(R.layout.fragment_edit_bookmark) {
placeCursorAtEnd()
showKeyboard()
}
view.bookmarkUrlEdit.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
// NOOP
}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
bookmarkUrlEdit.onTextChanged(s)
inputLayoutBookmarkUrl.error = null
inputLayoutBookmarkUrl.errorIconDrawable = null
}
override fun afterTextChanged(s: Editable?) {
// NOOP
}
})
}
}
@ -245,13 +266,24 @@ class EditBookmarkFragment : Fragment(R.layout.fragment_edit_bookmark) {
)
)
}
withContext(Main) {
inputLayoutBookmarkUrl.error = null
inputLayoutBookmarkUrl.errorIconDrawable = null
findNavController().popBackStack()
}
} catch (e: UrlParseFailed) {
withContext(Main) {
bookmarkUrlEdit.error = getString(R.string.bookmark_invalid_url_error)
inputLayoutBookmarkUrl.error = getString(R.string.bookmark_invalid_url_error)
inputLayoutBookmarkUrl.setErrorIconDrawable(R.drawable.mozac_ic_warning_with_bottom_padding)
inputLayoutBookmarkUrl.setErrorIconTintList(
ColorStateList.valueOf(
ContextCompat.getColor(requireContext(), R.color.design_error)
)
)
}
}
}
progress_bar_bookmark.visibility = View.INVISIBLE
findNavController().popBackStack()
}
}

@ -46,6 +46,10 @@ class ClearableEditText @JvmOverloads constructor(
* Displays a clear icon if text has been entered.
*/
override fun onTextChanged(text: CharSequence?, start: Int, lengthBefore: Int, lengthAfter: Int) {
onTextChanged(text)
}
fun onTextChanged(text: CharSequence?) {
// lengthAfter has inconsistent behaviour when there are spaces in the entered text, so we'll use text.length.
val textLength = text?.length ?: 0
val drawable = if (shouldShowClearButton(textLength)) {

@ -59,19 +59,26 @@
android:textColor="?primaryText"
android:textSize="12sp" />
<org.mozilla.fenix.utils.ClearableEditText
android:id="@+id/bookmarkUrlEdit"
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/inputLayoutBookmarkUrl"
android:layout_width="match_parent"
android:layout_height="@dimen/bookmark_edit_text_height"
android:layout_marginBottom="8dp"
android:drawablePadding="8dp"
android:ellipsize="none"
android:fadingEdgeLength="8dp"
android:inputType="textUri"
android:requiresFadingEdge="horizontal"
android:textColor="?secondaryText"
android:textSize="15sp"
tools:text="https://www.mozilla.org/en-US/" />
android:layout_height="wrap_content">
<org.mozilla.fenix.utils.ClearableEditText
android:id="@+id/bookmarkUrlEdit"
android:layout_width="match_parent"
android:layout_height="@dimen/bookmark_edit_text_height"
android:layout_marginBottom="8dp"
android:drawablePadding="8dp"
android:ellipsize="none"
android:fadingEdgeLength="8dp"
android:inputType="textUri"
android:requiresFadingEdge="horizontal"
android:textColor="?secondaryText"
android:textSize="15sp"
tools:text="https://www.mozilla.org/en-US/" />
</com.google.android.material.textfield.TextInputLayout>
<TextView
android:id="@+id/bookmark_folder_label"

Loading…
Cancel
Save