Commit eae4eff9 authored by Viktor De Pasquale's avatar Viktor De Pasquale

Fixed custom dialog behaving oddly while displaying scrollable content

parent 848be8f8
...@@ -9,9 +9,12 @@ import android.os.Bundle ...@@ -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 ...@@ -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( ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -223,7 +226,7 @@
</com.android.internal.widget.ButtonBarLayout> </com.android.internal.widget.ButtonBarLayout>
</ScrollView> </FrameLayout>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment