Merge "DO NOT MERGE Implement privacy chip design" into sc-dev

This commit is contained in:
Fabian Kozynski
2021-02-10 14:34:45 +00:00
committed by Android (Google) Code Review
5 changed files with 43 additions and 64 deletions

View File

@@ -16,8 +16,6 @@
--> -->
<shape xmlns:android="http://schemas.android.com/apk/res/android"> <shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#242424" /> <!-- 14% of white --> <solid android:color="#FFFFFF" />
<padding android:paddingTop="@dimen/ongoing_appops_chip_bg_padding"
android:paddingBottom="@dimen/ongoing_appops_chip_bg_padding" />
<corners android:radius="@dimen/ongoing_appops_chip_bg_corner_radius" /> <corners android:radius="@dimen/ongoing_appops_chip_bg_corner_radius" />
</shape> </shape>

View File

@@ -22,19 +22,14 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_gravity="center_vertical|end" 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 <LinearLayout
android:id="@+id/icons_container" android:id="@+id/icons_container"
android:layout_height="match_parent" android:layout_height="@dimen/ongoing_appops_chip_height"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:gravity="center_vertical" android:gravity="center_vertical"
android:layout_gravity="center"
/> />
</FrameLayout>
</com.android.systemui.privacy.OngoingPrivacyChip> </com.android.systemui.privacy.OngoingPrivacyChip>

View File

@@ -1179,17 +1179,13 @@
<dimen name="display_cutout_margin_consumption">0px</dimen> <dimen name="display_cutout_margin_consumption">0px</dimen>
<!-- Height of the Ongoing App Ops chip --> <!-- Height of the Ongoing App Ops chip -->
<dimen name="ongoing_appops_chip_height">32dp</dimen> <dimen name="ongoing_appops_chip_height">24dp</dimen>
<!-- Padding between background of Ongoing App Ops chip and content -->
<dimen name="ongoing_appops_chip_bg_padding">8dp</dimen>
<!-- Side padding between background of Ongoing App Ops chip and content --> <!-- Side padding between background of Ongoing App Ops chip and content -->
<dimen name="ongoing_appops_chip_side_padding">8dp</dimen> <dimen name="ongoing_appops_chip_side_padding">8dp</dimen>
<!-- Margin between icons of Ongoing App Ops chip when QQS--> <!-- Margin between icons of Ongoing App Ops chip -->
<dimen name="ongoing_appops_chip_icon_margin_collapsed">0dp</dimen> <dimen name="ongoing_appops_chip_icon_margin">4dp</dimen>
<!-- Margin between icons of Ongoing App Ops chip when QS-->
<dimen name="ongoing_appops_chip_icon_margin_expanded">2dp</dimen>
<!-- Icon size of Ongoing App Ops chip --> <!-- 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 --> <!-- Radius of Ongoing App Ops chip corners -->
<dimen name="ongoing_appops_chip_bg_corner_radius">16dp</dimen> <dimen name="ongoing_appops_chip_bg_corner_radius">16dp</dimen>

View File

