Loading packages/SystemUI/res/layout/quick_settings_header_info.xml +1 −4 Original line number Original line Diff line number Diff line Loading @@ -27,14 +27,12 @@ android:id="@+id/status_container" android:id="@+id/status_container" android:layout_width="match_parent" android:layout_width="match_parent" android:layout_weight="1" android:layout_weight="1" android:layout_height="match_parent" android:layout_height="match_parent"> android:gravity="start" > <LinearLayout <LinearLayout android:id = "@+id/alarm_container" android:id = "@+id/alarm_container" android:layout_width="wrap_content" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_height="match_parent" android:layout_gravity="center_vertical" android:gravity="center_vertical" android:gravity="center_vertical" android:focusable="true" android:focusable="true" android:clickable="true"> android:clickable="true"> Loading Loading @@ -69,7 +67,6 @@ android:id = "@+id/ringer_container" android:id = "@+id/ringer_container" android:layout_width="wrap_content" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_height="match_parent" android:layout_gravity="center_vertical" android:gravity="center_vertical" android:gravity="center_vertical" android:focusable="true" android:focusable="true" android:clickable="true"> android:clickable="true"> Loading packages/SystemUI/src/com/android/systemui/qs/QSHeaderInfoLayout.kt +32 −24 Original line number Original line Diff line number Diff line Loading @@ -41,6 +41,7 @@ class QSHeaderInfoLayout @JvmOverloads constructor( private lateinit var alarmContainer: View private lateinit var alarmContainer: View private lateinit var ringerContainer: View private lateinit var ringerContainer: View private lateinit var statusSeparator: View private lateinit var statusSeparator: View private val location = Location(0, 0) override fun onFinishInflate() { override fun onFinishInflate() { super.onFinishInflate() super.onFinishInflate() Loading @@ -53,31 +54,21 @@ class QSHeaderInfoLayout @JvmOverloads constructor( // At most one view is there // At most one view is there if (statusSeparator.visibility == View.GONE) super.onLayout(changed, l, t, r, b) if (statusSeparator.visibility == View.GONE) super.onLayout(changed, l, t, r, b) else { else { val alarmWidth = alarmContainer.measuredWidth val layoutRTL = isLayoutRtl val separatorWidth = statusSeparator.measuredWidth val width = r - l val ringerWidth = ringerContainer.measuredWidth val height = b - t val availableSpace = (r - l) - separatorWidth var offset = 0 var left = l if (alarmWidth < availableSpace / 2) { offset += alarmContainer.layoutView(width, height, offset, layoutRTL) alarmContainer.layout(left, t, left + alarmWidth, b) offset += statusSeparator.layoutView(width, height, offset, layoutRTL) left += alarmWidth ringerContainer.layoutView(width, height, offset, layoutRTL) statusSeparator.layout(left, t, left + separatorWidth, b) left += separatorWidth ringerContainer.layout(left, t, left + Math.min(ringerWidth, r - left), b) } else if (ringerWidth < availableSpace / 2) { val alarmAllocation = Math.min(availableSpace - ringerWidth, alarmWidth) alarmContainer.layout(left, t, left + alarmAllocation, b) left += alarmWidth statusSeparator.layout(left, t, left + separatorWidth, b) left += separatorWidth ringerContainer.layout(left, t, left + ringerWidth, b) } else { alarmContainer.layout(left, t, left + availableSpace / 2, b) left += availableSpace / 2 statusSeparator.layout(left, t, left + separatorWidth, b) ringerContainer.layout(r - availableSpace / 2, t, r, b) } } } } private fun View.layoutView(pWidth: Int, pHeight: Int, offset: Int, RTL: Boolean): Int { location.setLocationFromOffset(pWidth, offset, this.measuredWidth, RTL) layout(location.left, 0, location.right, pHeight) return this.measuredWidth } } override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { Loading Loading @@ -120,4 +111,21 @@ class QSHeaderInfoLayout @JvmOverloads constructor( } } setMeasuredDimension(width, measuredHeight) setMeasuredDimension(width, measuredHeight) } } private data class Location(var left: Int, var right: Int) { /** * Sets the [left] and [right] with the correct values for laying out the child, respecting * RTL. Only set the variable through here to prevent concurrency issues. * This is done to prevent allocation of [Pair] in [onLayout]. */ fun setLocationFromOffset(parentWidth: Int, offset: Int, width: Int, RTL: Boolean) { if (RTL) { left = parentWidth - offset - width right = parentWidth - offset } else { left = offset right = offset + width } } } } } No newline at end of file Loading
packages/SystemUI/res/layout/quick_settings_header_info.xml +1 −4 Original line number Original line Diff line number Diff line Loading @@ -27,14 +27,12 @@ android:id="@+id/status_container" android:id="@+id/status_container" android:layout_width="match_parent" android:layout_width="match_parent" android:layout_weight="1" android:layout_weight="1" android:layout_height="match_parent" android:layout_height="match_parent"> android:gravity="start" > <LinearLayout <LinearLayout android:id = "@+id/alarm_container" android:id = "@+id/alarm_container" android:layout_width="wrap_content" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_height="match_parent" android:layout_gravity="center_vertical" android:gravity="center_vertical" android:gravity="center_vertical" android:focusable="true" android:focusable="true" android:clickable="true"> android:clickable="true"> Loading Loading @@ -69,7 +67,6 @@ android:id = "@+id/ringer_container" android:id = "@+id/ringer_container" android:layout_width="wrap_content" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_height="match_parent" android:layout_gravity="center_vertical" android:gravity="center_vertical" android:gravity="center_vertical" android:focusable="true" android:focusable="true" android:clickable="true"> android:clickable="true"> Loading
packages/SystemUI/src/com/android/systemui/qs/QSHeaderInfoLayout.kt +32 −24 Original line number Original line Diff line number Diff line Loading @@ -41,6 +41,7 @@ class QSHeaderInfoLayout @JvmOverloads constructor( private lateinit var alarmContainer: View private lateinit var alarmContainer: View private lateinit var ringerContainer: View private lateinit var ringerContainer: View private lateinit var statusSeparator: View private lateinit var statusSeparator: View private val location = Location(0, 0) override fun onFinishInflate() { override fun onFinishInflate() { super.onFinishInflate() super.onFinishInflate() Loading @@ -53,31 +54,21 @@ class QSHeaderInfoLayout @JvmOverloads constructor( // At most one view is there // At most one view is there if (statusSeparator.visibility == View.GONE) super.onLayout(changed, l, t, r, b) if (statusSeparator.visibility == View.GONE) super.onLayout(changed, l, t, r, b) else { else { val alarmWidth = alarmContainer.measuredWidth val layoutRTL = isLayoutRtl val separatorWidth = statusSeparator.measuredWidth val width = r - l val ringerWidth = ringerContainer.measuredWidth val height = b - t val availableSpace = (r - l) - separatorWidth var offset = 0 var left = l if (alarmWidth < availableSpace / 2) { offset += alarmContainer.layoutView(width, height, offset, layoutRTL) alarmContainer.layout(left, t, left + alarmWidth, b) offset += statusSeparator.layoutView(width, height, offset, layoutRTL) left += alarmWidth ringerContainer.layoutView(width, height, offset, layoutRTL) statusSeparator.layout(left, t, left + separatorWidth, b) left += separatorWidth ringerContainer.layout(left, t, left + Math.min(ringerWidth, r - left), b) } else if (ringerWidth < availableSpace / 2) { val alarmAllocation = Math.min(availableSpace - ringerWidth, alarmWidth) alarmContainer.layout(left, t, left + alarmAllocation, b) left += alarmWidth statusSeparator.layout(left, t, left + separatorWidth, b) left += separatorWidth ringerContainer.layout(left, t, left + ringerWidth, b) } else { alarmContainer.layout(left, t, left + availableSpace / 2, b) left += availableSpace / 2 statusSeparator.layout(left, t, left + separatorWidth, b) ringerContainer.layout(r - availableSpace / 2, t, r, b) } } } } private fun View.layoutView(pWidth: Int, pHeight: Int, offset: Int, RTL: Boolean): Int { location.setLocationFromOffset(pWidth, offset, this.measuredWidth, RTL) layout(location.left, 0, location.right, pHeight) return this.measuredWidth } } override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { Loading Loading @@ -120,4 +111,21 @@ class QSHeaderInfoLayout @JvmOverloads constructor( } } setMeasuredDimension(width, measuredHeight) setMeasuredDimension(width, measuredHeight) } } private data class Location(var left: Int, var right: Int) { /** * Sets the [left] and [right] with the correct values for laying out the child, respecting * RTL. Only set the variable through here to prevent concurrency issues. * This is done to prevent allocation of [Pair] in [onLayout]. */ fun setLocationFromOffset(parentWidth: Int, offset: Int, width: Int, RTL: Boolean) { if (RTL) { left = parentWidth - offset - width right = parentWidth - offset } else { left = offset right = offset + width } } } } } No newline at end of file