Commit fa3ef8a1 authored by RikkaW's avatar RikkaW Committed by John Wu

Significantly simplify MagiskDialog layout

The goal of original implementation, wrap view again and again, seems to be use the shadow and customizable round corners from MaterialCardView. But this can be done with use MaterialShapeDrawable which used in MaterialCardView directly. This will significantly simplify the layout and MagiskDialog class.
parent c93ada03
...@@ -2,25 +2,24 @@ package com.topjohnwu.magisk.view ...@@ -2,25 +2,24 @@ package com.topjohnwu.magisk.view
import android.content.Context import android.content.Context
import android.content.DialogInterface import android.content.DialogInterface
import android.graphics.Color import android.content.res.ColorStateList
import android.graphics.drawable.ColorDrawable
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import android.graphics.drawable.InsetDrawable
import android.os.Bundle 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.AppCompatDialog import androidx.appcompat.app.AppCompatDialog
import androidx.appcompat.content.res.AppCompatResources import androidx.appcompat.content.res.AppCompatResources
import androidx.core.view.ViewCompat
import androidx.core.view.updatePadding
import androidx.databinding.Bindable import androidx.databinding.Bindable
import androidx.databinding.PropertyChangeRegistry import androidx.databinding.PropertyChangeRegistry
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
import com.google.android.material.color.MaterialColors
import com.google.android.material.shape.MaterialShapeDrawable
import com.topjohnwu.magisk.BR import com.topjohnwu.magisk.BR
import com.topjohnwu.magisk.R import com.topjohnwu.magisk.R
import com.topjohnwu.magisk.arch.itemBindingOf import com.topjohnwu.magisk.arch.itemBindingOf
...@@ -47,36 +46,22 @@ class MagiskDialog( ...@@ -47,36 +46,22 @@ class MagiskDialog(
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
super.setContentView(binding.root) super.setContentView(binding.root)
window?.apply {
setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
setLayout(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT
)
}
val paddingTop = binding.root.paddingTop val surfaceColor = MaterialColors.getColor(context, R.attr.colorSurfaceSurfaceVariant, javaClass.canonicalName)
val paddingBottom = binding.root.paddingBottom val materialShapeDrawable = MaterialShapeDrawable(context, null, R.attr.alertDialogStyle, R.style.MaterialAlertDialog_MaterialComponents)
ViewCompat.setOnApplyWindowInsetsListener(binding.root) { view, insets -> materialShapeDrawable.initializeElevationOverlay(context)
view.updatePadding( materialShapeDrawable.fillColor = ColorStateList.valueOf(surfaceColor)
top = paddingTop + insets.systemWindowInsetTop, materialShapeDrawable.elevation = context.resources.getDimension(R.dimen.margin_generic)
bottom = paddingBottom + insets.systemWindowInsetBottom materialShapeDrawable.setCornerSize(context.resources.getDimension(R.dimen.l_50))
)
insets
}
}
override fun setCancelable(flag: Boolean) { val inset = context.resources.getDimensionPixelSize(R.dimen.appcompat_dialog_background_inset)
val listener = if (!flag) { window?.apply {
null setBackgroundDrawable(InsetDrawable(materialShapeDrawable, inset, inset, inset, inset))
} else { setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
setCanceledOnTouchOutside(true)
View.OnClickListener { dismiss() }
} }
binding.dialogBaseOutsideContainer.setOnClickListener(listener)
} }
inner class Data: ObservableHost { inner class Data : ObservableHost {
override var callbacks: PropertyChangeRegistry? = null override var callbacks: PropertyChangeRegistry? = null
@get:Bindable @get:Bindable
...@@ -88,7 +73,7 @@ class MagiskDialog( ...@@ -88,7 +73,7 @@ class MagiskDialog(
set(value) = set(value, field, { field = it }, BR.title) set(value) = set(value, field, { field = it }, BR.title)
@get:Bindable @get:Bindable
var message : CharSequence = "" var message: CharSequence = ""
set(value) = set(value, field, { field = it }, BR.message) set(value) = set(value, field, { field = it }, BR.message)
val buttonPositive = Button() val buttonPositive = Button()
...@@ -101,7 +86,7 @@ class MagiskDialog( ...@@ -101,7 +86,7 @@ class MagiskDialog(
POSITIVE, NEUTRAL, NEGATIVE, IDGAF POSITIVE, NEUTRAL, NEGATIVE, IDGAF
} }
inner class Button: ObservableHost { inner class Button : ObservableHost {
override var callbacks: PropertyChangeRegistry? = null override var callbacks: PropertyChangeRegistry? = null
@get:Bindable @get:Bindable
......
...@@ -12,32 +12,9 @@ ...@@ -12,32 +12,9 @@
</data> </data>
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/dialog_base_outside_container" android:layout_width="wrap_content"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constrainedHeight="true"
app:layout_constrainedWidth="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_max="400dp">
<com.google.android.material.card.MaterialCardView
style="@style/WidgetFoundation.Card.Elevated"
android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:focusable="false" tools:layout_width="match_parent">
app:cardElevation="@dimen/margin_generic"
app:cardUseCompatPadding="true">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.Guideline <androidx.constraintlayout.widget.Guideline
android:id="@+id/dialog_base_start" android:id="@+id/dialog_base_start"
...@@ -220,11 +197,4 @@ ...@@ -220,11 +197,4 @@
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</com.google.android.material.card.MaterialCardView>
</FrameLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout> </layout>
...@@ -4,11 +4,13 @@ ...@@ -4,11 +4,13 @@
<style name="Base.V17.Theme.Foundation.Light" parent="Theme.MaterialComponents.Light.NoActionBar"> <style name="Base.V17.Theme.Foundation.Light" parent="Theme.MaterialComponents.Light.NoActionBar">
<item name="android:windowBackground">?colorSurface</item> <item name="android:windowBackground">?colorSurface</item>
<item name="android:windowContentOverlay">@null</item> <item name="android:windowContentOverlay">@null</item>
<item name="dialogTheme">@style/ThemeOverlay.Foundation.Dialog</item>
</style> </style>
<style name="Base.V17.Theme.Foundation" parent="Theme.MaterialComponents.NoActionBar"> <style name="Base.V17.Theme.Foundation" parent="Theme.MaterialComponents.NoActionBar">
<item name="android:windowBackground">?colorSurface</item> <item name="android:windowBackground">?colorSurface</item>
<item name="android:windowContentOverlay">@null</item> <item name="android:windowContentOverlay">@null</item>
<item name="dialogTheme">@style/ThemeOverlay.Foundation.Dialog</item>
</style> </style>
<style name="Theme.Foundation.Light" parent="Base.V17.Theme.Foundation.Light" /> <style name="Theme.Foundation.Light" parent="Base.V17.Theme.Foundation.Light" />
...@@ -29,4 +31,11 @@ ...@@ -29,4 +31,11 @@
<style name="Theme.Splash" parent="Base.V17.Theme.Splash" /> <style name="Theme.Splash" parent="Base.V17.Theme.Splash" />
<style name="Base.V17.ThemeOverlay.Foundation.Dialog" parent="ThemeOverlay.MaterialComponents.Dialog">
<item name="android:windowMinWidthMajor">@dimen/abc_dialog_min_width_major</item>
<item name="android:windowMinWidthMinor">@dimen/abc_dialog_min_width_minor</item>
</style>
<style name="ThemeOverlay.Foundation.Dialog" parent="Base.V17.ThemeOverlay.Foundation.Dialog" />
</resources> </resources>
\ No newline at end of file
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