瀏覽代碼

Use more static imports, add isRtl() extension for views

Aidan Follestad 6 年之前
父節點
當前提交
7781aa90cf

+ 9 - 7
core/src/main/java/com/afollestad/materialdialogs/internal/button/DialogActionButtonLayout.kt

@@ -10,6 +10,8 @@ import android.content.Context
 import android.graphics.Canvas
 import android.support.v7.widget.AppCompatCheckBox
 import android.util.AttributeSet
+import android.view.View.MeasureSpec.getSize
+import android.view.View.MeasureSpec.makeMeasureSpec
 import com.afollestad.materialdialogs.R
 import com.afollestad.materialdialogs.WhichButton
 import com.afollestad.materialdialogs.internal.main.BaseSubLayout
@@ -82,13 +84,13 @@ internal class DialogActionButtonLayout(
       return
     }
 
-    val parentWidth = MeasureSpec.getSize(widthMeasureSpec)
+    val parentWidth = getSize(widthMeasureSpec)
 
     if (checkBoxPrompt.isVisible()) {
       val checkboxPromptWidth = parentWidth - (checkBoxPromptMarginHorizontal * 2)
       checkBoxPrompt.measure(
-          MeasureSpec.makeMeasureSpec(checkboxPromptWidth, MeasureSpec.EXACTLY),
-          MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)
+          makeMeasureSpec(checkboxPromptWidth, MeasureSpec.EXACTLY),
+          makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)
       )
     }
 
@@ -103,13 +105,13 @@ internal class DialogActionButtonLayout(
       )
       if (stackButtons) {
         button.measure(
-            MeasureSpec.makeMeasureSpec(parentWidth, MeasureSpec.EXACTLY),
-            MeasureSpec.makeMeasureSpec(buttonHeightStacked, MeasureSpec.EXACTLY)
+            makeMeasureSpec(parentWidth, MeasureSpec.EXACTLY),
+            makeMeasureSpec(buttonHeightStacked, MeasureSpec.EXACTLY)
         )
       } else {
         button.measure(
-            MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
-            MeasureSpec.makeMeasureSpec(buttonHeightDefault, MeasureSpec.EXACTLY)
+            makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
+            makeMeasureSpec(buttonHeightDefault, MeasureSpec.EXACTLY)
         )
       }
     }

+ 10 - 16
core/src/main/java/com/afollestad/materialdialogs/internal/main/DialogLayout.kt

@@ -20,6 +20,8 @@ import android.view.View
 import android.view.View.MeasureSpec.AT_MOST
 import android.view.View.MeasureSpec.EXACTLY
 import android.view.View.MeasureSpec.UNSPECIFIED
+import android.view.View.MeasureSpec.getSize
+import android.view.View.MeasureSpec.makeMeasureSpec
 import android.widget.FrameLayout
 import com.afollestad.materialdialogs.MaterialDialog
 import com.afollestad.materialdialogs.R