@@ -16,11 +16,11 @@ package com.android.systemui.privacy
import android.content.Context import android.content.Context
import android.util.AttributeSet import android.util.AttributeSet
import android.view.Gravity
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.FrameLayout import android.widget.FrameLayout
import android.widget.ImageView import android.widget.ImageView
import android.widget.LinearLayout import android.widget.LinearLayout
import com.android.settingslib.Utils
import com.android.systemui.R import com.android.systemui.R
class OngoingPrivacyChip @JvmOverloads constructor( class OngoingPrivacyChip @JvmOverloads constructor(
@@ -30,26 +30,13 @@ class OngoingPrivacyChip @JvmOverloads constructor(
defStyleRes: Int = 0 defStyleRes: Int = 0
) : FrameLayout(context, attrs, defStyleAttrs, defStyleRes) { ) : FrameLayout(context, attrs, defStyleAttrs, defStyleRes) {
private val iconMarginExpanded = context.resources.getDimensionPixelSize( private var iconMargin = 0
R.dimen.ongoing_appops_chip_icon_margin_expanded) private var iconSize = 0
private val iconMarginCollapsed = context.resources.getDimensionPixelSize( private var iconColor = 0
R.dimen.ongoing_appops_chip_icon_margin_collapsed) private var defaultBackgroundColor = 0
private val iconSize = private var cameraBackgroundColor = 0
context.resources.getDimensionPixelSize(R.dimen.ongoing_appops_chip_icon_size)
private val iconColor = context.resources.getColor(
R.color.status_bar_clock_color, context.theme)
private val sidePadding =
context.resources.getDimensionPixelSize(R.dimen.ongoing_appops_chip_side_padding)
private val backgroundDrawable = context.getDrawable(R.drawable.privacy_chip_bg)
private lateinit var iconsContainer: LinearLayout 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>() var privacyList = emptyList<PrivacyItem>()
set(value) { set(value) {
@@ -60,15 +47,13 @@ class OngoingPrivacyChip @JvmOverloads constructor(
override fun onFinishInflate() { override fun onFinishInflate() {
super.onFinishInflate() super.onFinishInflate()
back = requireViewById(R.id.background)
iconsContainer = requireViewById(R.id.icons_container) iconsContainer = requireViewById(R.id.icons_container)
updateResources()
} }
// Should only be called if the builder icons or app changed // Should only be called if the builder icons or app changed
private fun updateView(builder: PrivacyChipBuilder) { 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) { fun setIcons(chipBuilder: PrivacyChipBuilder, iconsContainer: ViewGroup) {
iconsContainer.removeAllViews() iconsContainer.removeAllViews()
chipBuilder.generateIcons().forEachIndexed { i, it -> chipBuilder.generateIcons().forEachIndexed { i, it ->
@@ -81,7 +66,7 @@ class OngoingPrivacyChip @JvmOverloads constructor(
iconsContainer.addView(image, iconSize, iconSize) iconsContainer.addView(image, iconSize, iconSize)
if (i != 0) { if (i != 0) {
val lp = image.layoutParams as MarginLayoutParams val lp = image.layoutParams as MarginLayoutParams
lp.marginStart = if (expanded) iconMarginExpanded else iconMarginCollapsed lp.marginStart = iconMargin
image.layoutParams = lp image.layoutParams = lp
} }
} }
@@ -90,10 +75,11 @@ class OngoingPrivacyChip @JvmOverloads constructor(
if (!privacyList.isEmpty()) { if (!privacyList.isEmpty()) {
generateContentDescription(builder) generateContentDescription(builder)
setIcons(builder, iconsContainer) setIcons(builder, iconsContainer)
val lp = iconsContainer.layoutParams as FrameLayout.LayoutParams if (builder.types.contains(PrivacyType.TYPE_CAMERA)) {
lp.gravity = Gravity.CENTER_VERTICAL or iconsContainer.background.setTint(cameraBackgroundColor)
(if (expanded) Gravity.CENTER_HORIZONTAL else Gravity.END) } else {
iconsContainer.layoutParams = lp iconsContainer.background.setTint(defaultBackgroundColor)
}
} else { } else {
iconsContainer.removeAllViews() iconsContainer.removeAllViews()
} }
@@ -105,4 +91,20 @@ class OngoingPrivacyChip @JvmOverloads constructor(
contentDescription = context.getString( contentDescription = context.getString(
R.string.ongoing_privacy_chip_content_multiple_apps, typesText) 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)
}
} }

View File

@@ -75,7 +75,6 @@ public class QuickStatusBarHeader extends RelativeLayout implements LifecycleOwn
protected QuickQSPanel mHeaderQsPanel; protected QuickQSPanel mHeaderQsPanel;
private TouchAnimator mStatusIconsAlphaAnimator; private TouchAnimator mStatusIconsAlphaAnimator;
private TouchAnimator mHeaderTextContainerAlphaAnimator; private TouchAnimator mHeaderTextContainerAlphaAnimator;
private TouchAnimator mPrivacyChipAlphaAnimator;
private DualToneHandler mDualToneHandler; private DualToneHandler mDualToneHandler;
private View mSystemIconsView; private View mSystemIconsView;
@@ -284,7 +283,6 @@ public class QuickStatusBarHeader extends RelativeLayout implements LifecycleOwn
updateStatusIconAlphaAnimator(); updateStatusIconAlphaAnimator();
updateHeaderTextContainerAlphaAnimator(); updateHeaderTextContainerAlphaAnimator();
updatePrivacyChipAlphaAnimator();
} }
private void updateStatusIconAlphaAnimator() { private void updateStatusIconAlphaAnimator() {
@@ -299,12 +297,6 @@ public class QuickStatusBarHeader extends RelativeLayout implements LifecycleOwn
.build(); .build();
} }
private void updatePrivacyChipAlphaAnimator() {
mPrivacyChipAlphaAnimator = new TouchAnimator.Builder()
.addFloat(mPrivacyChip, "alpha", 1, 0, 1)
.build();
}
/** */ /** */
public void setExpanded(boolean expanded, QuickQSPanelController quickQSPanelController) { public void setExpanded(boolean expanded, QuickQSPanelController quickQSPanelController) {
if (mExpanded == expanded) return; if (mExpanded == expanded) return;
@@ -344,10 +336,6 @@ public class QuickStatusBarHeader extends RelativeLayout implements LifecycleOwn
mHeaderTextContainerView.setVisibility(INVISIBLE); mHeaderTextContainerView.setVisibility(INVISIBLE);
} }
} }
if (mPrivacyChipAlphaAnimator != null) {
mPrivacyChip.setExpanded(expansionFraction > 0.5);
mPrivacyChipAlphaAnimator.setPosition(keyguardExpansionFraction);
}
mKeyguardExpansionFraction = keyguardExpansionFraction; mKeyguardExpansionFraction = keyguardExpansionFraction;
} }