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

Commit 40033338 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Visual changes in OngoingPrivacyChip"

parents 97640451 c69b4028
Loading
Loading
Loading
Loading
+3 −20
Original line number Original line Diff line number Diff line
@@ -28,7 +28,7 @@
    android:orientation="horizontal"
    android:orientation="horizontal"
    android:focusable="true">
    android:focusable="true">


        <LinearLayout
        <FrameLayout
            android:id="@+id/background"
            android:id="@+id/background"
            android:layout_height="@dimen/ongoing_appops_chip_height"
            android:layout_height="@dimen/ongoing_appops_chip_height"
            android:layout_width="wrap_content"
            android:layout_width="wrap_content"
@@ -37,25 +37,8 @@
                    android:id="@+id/icons_container"
                    android:id="@+id/icons_container"
                    android:layout_height="match_parent"
                    android:layout_height="match_parent"
                    android:layout_width="wrap_content"
                    android:layout_width="wrap_content"
                    android:layout_marginStart="@dimen/ongoing_appops_chip_items_margin"
                    android:layout_gravity="center"
                    android:layout_gravity="center_vertical"
                    android:gravity="center_vertical"
                    />

                <TextView
                    android:id="@+id/text_container"
                    android:layout_height="match_parent"
                    android:layout_width="wrap_content"
                    android:layout_gravity="center_vertical|end"
                    android:paddingStart="@dimen/ongoing_appops_chip_text_padding"
                    android:paddingEnd="@dimen/ongoing_appops_chip_text_padding"
                    android:gravity="center_vertical"
                    android:gravity="center_vertical"
                    android:singleLine="true"
                    android:ellipsize="end"
                    android:lines="1"
                    android:textAppearance="@style/TextAppearance.StatusBar.Clock"
                    android:textSize="@dimen/ongoing_appops_chip_text_size"
                    android:textColor="@color/status_bar_clock_color"
                    />
                    />
          </LinearLayout>
          </FrameLayout>
</com.android.systemui.privacy.OngoingPrivacyChip>
</com.android.systemui.privacy.OngoingPrivacyChip>
 No newline at end of file
+2 −7
Original line number Original line Diff line number Diff line
@@ -1003,10 +1003,8 @@
    <dimen name="ongoing_appops_chip_margin">0dp</dimen>
    <dimen name="ongoing_appops_chip_margin">0dp</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">32dp</dimen>
    <!-- Start and End padding for Ongoing App Ops chip -->
    <dimen name="ongoing_appops_chip_text_padding">8dp</dimen>
    <!-- Padding between background of Ongoing App Ops chip and content -->
    <!-- Padding between background of Ongoing App Ops chip and content -->
    <dimen name="ongoing_appops_chip_bg_padding">0dp</dimen>
    <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 when QQS-->
@@ -1017,10 +1015,7 @@
    <dimen name="ongoing_appops_chip_icon_size">@*android:dimen/status_bar_icon_size</dimen>
    <dimen name="ongoing_appops_chip_icon_size">@*android:dimen/status_bar_icon_size</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>
    <!-- Size of text of Ongoing App Ops chip -->

    <dimen name="ongoing_appops_chip_text_size">12sp</dimen>
    <!-- Margin between items in Ongoing App Ops chip -->
    <dimen name="ongoing_appops_chip_items_margin">8dp</dimen>


    <!-- How much a bubble is elevated -->
    <!-- How much a bubble is elevated -->
    <dimen name="bubble_elevation">8dp</dimen>
    <dimen name="bubble_elevation">8dp</dimen>
