diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/snackbar/Snackbars.kt b/AnkiDroid/src/main/java/com/ichi2/anki/snackbar/Snackbars.kt index e991d463856a..a3daa829b90a 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/snackbar/Snackbars.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/snackbar/Snackbars.kt @@ -70,10 +70,11 @@ interface BaseSnackbarBuilderProvider { fun Activity.showSnackbar( @StringRes textResource: Int, duration: Int = Snackbar.LENGTH_LONG, + anchorView: View? = null, snackbarBuilder: SnackbarBuilder? = null ) { val text = getText(textResource) - showSnackbar(text, duration, snackbarBuilder) + showSnackbar(text, duration, anchorView, snackbarBuilder) } /** @@ -104,13 +105,14 @@ fun Activity.showSnackbar( fun Activity.showSnackbar( text: CharSequence, duration: Int = Snackbar.LENGTH_LONG, + anchorView: View? = null, snackbarBuilder: SnackbarBuilder? = null ) { val view: View? = findViewById(R.id.root_layout) as? CoordinatorLayout if (view != null) { val baseSnackbarBuilder = (this as? BaseSnackbarBuilderProvider)?.baseSnackbarBuilder - view.showSnackbar(text, duration) { + view.showSnackbar(text, duration, anchorView = anchorView) { baseSnackbarBuilder?.invoke(this) snackbarBuilder?.invoke(this) Timber.d("displayed snackbar: '%s'", text) @@ -157,10 +159,11 @@ fun Activity.showSnackbar( fun View.showSnackbar( @StringRes textResource: Int, duration: Int = Snackbar.LENGTH_LONG, + anchorView: View? = null, snackbarBuilder: SnackbarBuilder? = null ) { val text = resources.getText(textResource) - showSnackbar(text, duration, snackbarBuilder) + showSnackbar(text, duration, anchorView, snackbarBuilder) } /** @@ -192,19 +195,24 @@ fun View.showSnackbar( fun View.showSnackbar( text: CharSequence, duration: Int = Snackbar.LENGTH_LONG, + anchorView: View? = null, snackbarBuilder: SnackbarBuilder? = null ) { - val snackbar = Snackbar.make(this, text, duration) - snackbar.setMaxLines(4) - snackbar.behavior = SwipeDismissBehaviorFix() + Snackbar.make(this, text, duration).apply { + this.anchorView = anchorView + setMaxLines(4) + behavior = SwipeDismissBehaviorFix() - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - snackbar.fixMarginsWhenInsetsChange() - } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + fixMarginsWhenInsetsChange() + } - if (snackbarBuilder != null) { snackbar.snackbarBuilder() } + if (snackbarBuilder != null) { + snackbarBuilder() + } - snackbar.show() + show() + } } /** @@ -236,10 +244,11 @@ fun View.showSnackbar( fun Fragment.showSnackbar( text: CharSequence, duration: Int = Snackbar.LENGTH_LONG, + anchorView: View? = null, snackbarBuilder: SnackbarBuilder? = null ) { val baseSnackbarBuilder = (this as? BaseSnackbarBuilderProvider)?.baseSnackbarBuilder - requireActivity().showSnackbar(text, duration) { + requireActivity().showSnackbar(text, duration, anchorView = anchorView) { baseSnackbarBuilder?.invoke(this) snackbarBuilder?.invoke(this) Timber.d("displayed snackbar: '%s'", text) @@ -275,10 +284,11 @@ fun Fragment.showSnackbar( fun Fragment.showSnackbar( @StringRes textResource: Int, duration: Int = Snackbar.LENGTH_LONG, + anchorView: View? = null, snackbarBuilder: SnackbarBuilder? = null ) { val text = resources.getText(textResource) - showSnackbar(text, duration, snackbarBuilder) + showSnackbar(text, duration, anchorView, snackbarBuilder) } /* ********************************************************************************************** */ diff --git a/AnkiDroid/src/main/java/com/ichi2/widget/DeckPickerWidgetConfig.kt b/AnkiDroid/src/main/java/com/ichi2/widget/DeckPickerWidgetConfig.kt index ee0df3baae67..a59fe8203615 100644 --- a/AnkiDroid/src/main/java/com/ichi2/widget/DeckPickerWidgetConfig.kt +++ b/AnkiDroid/src/main/java/com/ichi2/widget/DeckPickerWidgetConfig.kt @@ -112,15 +112,17 @@ class DeckPickerWidgetConfig : AnkiActivity(), DeckSelectionListener { } @SuppressLint("DirectSnackbarMakeUsage") + fun showSnackbar(message: CharSequence) { + val v: View = findViewById(R.id.widgetConfigContainer) + v.showSnackbar( + message, + Snackbar.LENGTH_LONG, + findViewById(R.id.fabWidgetDeckPicker) + ) + } + fun showSnackbar(messageResId: Int) { - val snackbar = Snackbar.make( - findViewById(R.id.widgetConfigContainer), - getString(messageResId), - Snackbar.LENGTH_LONG - ).apply { - anchorView = findViewById(R.id.fabWidgetDeckPicker) - } - snackbar.show() + showSnackbar(getString(messageResId)) } // Method to initialize UI components @@ -339,8 +341,7 @@ class DeckPickerWidgetConfig : AnkiActivity(), DeckSelectionListener { if (isDeckAlreadySelected) { // Show snackbar if the deck is already selected // TODO: Eventually, ensure that the user can't select a deck that is already selected. - val message = getString(R.string.deck_already_selected_message) - showSnackbar(message) + showSnackbar(getString(R.string.deck_already_selected_message)) return }