From fa3ef8a1c1f7a2869522e5683d183bccf11da384 Mon Sep 17 00:00:00 2001 From: RikkaW Date: Thu, 22 Oct 2020 16:47:47 +0800 Subject: [PATCH] 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. --- .../com/topjohnwu/magisk/view/MagiskDialog.kt | 51 +-- .../main/res/layout/dialog_magisk_base.xml | 354 ++++++++---------- app/src/main/res/values/themes.xml | 9 + 3 files changed, 189 insertions(+), 225 deletions(-) diff --git a/app/src/main/java/com/topjohnwu/magisk/view/MagiskDialog.kt b/app/src/main/java/com/topjohnwu/magisk/view/MagiskDialog.kt index 696be17f1..7ba8f7708 100644 --- a/app/src/main/java/com/topjohnwu/magisk/view/MagiskDialog.kt +++ b/app/src/main/java/com/topjohnwu/magisk/view/MagiskDialog.kt @@ -2,25 +2,24 @@ package com.topjohnwu.magisk.view import android.content.Context import android.content.DialogInterface -import android.graphics.Color -import android.graphics.drawable.ColorDrawable +import android.content.res.ColorStateList import android.graphics.drawable.Drawable +import android.graphics.drawable.InsetDrawable import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.WindowManager import androidx.annotation.DrawableRes import androidx.annotation.StringRes import androidx.appcompat.app.AppCompatDialog import androidx.appcompat.content.res.AppCompatResources -import androidx.core.view.ViewCompat -import androidx.core.view.updatePadding import androidx.databinding.Bindable import androidx.databinding.PropertyChangeRegistry import androidx.databinding.ViewDataBinding import androidx.recyclerview.widget.LinearLayoutManager 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.R import com.topjohnwu.magisk.arch.itemBindingOf @@ -47,36 +46,22 @@ class MagiskDialog( override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) super.setContentView(binding.root) + + val surfaceColor = MaterialColors.getColor(context, R.attr.colorSurfaceSurfaceVariant, javaClass.canonicalName) + val materialShapeDrawable = MaterialShapeDrawable(context, null, R.attr.alertDialogStyle, R.style.MaterialAlertDialog_MaterialComponents) + materialShapeDrawable.initializeElevationOverlay(context) + materialShapeDrawable.fillColor = ColorStateList.valueOf(surfaceColor) + materialShapeDrawable.elevation = context.resources.getDimension(R.dimen.margin_generic) + materialShapeDrawable.setCornerSize(context.resources.getDimension(R.dimen.l_50)) + + val inset = context.resources.getDimensionPixelSize(R.dimen.appcompat_dialog_background_inset) window?.apply { - setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) - setLayout( - WindowManager.LayoutParams.MATCH_PARENT, - WindowManager.LayoutParams.MATCH_PARENT - ) - } - - val paddingTop = binding.root.paddingTop - val paddingBottom = binding.root.paddingBottom - ViewCompat.setOnApplyWindowInsetsListener(binding.root) { view, insets -> - view.updatePadding( - top = paddingTop + insets.systemWindowInsetTop, - bottom = paddingBottom + insets.systemWindowInsetBottom - ) - insets + setBackgroundDrawable(InsetDrawable(materialShapeDrawable, inset, inset, inset, inset)) + setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) } } - override fun setCancelable(flag: Boolean) { - val listener = if (!flag) { - null - } else { - setCanceledOnTouchOutside(true) - View.OnClickListener { dismiss() } - } - binding.dialogBaseOutsideContainer.setOnClickListener(listener) - } - - inner class Data: ObservableHost { + inner class Data : ObservableHost { override var callbacks: PropertyChangeRegistry? = null @get:Bindable @@ -88,7 +73,7 @@ class MagiskDialog( set(value) = set(value, field, { field = it }, BR.title) @get:Bindable - var message : CharSequence = "" + var message: CharSequence = "" set(value) = set(value, field, { field = it }, BR.message) val buttonPositive = Button() @@ -101,7 +86,7 @@ class MagiskDialog( POSITIVE, NEUTRAL, NEGATIVE, IDGAF } - inner class Button: ObservableHost { + inner class Button : ObservableHost { override var callbacks: PropertyChangeRegistry? = null @get:Bindable diff --git a/app/src/main/res/layout/dialog_magisk_base.xml b/app/src/main/res/layout/dialog_magisk_base.xml index 9cfb9202f..0d3b98d42 100644 --- a/app/src/main/res/layout/dialog_magisk_base.xml +++ b/app/src/main/res/layout/dialog_magisk_base.xml @@ -12,219 +12,189 @@ + android:layout_width="wrap_content" + android:layout_height="wrap_content" + tools:layout_width="match_parent"> - + + + + + tools:src="@drawable/ic_delete_md2" /> - + + + + + android:layout_height="wrap_content"> - + android:layout_height="match_parent" + android:text="@{data.message}" + android:textAppearance="@style/AppearanceFoundation.Body" + tools:lines="3" + tools:text="@tools:sample/lorem/random" /> - + - + - + - + - + - +