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

Commit 5cb75fdf authored by Fabian Kozynski's avatar Fabian Kozynski Committed by Android (Google) Code Review
Browse files

Merge "Implement privacy chip design"

parents ed36c17e ff0919f8
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -16,8 +16,6 @@
-->

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="?android:attr/colorAccent" />
    <padding android:paddingTop="@dimen/ongoing_appops_chip_bg_padding"
        android:paddingBottom="@dimen/ongoing_appops_chip_bg_padding" />
    <solid android:color="#FFFFFF" />
    <corners android:radius="@dimen/ongoing_appops_chip_bg_corner_radius" />
</shape>
 No newline at end of file
+7 −12
Original line number Diff line number Diff line
@@ -22,19 +22,14 @@
    android:layout_height="match_parent"
    android:layout_width="wrap_content"
    android:layout_gravity="center_vertical|end"
    android:focusable="true" >
    android:focusable="true"
    android:minWidth="48dp" >

        <FrameLayout
            android:id="@+id/background"
            android:layout_height="@dimen/ongoing_appops_chip_height"
            android:layout_width="wrap_content"
            android:minWidth="48dp"
            android:layout_gravity="center_vertical">
        <LinearLayout
            android:id="@+id/icons_container"
                    android:layout_height="match_parent"
            android:layout_height="@dimen/ongoing_appops_chip_height"
            android:layout_width="wrap_content"
            android:gravity="center_vertical"
            android:layout_gravity="center"
            />
          </FrameLayout>
</com.android.systemui.privacy.OngoingPrivacyChip>
 No newline at end of file
+4 −8
Original line number Diff line number Diff line
@@ -1179,17 +1179,13 @@
    <dimen name="display_cutout_margin_consumption">0px</dimen>

    <!-- Height of the Ongoing App Ops chip -->
    <dimen name="ongoing_appops_chip_height">32dp</dimen>
    <!-- Padding between background of Ongoing App Ops chip and content -->
    <dimen name="ongoing_appops_chip_bg_padding">8dp</dimen>
    <dimen name="ongoing_appops_chip_height">24dp</dimen>
    <!-- Side padding between background of Ongoing App Ops chip and content -->
    <dimen name="ongoing_appops_chip_side_padding">8dp</dimen>
    <!-- Margin between icons of Ongoing App Ops chip when QQS-->
    <dimen name="ongoing_appops_chip_icon_margin_collapsed">0dp</dimen>
    <!-- Margin between icons of Ongoing App Ops chip when QS-->
    <dimen name="ongoing_appops_chip_icon_margin_expanded">2dp</dimen>
    <!-- Margin between icons of Ongoing App Ops chip -->
    <dimen name="ongoing_appops_chip_icon_margin">4dp</dimen>
    <!-- Icon size of Ongoing App Ops chip -->
    <dimen name="ongoing_appops_chip_icon_size">@dimen/status_bar_icon_drawing_size</dimen>
    <dimen name="ongoing_appops_chip_icon_size">16dp</dimen>
    <!-- Radius of Ongoing App Ops chip corners -->
    <dimen name="ongoing_appops_chip_bg_corner_radius">16dp</dimen>

+31 −31
Original line number Diff line number Diff line
@@ -16,7 +16,6 @@ package com.android.systemui.privacy

