Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7a03e3ea authored by Anton Potapov's avatar Anton Potapov Committed by Android (Google) Code Review
Browse files

Merge "Updates home controls overflow menu visuals" into udc-dev

parents 0a7d7ba1 af38a6bf
Loading
Loading
Loading
Loading
+10 −6
Original line number Diff line number Diff line
@@ -13,13 +13,17 @@
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  -->
<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/controls_more_item_text"
    style="@style/Control.MenuItem"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="start"
    android:layout_height="@dimen/control_menu_item_height"
    android:layout_gravity="center_vertical"
    android:background="@drawable/controls_popup_item_background"
    android:paddingStart="@dimen/control_menu_horizontal_padding"
    android:paddingEnd="@dimen/control_menu_horizontal_padding"
    android:textDirection="locale"/>
    android:textDirection="locale"
    android:textSize="@dimen/control_item_text_size"
    tools:fontFamily="@null"
    tools:text="@tools:sample/lorem/random" />
 No newline at end of file
+4 −4
Original line number Diff line number Diff line
@@ -16,18 +16,18 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="@dimen/control_popup_item_height"
    android:layout_height="@dimen/control_apps_popup_item_height"
    android:background="@drawable/controls_popup_item_background"
    android:gravity="center_vertical|start"
    android:orientation="horizontal"
    android:paddingStart="@dimen/control_popup_item_padding"
    android:paddingEnd="@dimen/control_popup_item_padding">
    android:paddingStart="@dimen/control_menu_horizontal_padding"
    android:paddingEnd="@dimen/control_menu_horizontal_padding">

  <ImageView
      android:id="@+id/app_icon"
      android:layout_width="@dimen/controls_header_app_icon_size"
      android:layout_height="@dimen/controls_header_app_icon_size"
      android:layout_marginEnd="@dimen/control_popup_item_padding"
      android:layout_marginEnd="@dimen/control_menu_horizontal_padding"
      android:contentDescription="@null"
      tools:src="@drawable/ic_android" />

+7 −9
Original line number Diff line number Diff line
@@ -1199,19 +1199,17 @@
    <dimen name="controls_top_margin">48dp</dimen>
    <dimen name="controls_content_margin_horizontal">0dp</dimen>
    <dimen name="control_header_text_size">24sp</dimen>
    <dimen name="control_item_text_size">16sp</dimen>
    <dimen name="control_item_text_size">14sp</dimen>
    <dimen name="control_menu_item_text_size">16sp</dimen>
    <dimen name="control_menu_item_min_height">56dp</dimen>
    <dimen name="control_menu_item_height">54dp</dimen>
    <dimen name="control_menu_vertical_padding">12dp</dimen>
    <dimen name="control_menu_horizontal_padding">16dp</dimen>
    <dimen name="control_popup_item_corner_radius">4dp</dimen>
    <dimen name="control_popup_item_height">56dp</dimen>
    <dimen name="control_popup_item_padding">16dp</dimen>
    <dimen name="control_popup_items_divider_height">1dp</dimen>
    <dimen name="control_menu_horizontal_padding">@dimen/notification_side_paddings</dimen>
    <dimen name="control_apps_popup_item_height">56dp</dimen>
    <dimen name="control_popup_item_corner_radius">@dimen/notification_corner_radius_small</dimen>
    <dimen name="control_popup_items_divider_height">@dimen/controls_app_divider_height</dimen>
    <dimen name="control_popup_max_width">380dp</dimen>
    <dimen name="control_popup_corner_radius">28dp</dimen>
    <dimen name="control_popup_corner_radius">@dimen/notification_corner_radius</dimen>
    <dimen name="control_popup_horizontal_margin">16dp</dimen>
    <dimen name="control_spinner_padding_vertical">24dp</dimen>
    <dimen name="control_spinner_padding_horizontal">20dp</dimen>
    <dimen name="control_text_size">14sp</dimen>
    <dimen name="control_icon_size">24dp</dimen>
+1 −1
Original line number Diff line number Diff line
@@ -895,7 +895,7 @@
        <item name="android:textColor">@color/control_primary_text</item>
        <item name="android:singleLine">true</item>
        <item name="android:gravity">center_vertical</item>
        <item name="android:minHeight">@dimen/control_menu_item_min_height</item>
        <item name="android:minHeight">@dimen/control_menu_item_height</item>
    </style>

    <style name="Control.Spinner">