@@ -78,20 +80,20 @@ internal class DialogLayout(
     widthMeasureSpec: Int,
     heightMeasureSpec: Int
   ) {
-    val specWidth = MeasureSpec.getSize(widthMeasureSpec)
-    var specHeight = MeasureSpec.getSize(heightMeasureSpec)
+    val specWidth = getSize(widthMeasureSpec)
+    var specHeight = getSize(heightMeasureSpec)
     if (specHeight > maxHeight) {
       specHeight = maxHeight
     }
 
     titleLayout.measure(
-        MeasureSpec.makeMeasureSpec(specWidth, EXACTLY),
-        MeasureSpec.makeMeasureSpec(0, UNSPECIFIED)
+        makeMeasureSpec(specWidth, EXACTLY),
+        makeMeasureSpec(0, UNSPECIFIED)
     )
     if (buttonsLayout.shouldBeVisible()) {
       buttonsLayout.measure(
-          MeasureSpec.makeMeasureSpec(specWidth, EXACTLY),
-          MeasureSpec.makeMeasureSpec(0, UNSPECIFIED)
+          makeMeasureSpec(specWidth, EXACTLY),
+          makeMeasureSpec(0, UNSPECIFIED)
       )
     }
 
@@ -99,22 +101,14 @@ internal class DialogLayout(
       titleLayout.measuredHeight + buttonsLayout.measuredHeight
     val remainingHeight = specHeight - titleAndButtonsHeight
     contentView.measure(
-        MeasureSpec.makeMeasureSpec(specWidth, EXACTLY),
-        MeasureSpec.makeMeasureSpec(remainingHeight, AT_MOST)
+        makeMeasureSpec(specWidth, EXACTLY),
+        makeMeasureSpec(remainingHeight, AT_MOST)
     )
 
     val totalHeight = titleLayout.measuredHeight +
         contentView.measuredHeight +
         buttonsLayout.measuredHeight
     setMeasuredDimension(specWidth, totalHeight)
-
-    Log.d(
-        "MaterialDialogs",
-        "DialogLayout.onMeasure($specWidth, $totalHeight)\n" +
-            "\ttitleHeight = ${titleLayout.measuredHeight}, " +
-            "\tcontentHeight = ${contentView.measuredHeight}, " +
-            "\tbuttonsHeight = ${buttonsLayout.measuredHeight}"
-    )
   }
 
   override fun onLayout(

+ 7 - 5
core/src/main/java/com/afollestad/materialdialogs/internal/title/DialogTitleLayout.kt

@@ -12,6 +12,8 @@ import android.util.AttributeSet
 import android.view.View.MeasureSpec.AT_MOST
 import android.view.View.MeasureSpec.EXACTLY
 import android.view.View.MeasureSpec.UNSPECIFIED
+import android.view.View.MeasureSpec.getSize
+import android.view.View.MeasureSpec.makeMeasureSpec
 import android.widget.ImageView
 import android.widget.TextView
 import com.afollestad.materialdialogs.R
@@ -61,21 +63,21 @@ internal class DialogTitleLayout(
       return
     }
 
-    val parentWidth = MeasureSpec.getSize(widthMeasureSpec)
+    val parentWidth = getSize(widthMeasureSpec)
     var titleMaxWidth =
       parentWidth - (frameMarginHorizontal * 2)
 
     if (iconView.isVisible()) {
       iconView.measure(
-          MeasureSpec.makeMeasureSpec(iconSize, EXACTLY),
-          MeasureSpec.makeMeasureSpec(iconSize, EXACTLY)
+          makeMeasureSpec(iconSize, EXACTLY),
+          makeMeasureSpec(iconSize, EXACTLY)
       )
       titleMaxWidth -= iconView.measuredWidth
     }
 
     titleView.measure(
-        MeasureSpec.makeMeasureSpec(titleMaxWidth, AT_MOST),
-        MeasureSpec.makeMeasureSpec(0, UNSPECIFIED)
+        makeMeasureSpec(titleMaxWidth, AT_MOST),
+        makeMeasureSpec(0, UNSPECIFIED)
     )
 
     val iconViewHeight =

+ 7 - 0
core/src/main/java/com/afollestad/materialdialogs/utils/ViewExt.kt

@@ -7,6 +7,8 @@
 package com.afollestad.materialdialogs.utils
 
 import android.content.Context
+import android.os.Build.VERSION.SDK_INT
+import android.os.Build.VERSION_CODES.JELLY_BEAN_MR1
 import android.support.annotation.LayoutRes
 import android.support.annotation.RestrictTo
 import android.support.annotation.RestrictTo.Scope
@@ -102,6 +104,11 @@ internal fun <T : View> T.isNotVisible(): Boolean {
   return !isVisible()
 }
 
+internal fun <T : View> T.isRtl(): Boolean {
+  if (SDK_INT < JELLY_BEAN_MR1) return false
+  return resources.configuration.layoutDirection == View.LAYOUT_DIRECTION_RTL
+}
+
 @RestrictTo(Scope.LIBRARY_GROUP)
 fun <T : View> T.setVisible(visible: Boolean) {
   visibility = if (visible) VISIBLE else INVISIBLE