+0 −14
Original line number Original line Diff line number Diff line
@@ -2320,26 +2320,12 @@
         app for debugging. Will not be seen by users. [CHAR LIMIT=20] -->
         app for debugging. Will not be seen by users. [CHAR LIMIT=20] -->
    <string name="heap_dump_tile_name">Dump SysUI Heap</string>
    <string name="heap_dump_tile_name">Dump SysUI Heap</string>


    <!-- Text on chip for multiple apps using a single app op [CHAR LIMIT=12] -->
    <plurals name="ongoing_privacy_chip_multiple_apps">
        <item quantity="one"><xliff:g id="num_apps" example="1">%d</xliff:g> app</item>
        <item quantity="few"><xliff:g id="num_apps" example="3">%d</xliff:g> apps</item>
        <item quantity="other"><xliff:g id="num_apps" example="3">%d</xliff:g> apps</item>
    </plurals>

    <!-- Content description for ongoing privacy chip. Use with a single app [CHAR LIMIT=NONE]-->
    <!-- Content description for ongoing privacy chip. Use with a single app [CHAR LIMIT=NONE]-->
    <string name="ongoing_privacy_chip_content_single_app"><xliff:g id="app" example="Example App">%1$s</xliff:g> is using your <xliff:g id="types_list" example="camera, location">%2$s</xliff:g>.</string>
    <string name="ongoing_privacy_chip_content_single_app"><xliff:g id="app" example="Example App">%1$s</xliff:g> is using your <xliff:g id="types_list" example="camera, location">%2$s</xliff:g>.</string>


    <!-- Content description for ongoing privacy chip. Use with multiple apps [CHAR LIMIT=NONE]-->
    <!-- Content description for ongoing privacy chip. Use with multiple apps [CHAR LIMIT=NONE]-->
    <string name="ongoing_privacy_chip_content_multiple_apps">Applications are using your <xliff:g id="types_list" example="camera, location">%s</xliff:g>.</string>
    <string name="ongoing_privacy_chip_content_multiple_apps">Applications are using your <xliff:g id="types_list" example="camera, location">%s</xliff:g>.</string>


    <!-- Content description for ongoing privacy chip. Use with multiple apps using same app op[CHAR LIMIT=NONE]-->
    <plurals name="ongoing_privacy_chip_content_multiple_apps_single_op">
        <item quantity="one"><xliff:g id="num_apps" example="1">%1$d</xliff:g> application is using your <xliff:g id="type" example="camera">%2$s</xliff:g>.</item>
        <item quantity="few"><xliff:g id="num_apps" example="3">%1$d</xliff:g> applications are using your <xliff:g id="type" example="camera">%2$s</xliff:g>.</item>
        <item quantity="other"><xliff:g id="num_apps" example="3">%1$d</xliff:g> applications are using your <xliff:g id="type" example="camera">%2$s</xliff:g>.</item>
    </plurals>

    <!-- Action for accepting the Ongoing privacy dialog [CHAR LIMIT=10]-->
    <!-- Action for accepting the Ongoing privacy dialog [CHAR LIMIT=10]-->
    <string name="ongoing_privacy_dialog_ok">Got it</string>
    <string name="ongoing_privacy_dialog_ok">Got it</string>