+58 −13
Original line number Diff line number Diff line
@@ -20,11 +20,18 @@ import android.content.Context
import android.content.res.Resources
import android.graphics.drawable.ColorDrawable
import android.graphics.drawable.Drawable
import android.view.Gravity
import android.view.Gravity.END
import android.view.Gravity.GravityFlags
import android.view.Gravity.NO_GRAVITY
import android.view.Gravity.START
import android.view.View
import android.view.View.MeasureSpec
import android.view.ViewGroup
import android.widget.ListPopupWindow
import android.widget.ListView
import android.widget.PopupWindow
import com.android.systemui.R
import kotlin.math.max

class ControlsPopupMenu(context: Context) : ListPopupWindow(context) {

@@ -40,13 +47,13 @@ class ControlsPopupMenu(context: Context) : ListPopupWindow(context) {
    private val dimDrawable: Drawable = ColorDrawable(resources.getColor(R.color.control_popup_dim))

    private var dismissListener: PopupWindow.OnDismissListener? = null
    @GravityFlags private var dropDownGravity: Int = NO_GRAVITY

    init {
        setBackgroundDrawable(dialogBackground)

        inputMethodMode = INPUT_METHOD_NOT_NEEDED
        isModal = true
        setDropDownGravity(Gravity.START)

        // dismiss method isn't called when popup is hidden by outside touch. So we need to
        // override a listener to remove a dimming foreground
@@ -59,30 +66,68 @@ class ControlsPopupMenu(context: Context) : ListPopupWindow(context) {
    override fun show() {
        // need to call show() first in order to construct the listView
        super.show()

        val paddedWidth = resources.displayMetrics.widthPixels - 2 * horizontalMargin
        width = maxWidth.coerceAtMost(paddedWidth)
        updateWidth()
        anchorView?.let {
            horizontalOffset = -width / 2 + it.width / 2
            verticalOffset = -it.height / 2
            if (it.layoutDirection == View.LAYOUT_DIRECTION_RTL) {
                horizontalOffset = -horizontalOffset
            }

            positionPopup(it)
            it.rootView.foreground = dimDrawable
        }

        with(listView!!) {
            clipToOutline = true
            background = dialogBackground
            dividerHeight = listDividerHeight
        }

        // actual show takes into account updated ListView specs
        super.show()
    }

    override fun setDropDownGravity(@GravityFlags gravity: Int) {
        super.setDropDownGravity(gravity)
        dropDownGravity = gravity
    }

    override fun setOnDismissListener(listener: PopupWindow.OnDismissListener?) {
        dismissListener = listener
    }

    private fun updateWidth() {
        val paddedWidth = resources.displayMetrics.widthPixels - 2 * horizontalMargin
        val maxWidth = maxWidth.coerceAtMost(paddedWidth)
        when (width) {
            ViewGroup.LayoutParams.MATCH_PARENT -> {
                width = maxWidth
            }
            ViewGroup.LayoutParams.WRAP_CONTENT -> {
                width = listView!!.measureDesiredWidth(maxWidth).coerceAtMost(maxWidth)
            }
        }
    }

    private fun positionPopup(anchorView: View) {
        when (dropDownGravity) {
            NO_GRAVITY -> {
                horizontalOffset = (-width + anchorView.width) / 2
                if (anchorView.layoutDirection == View.LAYOUT_DIRECTION_RTL) {
                    horizontalOffset = -horizontalOffset
                }
            }
            END,
            START -> {
                horizontalOffset = 0
            }
        }
        verticalOffset = -anchorView.height / 2
    }

    private fun ListView.measureDesiredWidth(maxWidth: Int): Int {
        var maxItemWidth = 0
        repeat(adapter.count) {
            val view = adapter.getView(it, null, listView)
            view.measure(
                MeasureSpec.makeMeasureSpec(maxWidth, MeasureSpec.AT_MOST),
                MeasureSpec.UNSPECIFIED
            )
            maxItemWidth = max(maxItemWidth, view.measuredWidth)
        }
        return maxItemWidth
    }
}
Loading