import android.content.Context
import android.util.AttributeSet
import android.view.Gravity
import android.view.ViewGroup
import android.widget.FrameLayout
import android.widget.ImageView
@@ -31,27 +30,13 @@ class OngoingPrivacyChip @JvmOverloads constructor(
    defStyleRes: Int = 0
) : FrameLayout(context, attrs, defStyleAttrs, defStyleRes) {

    private val iconMarginExpanded = context.resources.getDimensionPixelSize(
                    R.dimen.ongoing_appops_chip_icon_margin_expanded)
    private val iconMarginCollapsed = context.resources.getDimensionPixelSize(
                    R.dimen.ongoing_appops_chip_icon_margin_collapsed)
    private val iconSize =
            context.resources.getDimensionPixelSize(R.dimen.ongoing_appops_chip_icon_size)
    private val iconColor = Utils.getColorAttrDefaultColor(context, android.R.attr.textColorPrimary)
    private val expandedIconColor = Utils
            .getColorAttrDefaultColor(context, android.R.attr.textColorPrimaryInverse)
    private val sidePadding =
            context.resources.getDimensionPixelSize(R.dimen.ongoing_appops_chip_side_padding)
    private val backgroundDrawable = context.getDrawable(R.drawable.privacy_chip_bg)
    private var iconMargin = 0
    private var iconSize = 0
    private var iconColor = 0
    private var defaultBackgroundColor = 0
    private var cameraBackgroundColor = 0

    private lateinit var iconsContainer: LinearLayout
    private lateinit var back: FrameLayout
    var expanded = false
        set(value) {
            if (value != field) {
                field = value
                updateView(PrivacyChipBuilder(context, privacyList))
            }
        }

    var privacyList = emptyList<PrivacyItem>()
        set(value) {
@@ -62,20 +47,18 @@ class OngoingPrivacyChip @JvmOverloads constructor(
    override fun onFinishInflate() {
        super.onFinishInflate()

        back = requireViewById(R.id.background)
        iconsContainer = requireViewById(R.id.icons_container)

        updateResources()
    }

    // Should only be called if the builder icons or app changed
    private fun updateView(builder: PrivacyChipBuilder) {
        back.background = if (expanded) backgroundDrawable else null
        val padding = if (expanded) sidePadding else 0
        back.setPaddingRelative(padding, 0, padding, 0)
        fun setIcons(chipBuilder: PrivacyChipBuilder, iconsContainer: ViewGroup) {
            iconsContainer.removeAllViews()
            chipBuilder.generateIcons().forEachIndexed { i, it ->
                it.mutate()
                it.setTint(if (expanded) expandedIconColor else iconColor)
                it.setTint(iconColor)
                val image = ImageView(context).apply {
                    setImageDrawable(it)
                    scaleType = ImageView.ScaleType.CENTER_INSIDE
@@ -83,7 +66,7 @@ class OngoingPrivacyChip @JvmOverloads constructor(
                iconsContainer.addView(image, iconSize, iconSize)
                if (i != 0) {
                    val lp = image.layoutParams as MarginLayoutParams
                    lp.marginStart = if (expanded) iconMarginExpanded else iconMarginCollapsed
                    lp.marginStart = iconMargin
                    image.layoutParams = lp
                }
            }
@@ -92,10 +75,11 @@ class OngoingPrivacyChip @JvmOverloads constructor(
        if (!privacyList.isEmpty()) {
            generateContentDescription(builder)
            setIcons(builder, iconsContainer)
            val lp = iconsContainer.layoutParams as FrameLayout.LayoutParams
            lp.gravity = Gravity.CENTER_VERTICAL or
                    (if (expanded) Gravity.CENTER_HORIZONTAL else Gravity.END)
            iconsContainer.layoutParams = lp
            if (builder.types.contains(PrivacyType.TYPE_CAMERA)) {
                iconsContainer.background.setTint(cameraBackgroundColor)
            } else {
                iconsContainer.background.setTint(defaultBackgroundColor)
            }
        } else {
            iconsContainer.removeAllViews()
        }
@@ -107,4 +91,20 @@ class OngoingPrivacyChip @JvmOverloads constructor(
        contentDescription = context.getString(
                R.string.ongoing_privacy_chip_content_multiple_apps, typesText)
    }

    private fun updateResources() {
        iconMargin = context.resources
                .getDimensionPixelSize(R.dimen.ongoing_appops_chip_icon_margin)
        iconSize = context.resources
                .getDimensionPixelSize(R.dimen.ongoing_appops_chip_icon_size)
        iconColor =
                Utils.getColorAttrDefaultColor(context, com.android.internal.R.attr.colorPrimary)
        defaultBackgroundColor = context.getColor(R.color.privacy_circle_microphone_location)
        cameraBackgroundColor = context.getColor(R.color.privacy_circle_camera)

        val padding = context.resources
                .getDimensionPixelSize(R.dimen.ongoing_appops_chip_side_padding)
        iconsContainer.setPaddingRelative(padding, 0, padding, 0)
        iconsContainer.background = context.getDrawable(R.drawable.privacy_chip_bg)
    }
}
 No newline at end of file
+0 −12
Original line number Diff line number Diff line
@@ -75,7 +75,6 @@ public class QuickStatusBarHeader extends RelativeLayout implements LifecycleOwn
    protected QuickQSPanel mHeaderQsPanel;
    private TouchAnimator mStatusIconsAlphaAnimator;
    private TouchAnimator mHeaderTextContainerAlphaAnimator;
    private TouchAnimator mPrivacyChipAlphaAnimator;
    private DualToneHandler mDualToneHandler;

    private View mSystemIconsView;
@@ -284,7 +283,6 @@ public class QuickStatusBarHeader extends RelativeLayout implements LifecycleOwn

        updateStatusIconAlphaAnimator();
        updateHeaderTextContainerAlphaAnimator();
        updatePrivacyChipAlphaAnimator();
    }

    private void updateStatusIconAlphaAnimator() {
@@ -299,12 +297,6 @@ public class QuickStatusBarHeader extends RelativeLayout implements LifecycleOwn
                .build();
    }

    private void updatePrivacyChipAlphaAnimator() {
        mPrivacyChipAlphaAnimator = new TouchAnimator.Builder()
                .addFloat(mPrivacyChip, "alpha", 1, 0, 1)
                .build();
    }

    /** */
    public void setExpanded(boolean expanded, QuickQSPanelController quickQSPanelController) {
        if (mExpanded == expanded) return;
@@ -344,10 +336,6 @@ public class QuickStatusBarHeader extends RelativeLayout implements LifecycleOwn
                mHeaderTextContainerView.setVisibility(INVISIBLE);
            }
        }
        if (mPrivacyChipAlphaAnimator != null) {
            mPrivacyChip.setExpanded(expansionFraction > 0.5);
            mPrivacyChipAlphaAnimator.setPosition(keyguardExpansionFraction);
        }

        mKeyguardExpansionFraction = keyguardExpansionFraction;
    }