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

Commit ff0919f8 authored by Fabian Kozynski's avatar Fabian Kozynski
Browse files

Implement privacy chip design

Implement margins and colors

Fixes: 179678441
Test: manual
Change-Id: If6f10019352a9db6f603a5ea74f445acf68775a0
parent 988dfcdf
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
@@ -1170,17 +1170,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;
    }