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">
<solid android:color="#242424" /> <!-- 14% of white -->
<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>

View File

@@ -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"
<LinearLayout
android:id="@+id/icons_container"
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_width="wrap_content"
android:gravity="center_vertical"
/>
</FrameLayout>
android:gravity="center_vertical"
android:layout_gravity="center"
/>
</com.android.systemui.privacy.OngoingPrivacyChip>

View File

@@ -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>

View File

@@ -16,11 +16,11 @@ 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
import android.widget.LinearLayout
import com.android.settingslib.Utils
import com.android.systemui.R
class OngoingPrivacyChip @JvmOverloads constructor(
@@ -30,26 +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 = 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 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) {
@@ -60,15 +47,13 @@ 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 ->
@@ -81,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
}
}
@@ -90,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()
}
@@ -105,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)
}
}

View File

@@ -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;
}