mirror of
https://github.com/topjohnwu/Magisk.git
synced 2025-02-20 01:18:29 +00:00
Fixed custom dialog behaving oddly while displaying scrollable content
This commit is contained in:
parent
848be8f806
commit
eae4eff92f
@ -9,9 +9,12 @@ import android.os.Bundle
|
|||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
import android.view.WindowManager
|
||||||
import androidx.annotation.DrawableRes
|
import androidx.annotation.DrawableRes
|
||||||
import androidx.annotation.StringRes
|
import androidx.annotation.StringRes
|
||||||
import androidx.appcompat.app.AlertDialog
|
import androidx.appcompat.app.AppCompatDialog
|
||||||
|
import androidx.core.view.ViewCompat
|
||||||
|
import androidx.core.view.updatePadding
|
||||||
import androidx.databinding.ViewDataBinding
|
import androidx.databinding.ViewDataBinding
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
@ -26,7 +29,7 @@ import me.tatarka.bindingcollectionadapter2.ItemBinding
|
|||||||
|
|
||||||
class MagiskDialog @JvmOverloads constructor(
|
class MagiskDialog @JvmOverloads constructor(
|
||||||
context: Context, theme: Int = 0
|
context: Context, theme: Int = 0
|
||||||
) : AlertDialog(context, theme) {
|
) : AppCompatDialog(context, theme) {
|
||||||
|
|
||||||
private val binding: DialogMagiskBaseBinding =
|
private val binding: DialogMagiskBaseBinding =
|
||||||
DialogMagiskBaseBinding.inflate(LayoutInflater.from(context))
|
DialogMagiskBaseBinding.inflate(LayoutInflater.from(context))
|
||||||
@ -34,12 +37,30 @@ class MagiskDialog @JvmOverloads constructor(
|
|||||||
|
|
||||||
init {
|
init {
|
||||||
binding.setVariable(BR.data, data)
|
binding.setVariable(BR.data, data)
|
||||||
super.setView(binding.root)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
|
super.setContentView(binding.root)
|
||||||
|
window?.apply {
|
||||||
|
setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
|
||||||
|
setLayout(
|
||||||
|
WindowManager.LayoutParams.MATCH_PARENT,
|
||||||
|
WindowManager.LayoutParams.MATCH_PARENT
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
ViewCompat.setOnApplyWindowInsetsListener(binding.root) { view, insets ->
|
||||||
|
view.updatePadding(
|
||||||
|
top = view.paddingTop + insets.systemWindowInsetTop,
|
||||||
|
bottom = view.paddingBottom + insets.systemWindowInsetBottom
|
||||||
|
)
|
||||||
|
insets
|
||||||
|
}
|
||||||
|
|
||||||
|
binding.dialogBaseOutsideContainer.setOnClickListener {
|
||||||
|
setCanceledOnTouchOutside(true)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inner class Data {
|
inner class Data {
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
android:id="@+id/dialog_base_outside_container"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
<com.google.android.material.card.MaterialCardView
|
<com.google.android.material.card.MaterialCardView
|
||||||
@ -20,10 +21,11 @@
|
|||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:cardElevation="@dimen/margin_generic"
|
app:cardElevation="@dimen/margin_generic"
|
||||||
|
app:layout_constrainedHeight="true"
|
||||||
app:cardUseCompatPadding="true"
|
app:cardUseCompatPadding="true"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintLeft_toLeftOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintRight_toRightOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
app:layout_constraintWidth_default="percent"
|
app:layout_constraintWidth_default="percent"
|
||||||
app:layout_constraintWidth_max="400dp"
|
app:layout_constraintWidth_max="400dp"
|
||||||
@ -51,8 +53,9 @@
|
|||||||
android:id="@+id/dialog_base_icon"
|
android:id="@+id/dialog_base_icon"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:layout_constraintLeft_toLeftOf="parent"
|
app:layout_constraintBottom_toTopOf="@+id/dialog_base_title"
|
||||||
app:layout_constraintRight_toRightOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent">
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatImageView
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
@ -82,64 +85,64 @@
|
|||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:text="@{data.title}"
|
android:text="@{data.title}"
|
||||||
android:textAppearance="@style/AppearanceFoundation.Title"
|
android:textAppearance="@style/AppearanceFoundation.Title"
|
||||||
app:layout_constraintLeft_toLeftOf="@+id/dialog_base_start"
|
app:layout_constraintEnd_toEndOf="@+id/dialog_base_end"
|
||||||
app:layout_constraintRight_toRightOf="@+id/dialog_base_end"
|
app:layout_constraintStart_toStartOf="@+id/dialog_base_start"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/dialog_base_icon"
|
app:layout_constraintTop_toBottomOf="@+id/dialog_base_icon"
|
||||||
tools:lines="1"
|
tools:lines="1"
|
||||||
tools:text="@tools:sample/lorem/random" />
|
tools:text="@tools:sample/lorem/random" />
|
||||||
|
|
||||||
<androidx.core.widget.NestedScrollView
|
<FrameLayout
|
||||||
android:id="@+id/dialog_base_scroll"
|
android:id="@+id/dialog_base_scroll"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:layout_constrainedHeight="true"
|
|
||||||
android:layout_marginTop="@dimen/l_50"
|
android:layout_marginTop="@dimen/l_50"
|
||||||
|
app:layout_constrainedHeight="true"
|
||||||
app:layout_constraintBottom_toTopOf="@+id/dialog_base_space"
|
app:layout_constraintBottom_toTopOf="@+id/dialog_base_space"
|
||||||
app:layout_constraintLeft_toLeftOf="@+id/dialog_base_start"
|
app:layout_constraintEnd_toEndOf="@+id/dialog_base_end"
|
||||||
app:layout_constraintRight_toRightOf="@+id/dialog_base_end"
|
app:layout_constraintStart_toStartOf="@+id/dialog_base_start"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/dialog_base_title">
|
app:layout_constraintTop_toBottomOf="@+id/dialog_base_title">
|
||||||
|
|
||||||
<LinearLayout
|
<androidx.core.widget.NestedScrollView
|
||||||
|
gone="@{data.message.length == 0}"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content">
|
||||||
android:orientation="vertical">
|
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatTextView
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
android:id="@+id/dialog_base_message"
|
android:id="@+id/dialog_base_message"
|
||||||
gone="@{data.message.length == 0}"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="match_parent"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:text="@{data.message}"
|
android:text="@{data.message}"
|
||||||
android:textAppearance="@style/AppearanceFoundation.Body"
|
android:textAppearance="@style/AppearanceFoundation.Body"
|
||||||
tools:lines="3"
|
tools:lines="3"
|
||||||
tools:text="@tools:sample/lorem/random" />
|
tools:text="@tools:sample/lorem/random" />
|
||||||
|
|
||||||
<FrameLayout
|
</androidx.core.widget.NestedScrollView>
|
||||||
android:id="@+id/dialog_base_container"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
<FrameLayout
|
||||||
|
android:id="@+id/dialog_base_container"
|
||||||
|
gone="@{data.message.length != 0}"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content" />
|
||||||
|
|
||||||
</androidx.core.widget.NestedScrollView>
|
</FrameLayout>
|
||||||
|
|
||||||
<Space
|
<Space
|
||||||
android:id="@+id/dialog_base_space"
|
android:id="@+id/dialog_base_space"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="@dimen/l1"
|
android:layout_height="@dimen/l1"
|
||||||
app:layout_constraintLeft_toLeftOf="parent"
|
app:layout_constraintBottom_toTopOf="@+id/dialog_base_buttons"
|
||||||
app:layout_constraintRight_toRightOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintBottom_toTopOf="@+id/dialog_base_buttons" />
|
app:layout_constraintStart_toStartOf="parent" />
|
||||||
|
|
||||||
<ScrollView
|
<FrameLayout
|
||||||
android:id="@+id/dialog_base_buttons"
|
android:id="@+id/dialog_base_buttons"
|
||||||
style="?attr/buttonBarStyle"
|
style="?attr/buttonBarStyle"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:fillViewport="true"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
android:scrollbarAlwaysDrawVerticalTrack="true"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintBottom_toBottomOf="parent">
|
app:layout_constraintStart_toStartOf="parent">
|
||||||
|
|
||||||
<com.android.internal.widget.ButtonBarLayout
|
<com.android.internal.widget.ButtonBarLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
@ -223,7 +226,7 @@
|
|||||||
|
|
||||||
</com.android.internal.widget.ButtonBarLayout>
|
</com.android.internal.widget.ButtonBarLayout>
|
||||||
|
|
||||||
</ScrollView>
|
</FrameLayout>
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user