Skip to content

Commit

Permalink
Adding anchor view as potential parameter of ShowSnackbar and impleme…
Browse files Browse the repository at this point in the history
…nting same in DeckPickerWidgetConfig
  • Loading branch information
xenonnn4w committed Aug 18, 2024
1 parent cf2ca02 commit eeba1c0
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 23 deletions.
36 changes: 23 additions & 13 deletions AnkiDroid/src/main/java/com/ichi2/anki/snackbar/Snackbars.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}

/**
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
}

/**
Expand Down Expand Up @@ -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()
}
}

/**
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
}

/* ********************************************************************************************** */
Expand Down
21 changes: 11 additions & 10 deletions AnkiDroid/src/main/java/com/ichi2/widget/DeckPickerWidgetConfig.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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<FloatingActionButton>(R.id.fabWidgetDeckPicker)
)
}

fun showSnackbar(messageResId: Int) {
val snackbar = Snackbar.make(
findViewById(R.id.widgetConfigContainer),
getString(messageResId),
Snackbar.LENGTH_LONG
).apply {
anchorView = findViewById<FloatingActionButton>(R.id.fabWidgetDeckPicker)
}
snackbar.show()
showSnackbar(getString(messageResId))
}

// Method to initialize UI components
Expand Down Expand Up @@ -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
}

Expand Down

0 comments on commit eeba1c0

Please sign in to comment.