diff --git a/app/src/main/java/com/topjohnwu/magisk/arch/BaseUIActivity.kt b/app/src/main/java/com/topjohnwu/magisk/arch/BaseUIActivity.kt index e6dd45824..f4d679c28 100644 --- a/app/src/main/java/com/topjohnwu/magisk/arch/BaseUIActivity.kt +++ b/app/src/main/java/com/topjohnwu/magisk/arch/BaseUIActivity.kt @@ -35,6 +35,7 @@ abstract class BaseUIActivity : open val navHostId: Int = 0 open val snackbarView get() = binding.root + open val snackbarAnchorView: View? get() = null init { val theme = Config.darkTheme diff --git a/app/src/main/java/com/topjohnwu/magisk/arch/BaseUIFragment.kt b/app/src/main/java/com/topjohnwu/magisk/arch/BaseUIFragment.kt index ae71f3852..1f0e87d70 100644 --- a/app/src/main/java/com/topjohnwu/magisk/arch/BaseUIFragment.kt +++ b/app/src/main/java/com/topjohnwu/magisk/arch/BaseUIFragment.kt @@ -22,6 +22,7 @@ abstract class BaseUIFragment : override val viewRoot: View get() = binding.root private val navigation get() = activity.navigation + open val snackbarAnchorView: View? get() = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) diff --git a/app/src/main/java/com/topjohnwu/magisk/events/SnackbarEvent.kt b/app/src/main/java/com/topjohnwu/magisk/events/SnackbarEvent.kt index e7137c351..d8a488604 100644 --- a/app/src/main/java/com/topjohnwu/magisk/events/SnackbarEvent.kt +++ b/app/src/main/java/com/topjohnwu/magisk/events/SnackbarEvent.kt @@ -30,13 +30,14 @@ class SnackbarEvent constructor( private fun snackbar( view: View, + anchor: View?, message: String, length: Int, builder: Snackbar.() -> Unit - ) = Snackbar.make(view, message, length).apply(builder).show() + ) = Snackbar.make(view, message, length).setAnchorView(anchor).apply(builder).show() override fun invoke(activity: BaseUIActivity<*, *>) { - snackbar(activity.snackbarView, + snackbar(activity.snackbarView, activity.snackbarAnchorView, msg.getText(activity.resources).toString(), length, builder) } diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/MainActivity.kt b/app/src/main/java/com/topjohnwu/magisk/ui/MainActivity.kt index 5d9c259ff..28026a779 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ui/MainActivity.kt +++ b/app/src/main/java/com/topjohnwu/magisk/ui/MainActivity.kt @@ -11,6 +11,7 @@ import android.view.View import android.view.WindowManager import androidx.core.content.pm.ShortcutManagerCompat import androidx.core.view.forEach +import androidx.core.view.isVisible import androidx.interpolator.view.animation.FastOutLinearInInterpolator import androidx.interpolator.view.animation.LinearOutSlowInInterpolator import androidx.navigation.NavDirections @@ -36,6 +37,15 @@ class MainActivity : BaseMainActivity() { override val layoutRes = R.layout.activity_main_md2 override val viewModel by viewModel() override val navHostId: Int = R.id.main_nav_host + override val snackbarAnchorView: View? + get() { + val fragmentAnchor = currentFragment?.snackbarAnchorView + return when { + fragmentAnchor?.isVisible == true -> fragmentAnchor + binding.mainNavigation.isVisible -> return binding.mainNavigation + else -> null + } + } private var isRootFragment = true diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/log/LogFragment.kt b/app/src/main/java/com/topjohnwu/magisk/ui/log/LogFragment.kt index 764e9bf25..c2b118011 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ui/log/LogFragment.kt +++ b/app/src/main/java/com/topjohnwu/magisk/ui/log/LogFragment.kt @@ -20,6 +20,7 @@ class LogFragment : BaseUIFragment() { override val layoutRes = R.layout.fragment_log_md2 override val viewModel by viewModel() + override val snackbarAnchorView get() = binding.logFilterToggle private var actionSave: MenuItem? = null private var isMagiskLogVisible diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/module/ModuleFragment.kt b/app/src/main/java/com/topjohnwu/magisk/ui/module/ModuleFragment.kt index fea37bc94..6c4edc060 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ui/module/ModuleFragment.kt +++ b/app/src/main/java/com/topjohnwu/magisk/ui/module/ModuleFragment.kt @@ -22,6 +22,14 @@ class ModuleFragment : BaseUIFragment override val layoutRes = R.layout.fragment_module_md2 override val viewModel by viewModel() + override val snackbarAnchorView: View + get() { + return if (isFilterVisible) { + binding.moduleFilterInclude.moduleFilterTitleSearch + } else { + binding.moduleFilterToggle + } + } private val listeners = hashSetOf() diff --git a/app/src/main/res/layout/include_log_magisk.xml b/app/src/main/res/layout/include_log_magisk.xml index bb377f8e8..62b7c3775 100644 --- a/app/src/main/res/layout/include_log_magisk.xml +++ b/app/src/main/res/layout/include_log_magisk.xml @@ -34,7 +34,7 @@ android:textAppearance="@style/AppearanceFoundation.Caption" android:textSize="10sp" android:paddingTop="@dimen/internal_action_bar_size" - android:paddingBottom="120dp" + android:paddingBottom="128dp" app:layout_fitsSystemWindowsInsets="top|bottom" tools:text="@tools:sample/lorem/random" />