summaryrefslogtreecommitdiff
path: root/PermissionController/src/com/android/permissioncontroller/safetycenter
diff options
context:
space:
mode:
authorShriya Gupta <shrigupt@google.com>2023-03-08 17:26:35 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2023-03-08 17:26:35 +0000
commitb7fc89f121128287a2247a6af00edc2499e9b0ad (patch)
treede08288b0fbceac18a258b0467f66fe0a3002251 /PermissionController/src/com/android/permissioncontroller/safetycenter
parent97488126387755197f303d1210dbeb73d056815c (diff)
parent651c5d7585d985f0cca6fa459171175f3abd94d2 (diff)
downloadPermission-b7fc89f121128287a2247a6af00edc2499e9b0ad.tar.gz
Merge "Fix severity level for the Privacy sources group" into udc-dev
Diffstat (limited to 'PermissionController/src/com/android/permissioncontroller/safetycenter')
-rw-r--r--PermissionController/src/com/android/permissioncontroller/safetycenter/SafetyCenterConstants.java3
-rw-r--r--PermissionController/src/com/android/permissioncontroller/safetycenter/ui/PrivacySubpageFragment.kt19
-rw-r--r--PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterActivity.java5
-rw-r--r--PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyHomepageEntryPreference.kt1
-rw-r--r--PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SeverityIconPicker.kt23
-rw-r--r--PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/SafetyEntryCommonViewsManager.kt3
-rw-r--r--PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/SafetyEntryGroupView.kt118
-rw-r--r--PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/SafetyEntryView.kt1
8 files changed, 106 insertions, 67 deletions
diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/SafetyCenterConstants.java b/PermissionController/src/com/android/permissioncontroller/safetycenter/SafetyCenterConstants.java
index 4ae71796f..2909a40b5 100644
--- a/PermissionController/src/com/android/permissioncontroller/safetycenter/SafetyCenterConstants.java
+++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/SafetyCenterConstants.java
@@ -43,4 +43,7 @@ public class SafetyCenterConstants {
/** Intent extra representing the preference key of a search result */
public static final String EXTRA_SETTINGS_FRAGMENT_ARGS_KEY = ":settings:fragment_args_key";
+
+ /** Identifier for the group of privacy safety sources */
+ public static final String PRIVACY_SOURCES_GROUP_ID = "AndroidPrivacySources";
}
diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/PrivacySubpageFragment.kt b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/PrivacySubpageFragment.kt
index 26746510f..7befb2f7c 100644
--- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/PrivacySubpageFragment.kt
+++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/PrivacySubpageFragment.kt
@@ -27,6 +27,7 @@ import androidx.preference.PreferenceGroup
import com.android.permissioncontroller.Constants
import com.android.permissioncontroller.R
import com.android.permissioncontroller.permission.utils.Utils
+import com.android.permissioncontroller.safetycenter.SafetyCenterConstants.PRIVACY_SOURCES_GROUP_ID
import com.android.permissioncontroller.safetycenter.ui.SafetyBrandChipPreference.Companion.closeSubpage
import com.android.permissioncontroller.safetycenter.ui.model.PrivacyControlsViewModel
import com.android.permissioncontroller.safetycenter.ui.model.PrivacyControlsViewModel.Pref
@@ -73,19 +74,22 @@ class PrivacySubpageFragment : SafetyCenterFragment() {
logger.sessionId = sessionId
logger.navigationSource = NavigationSource.fromIntent(requireActivity().getIntent())
logger.viewType = ViewType.SUBPAGE
- logger.groupId = SOURCE_GROUP_ID
+ logger.groupId = PRIVACY_SOURCES_GROUP_ID
}
override fun onResume() {
super.onResume()
- safetyCenterViewModel.pageOpen(SOURCE_GROUP_ID)
+ safetyCenterViewModel.pageOpen(PRIVACY_SOURCES_GROUP_ID)
}
override fun renderSafetyCenterData(uiData: SafetyCenterUiData?) {
Log.d(TAG, "renderSafetyCenterEntryGroup called with $uiData")
- val entryGroup = uiData?.getMatchingGroup(SOURCE_GROUP_ID)
+ val entryGroup = uiData?.getMatchingGroup(PRIVACY_SOURCES_GROUP_ID)
if (entryGroup == null) {
- Log.w(TAG, "$SOURCE_GROUP_ID doesn't match any of the existing SafetySourcesGroup IDs")
+ Log.w(
+ TAG,
+ "$PRIVACY_SOURCES_GROUP_ID doesn't match any of the existing SafetySourcesGroup IDs"
+ )
closeSubpage(requireActivity(), requireContext(), sessionId)
return
}
@@ -97,10 +101,10 @@ class PrivacySubpageFragment : SafetyCenterFragment() {
private fun updateSafetyCenterIssues(uiData: SafetyCenterUiData?) {
subpageIssueGroup.removeAll()
- val subpageIssues = uiData?.getMatchingIssues(SOURCE_GROUP_ID)
- val subpageDismissedIssues = uiData?.getMatchingDismissedIssues(SOURCE_GROUP_ID)
+ val subpageIssues = uiData?.getMatchingIssues(PRIVACY_SOURCES_GROUP_ID)
+ val subpageDismissedIssues = uiData?.getMatchingDismissedIssues(PRIVACY_SOURCES_GROUP_ID)
if (subpageIssues.isNullOrEmpty() && subpageDismissedIssues.isNullOrEmpty()) {
- Log.w(TAG, "$SOURCE_GROUP_ID doesn't have any matching SafetyCenterIssues")
+ Log.w(TAG, "$PRIVACY_SOURCES_GROUP_ID doesn't have any matching SafetyCenterIssues")
return
}
@@ -193,6 +197,5 @@ class PrivacySubpageFragment : SafetyCenterFragment() {
private const val ISSUE_GROUP_KEY: String = "subpage_issue_group"
private const val GENERIC_ENTRY_GROUP_KEY: String = "subpage_generic_entry_group"
private const val DATA_ENTRY_GROUP_KEY: String = "subpage_data_entry_group"
- const val SOURCE_GROUP_ID: String = "AndroidPrivacySources"
}
}
diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterActivity.java b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterActivity.java
index 9774ed107..f9ec852ca 100644
--- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterActivity.java
+++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterActivity.java
@@ -25,6 +25,7 @@ import static com.android.permissioncontroller.PermissionControllerStatsLog.PRIV
import static com.android.permissioncontroller.PermissionControllerStatsLog.PRIVACY_SIGNAL_NOTIFICATION_INTERACTION__ACTION__NOTIFICATION_CLICKED;
import static com.android.permissioncontroller.safetycenter.SafetyCenterConstants.EXTRA_SETTINGS_FRAGMENT_ARGS_KEY;
import static com.android.permissioncontroller.safetycenter.SafetyCenterConstants.PERSONAL_PROFILE_SUFFIX;
+import static com.android.permissioncontroller.safetycenter.SafetyCenterConstants.PRIVACY_SOURCES_GROUP_ID;
import static com.android.permissioncontroller.safetycenter.SafetyCenterConstants.WORK_PROFILE_SUFFIX;
import android.content.Intent;
@@ -202,7 +203,7 @@ public final class SafetyCenterActivity extends CollapsingToolbarBaseActivity {
return openHomepage();
}
- if (Objects.equals(groupId, PrivacySubpageFragment.SOURCE_GROUP_ID)) {
+ if (Objects.equals(groupId, PRIVACY_SOURCES_GROUP_ID)) {
logPrivacySourceMetric();
return new PrivacySubpageFragment();
}
@@ -213,7 +214,7 @@ public final class SafetyCenterActivity extends CollapsingToolbarBaseActivity {
@RequiresApi(UPSIDE_DOWN_CAKE)
private String getParentGroupId(String preferenceKey) {
if (Pref.findByKey(preferenceKey) != null) {
- return PrivacySubpageFragment.SOURCE_GROUP_ID;
+ return PRIVACY_SOURCES_GROUP_ID;
}
SafetyCenterConfig safetyCenterConfig = mSafetyCenterManager.getSafetyCenterConfig();
diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyHomepageEntryPreference.kt b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyHomepageEntryPreference.kt
index 057030a11..c08be0ac6 100644
--- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyHomepageEntryPreference.kt
+++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyHomepageEntryPreference.kt
@@ -44,6 +44,7 @@ internal class SafetyHomepageEntryPreference(
setSummary(entryGroup.summary)
setIcon(
SeverityIconPicker.selectIconResId(
+ entryGroup.id,
entryGroup.severityLevel,
entryGroup.severityUnspecifiedIconType
)
diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SeverityIconPicker.kt b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SeverityIconPicker.kt
index 93f3b65b4..752d7ed4a 100644
--- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SeverityIconPicker.kt
+++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SeverityIconPicker.kt
@@ -18,13 +18,18 @@ package com.android.permissioncontroller.safetycenter.ui
import android.safetycenter.SafetyCenterEntry
import android.util.Log
import com.android.permissioncontroller.R
+import com.android.permissioncontroller.safetycenter.SafetyCenterConstants.PRIVACY_SOURCES_GROUP_ID
internal object SeverityIconPicker {
private val TAG = SeverityIconPicker::class.java.simpleName
@JvmStatic
- fun selectIconResId(severityLevel: Int, severityUnspecifiedIconType: Int): Int {
+ fun selectIconResId(id: String, severityLevel: Int, severityUnspecifiedIconType: Int): Int {
+ if (id == PRIVACY_SOURCES_GROUP_ID) {
+ return R.drawable.ic_privacy
+ }
+
when (severityLevel) {
SafetyCenterEntry.ENTRY_SEVERITY_LEVEL_UNKNOWN -> return R.drawable.ic_safety_null_state
SafetyCenterEntry.ENTRY_SEVERITY_LEVEL_UNSPECIFIED ->
@@ -35,8 +40,10 @@ internal object SeverityIconPicker {
SafetyCenterEntry.ENTRY_SEVERITY_LEVEL_CRITICAL_WARNING ->
return R.drawable.ic_safety_warn
}
- Log.e(TAG, String.format(
- "Unexpected SafetyCenterEntry.EntrySeverityLevel: %s", severityLevel))
+ Log.e(
+ TAG,
+ String.format("Unexpected SafetyCenterEntry.EntrySeverityLevel: %s", severityLevel)
+ )
return R.drawable.ic_safety_null_state
}
@@ -48,9 +55,13 @@ internal object SeverityIconPicker {
SafetyCenterEntry.SEVERITY_UNSPECIFIED_ICON_TYPE_NO_RECOMMENDATION ->
return R.drawable.ic_safety_null_state
}
- Log.e(TAG, String.format(
+ Log.e(
+ TAG,
+ String.format(
"Unexpected SafetyCenterEntry.SeverityNoneIconType: %s",
- severityUnspecifiedIconType))
+ severityUnspecifiedIconType
+ )
+ )
return R.drawable.ic_safety_null_state
}
-} \ No newline at end of file
+}
diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/SafetyEntryCommonViewsManager.kt b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/SafetyEntryCommonViewsManager.kt
index 0f3a751f2..36377ebf5 100644
--- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/SafetyEntryCommonViewsManager.kt
+++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/SafetyEntryCommonViewsManager.kt
@@ -35,6 +35,7 @@ internal class SafetyEntryCommonViewsManager(rootEntryView: ViewGroup?) {
private val emptySpace: View? by lazy { rootEntryView?.findViewById(R.id.empty_space) }
fun showDetails(
+ id: String,
title: CharSequence,
summary: CharSequence?,
severityLevel: Int,
@@ -44,7 +45,7 @@ internal class SafetyEntryCommonViewsManager(rootEntryView: ViewGroup?) {
summaryView?.showText(summary)
iconView?.setImageResource(
- SeverityIconPicker.selectIconResId(severityLevel, severityUnspecifiedIconType)
+ SeverityIconPicker.selectIconResId(id, severityLevel, severityUnspecifiedIconType)
)
val hideIcon =
diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/SafetyEntryGroupView.kt b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/SafetyEntryGroupView.kt
index 76a6da51f..318ade5cb 100644
--- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/SafetyEntryGroupView.kt
+++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/SafetyEntryGroupView.kt
@@ -41,7 +41,9 @@ import com.android.permissioncontroller.safetycenter.ui.PositionInCardList
import com.android.permissioncontroller.safetycenter.ui.model.SafetyCenterViewModel
@RequiresApi(Build.VERSION_CODES.TIRAMISU)
-internal class SafetyEntryGroupView @JvmOverloads constructor(
+internal class SafetyEntryGroupView
+@JvmOverloads
+constructor(
context: Context?,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0,
@@ -88,18 +90,17 @@ internal class SafetyEntryGroupView @JvmOverloads constructor(
showGroupDetails(group)
showGroupEntries(group, getTaskIdForEntry, viewModel)
setupExpandedState(group, initiallyExpanded(group.id))
- setOnClickListener {
- toggleExpandedState(group, onGroupExpanded, onGroupCollapsed)
- }
+ setOnClickListener { toggleExpandedState(group, onGroupExpanded, onGroupCollapsed) }
}
private fun applyPosition(isFirstCard: Boolean, isLastCard: Boolean) {
- val position = when {
- isFirstCard && isLastCard -> PositionInCardList.LIST_START_END
- isFirstCard && !isLastCard -> PositionInCardList.LIST_START_CARD_END
- !isFirstCard && isLastCard -> PositionInCardList.CARD_START_LIST_END
- /* !isFirstCard && !isLastCard */ else -> PositionInCardList.CARD_START_END
- }
+ val position =
+ when {
+ isFirstCard && isLastCard -> PositionInCardList.LIST_START_END
+ isFirstCard && !isLastCard -> PositionInCardList.LIST_START_CARD_END
+ !isFirstCard && isLastCard -> PositionInCardList.CARD_START_LIST_END
+ /* !isFirstCard && !isLastCard */ else -> PositionInCardList.CARD_START_END
+ }
setBackgroundResource(position.backgroundDrawableResId)
val topMargin: Int = position.getTopMargin(context)
@@ -113,10 +114,12 @@ internal class SafetyEntryGroupView @JvmOverloads constructor(
private fun showGroupDetails(group: SafetyCenterEntryGroup) {
expandedTitleView?.text = group.title
commonEntryView?.showDetails(
- group.title,
- group.summary,
- group.severityLevel,
- group.severityUnspecifiedIconType)
+ group.id,
+ group.title,
+ group.summary,
+ group.severityLevel,
+ group.severityUnspecifiedIconType
+ )
}
private fun setupExpandedState(group: SafetyCenterEntryGroup, shouldBeExpanded: Boolean) {
@@ -136,37 +139,42 @@ internal class SafetyEntryGroupView @JvmOverloads constructor(
if (isExpanded == null) {
chevronIconView?.setImageResource(
- if (shouldBeExpanded) {
- R.drawable.ic_safety_group_collapse
- } else {
- R.drawable.ic_safety_group_expand
- })
+ if (shouldBeExpanded) {
+ R.drawable.ic_safety_group_collapse
+ } else {
+ R.drawable.ic_safety_group_expand
+ }
+ )
} else if (shouldBeExpanded) {
chevronIconView?.animate(
- R.drawable.safety_center_group_expand_anim,
- R.drawable.ic_safety_group_collapse
+ R.drawable.safety_center_group_expand_anim,
+ R.drawable.ic_safety_group_collapse
)
} else {
chevronIconView?.animate(
- R.drawable.safety_center_group_collapse_anim,
- R.drawable.ic_safety_group_expand
+ R.drawable.safety_center_group_collapse_anim,
+ R.drawable.ic_safety_group_expand
)
}
isExpanded = shouldBeExpanded
- val newPaddingTop = context.resources.getDimensionPixelSize(
+ val newPaddingTop =
+ context.resources.getDimensionPixelSize(
if (shouldBeExpanded) {
R.dimen.sc_entry_group_expanded_padding_top
} else {
R.dimen.sc_entry_group_collapsed_padding_top
- })
- val newPaddingBottom = context.resources.getDimensionPixelSize(
+ }
+ )
+ val newPaddingBottom =
+ context.resources.getDimensionPixelSize(
if (shouldBeExpanded) {
R.dimen.sc_entry_group_expanded_padding_bottom
} else {
R.dimen.sc_entry_group_collapsed_padding_bottom
- })
+ }
+ )
setPaddingRelative(paddingStart, newPaddingTop, paddingEnd, newPaddingBottom)
// accessibility attributes depend on the expanded state
@@ -178,11 +186,13 @@ internal class SafetyEntryGroupView @JvmOverloads constructor(
(drawable as? AnimatedVectorDrawable)?.clearAnimationCallbacks()
setImageResource(animationRes)
(drawable as? AnimatedVectorDrawable)?.apply {
- registerAnimationCallback(object : AnimationCallback() {
- override fun onAnimationEnd(drawable: Drawable?) {
- setImageResource(imageRes)
+ registerAnimationCallback(
+ object : AnimationCallback() {
+ override fun onAnimationEnd(drawable: Drawable?) {
+ setImageResource(imageRes)
+ }
}
- })
+ )
start()
}
}
@@ -208,36 +218,44 @@ internal class SafetyEntryGroupView @JvmOverloads constructor(
val childAt = entriesContainerView?.getChildAt(index)
val entryView = childAt as? SafetyEntryView
entryView?.showEntry(
- entry, PositionInCardList.INSIDE_GROUP, getTaskIdForEntry(entry.id), viewModel)
+ entry,
+ PositionInCardList.INSIDE_GROUP,
+ getTaskIdForEntry(entry.id),
+ viewModel
+ )
}
}
private fun setAccessibilityAttributes(group: SafetyCenterEntryGroup) {
// When status is yellow/red, adding an "Actions needed" before the summary is read.
- contentDescription = if (isExpanded == true) {
- null
- } else {
- val isActionNeeded = group.severityLevel >= ENTRY_SEVERITY_LEVEL_RECOMMENDATION
- val contentDescriptionResId = if (isActionNeeded) {
- R.string.safety_center_entry_group_with_actions_needed_content_description
+ contentDescription =
+ if (isExpanded == true) {
+ null
} else {
- R.string.safety_center_entry_group_content_description
+ val isActionNeeded = group.severityLevel >= ENTRY_SEVERITY_LEVEL_RECOMMENDATION
+ val contentDescriptionResId =
+ if (isActionNeeded) {
+ R.string.safety_center_entry_group_with_actions_needed_content_description
+ } else {
+ R.string.safety_center_entry_group_content_description
+ }
+ context.getString(contentDescriptionResId, group.title, group.summary)
}
- context.getString(contentDescriptionResId, group.title, group.summary)
- }
// Replacing the on-click label to indicate the expand/collapse action. The on-click command
// is set to null so that it uses the existing expand/collapse behaviour.
- val accessibilityActionResId = if (isExpanded == true) {
- R.string.safety_center_entry_group_collapse_action
- } else {
- R.string.safety_center_entry_group_expand_action
- }
+ val accessibilityActionResId =
+ if (isExpanded == true) {
+ R.string.safety_center_entry_group_collapse_action
+ } else {
+ R.string.safety_center_entry_group_expand_action
+ }
ViewCompat.replaceAccessibilityAction(
- this,
- AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_CLICK,
- context.getString(accessibilityActionResId),
- null)
+ this,
+ AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_CLICK,
+ context.getString(accessibilityActionResId),
+ null
+ )
}
private fun toggleExpandedState(
diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/SafetyEntryView.kt b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/SafetyEntryView.kt
index 7e0240ead..e28f782ab 100644
--- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/SafetyEntryView.kt
+++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/SafetyEntryView.kt
@@ -81,6 +81,7 @@ constructor(
private fun showEntryDetails(entry: SafetyCenterEntry) {
commonEntryView?.showDetails(
+ entry.id,
entry.title,
entry.summary,
entry.severityLevel,