+6 −34
Original line number Original line Diff line number Diff line
@@ -17,9 +17,9 @@ package com.android.systemui.privacy
import android.content.Context
import android.content.Context
import android.util.AttributeSet
import android.util.AttributeSet
import android.view.ViewGroup
import android.view.ViewGroup
import android.widget.FrameLayout
import android.widget.ImageView
import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.LinearLayout
import android.widget.TextView
import com.android.systemui.Dependency
import com.android.systemui.Dependency
import com.android.systemui.R
import com.android.systemui.R
import com.android.systemui.statusbar.policy.KeyguardMonitor
import com.android.systemui.statusbar.policy.KeyguardMonitor
@@ -42,9 +42,8 @@ class OngoingPrivacyChip @JvmOverloads constructor(
    private val sidePadding =
    private val sidePadding =
            context.resources.getDimensionPixelSize(R.dimen.ongoing_appops_chip_side_padding)
            context.resources.getDimensionPixelSize(R.dimen.ongoing_appops_chip_side_padding)
    private val backgroundDrawable = context.getDrawable(R.drawable.privacy_chip_bg)
    private val backgroundDrawable = context.getDrawable(R.drawable.privacy_chip_bg)
    private lateinit var text: TextView
    private lateinit var iconsContainer: LinearLayout
    private lateinit var iconsContainer: LinearLayout
    private lateinit var back: LinearLayout
    private lateinit var back: FrameLayout
    var expanded = false
    var expanded = false
        set(value) {
        set(value) {
            if (value != field) {
            if (value != field) {
@@ -66,14 +65,14 @@ class OngoingPrivacyChip @JvmOverloads constructor(
        super.onFinishInflate()
        super.onFinishInflate()


        back = findViewById(R.id.background)
        back = findViewById(R.id.background)
        text = findViewById(R.id.text_container)
        iconsContainer = findViewById(R.id.icons_container)
        iconsContainer = findViewById(R.id.icons_container)
    }
    }


    // 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() {
    private fun updateView() {
        back.background = if (expanded) backgroundDrawable else null
        back.background = if (expanded) backgroundDrawable else null
        back.setPaddingRelative(0, 0, if (expanded) sidePadding else 0, 0)
        val padding = if (expanded) sidePadding else 0
        back.setPaddingRelative(padding, 0, padding, 0)
        fun setIcons(dialogBuilder: PrivacyDialogBuilder, iconsContainer: ViewGroup) {
        fun setIcons(dialogBuilder: PrivacyDialogBuilder, iconsContainer: ViewGroup) {
            iconsContainer.removeAllViews()
            iconsContainer.removeAllViews()
            dialogBuilder.generateIcons().forEachIndexed { i, it ->
            dialogBuilder.generateIcons().forEachIndexed { i, it ->
@@ -95,44 +94,17 @@ class OngoingPrivacyChip @JvmOverloads constructor(
        if (!privacyList.isEmpty()) {
        if (!privacyList.isEmpty()) {
            generateContentDescription()
            generateContentDescription()
            setIcons(builder, iconsContainer)
            setIcons(builder, iconsContainer)
            setApplicationText()
        } else {
        } else {
            text.visibility = GONE
            iconsContainer.removeAllViews()
            iconsContainer.removeAllViews()
        }
        }
        requestLayout()
        requestLayout()
    }
    }


    private fun setApplicationText() {
        text.visibility = if (builder.types.size == 1 && expanded) VISIBLE else GONE
        if (builder.types.size == 1 && expanded) {
            if (builder.app != null && !amISecure()) {
                text.setText(builder.app?.applicationName)
            } else {
                text.text = context.resources.getQuantityString(
                        R.plurals.ongoing_privacy_chip_multiple_apps,
                        builder.appsAndTypes.size, builder.appsAndTypes.size)
            }
        }
    }

    private fun amISecure() = keyguardMonitor.isShowing && keyguardMonitor.isSecure
    private fun amISecure() = keyguardMonitor.isShowing && keyguardMonitor.isSecure


    private fun generateContentDescription() {
    private fun generateContentDescription() {
        val typesText = builder.joinTypes()
        val typesText = builder.joinTypes()
        if (builder.types.size > 1) {
        contentDescription = context.getString(
        contentDescription = context.getString(
                R.string.ongoing_privacy_chip_content_multiple_apps, typesText)
                R.string.ongoing_privacy_chip_content_multiple_apps, typesText)
        } else {
            if (builder.app != null && !amISecure()) {
                contentDescription =
                        context.getString(R.string.ongoing_privacy_chip_content_single_app,
                                builder.app?.applicationName, typesText)
            } else {
                contentDescription = context.resources.getQuantityString(
                        R.plurals.ongoing_privacy_chip_content_multiple_apps_single_op,
                        builder.appsAndTypes.size, builder.appsAndTypes.size, typesText)
            }
        }
    }
    }
}
}
 No newline at end of file
+1 −8
Original line number Original line Diff line number Diff line
@@ -22,7 +22,6 @@ class PrivacyDialogBuilder(private val context: Context, itemsList: List<Privacy


    val appsAndTypes: List<Pair<PrivacyApplication, List<PrivacyType>>>
    val appsAndTypes: List<Pair<PrivacyApplication, List<PrivacyType>>>
    val types: List<PrivacyType>
    val types: List<PrivacyType>
    val app: PrivacyApplication?
    private val separator = context.getString(R.string.ongoing_privacy_dialog_separator)
    private val separator = context.getString(R.string.ongoing_privacy_dialog_separator)
    private val lastSeparator = context.getString(R.string.ongoing_privacy_dialog_last_separator)
    private val lastSeparator = context.getString(R.string.ongoing_privacy_dialog_last_separator)


@@ -32,8 +31,6 @@ class PrivacyDialogBuilder(private val context: Context, itemsList: List<Privacy
                .sortedWith(compareBy({ -it.second.size }, // Sort by number of AppOps
                .sortedWith(compareBy({ -it.second.size }, // Sort by number of AppOps
                        { it.second.min() })) // Sort by "smallest" AppOpp (Location is largest)
                        { it.second.min() })) // Sort by "smallest" AppOpp (Location is largest)
        types = itemsList.map { it.privacyType }.distinct().sorted()
        types = itemsList.map { it.privacyType }.distinct().sorted()
        val singleApp = appsAndTypes.size == 1
        app = if (singleApp) appsAndTypes[0].first else null
    }
    }


    fun generateIconsForApp(types: List<PrivacyType>): List<Drawable> {
    fun generateIconsForApp(types: List<PrivacyType>): List<Drawable> {
@@ -58,11 +55,7 @@ class PrivacyDialogBuilder(private val context: Context, itemsList: List<Privacy
    }
    }


    fun getDialogTitle(): String {
    fun getDialogTitle(): String {
        if (app != null) {
            return context.getString(R.string.ongoing_privacy_dialog_single_app_title, joinTypes())
        } else {
        return context.getString(R.string.ongoing_privacy_dialog_multiple_apps_title,
        return context.getString(R.string.ongoing_privacy_dialog_multiple_apps_title,
                    joinTypes())
                    joinTypes())
    }
    }
}
}
}