Merge "DO NOT MERGE Implement privacy chip design" into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
4b8044cb63
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user