diff options
author | Shriya Gupta <shrigupt@google.com> | 2023-03-08 17:26:35 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2023-03-08 17:26:35 +0000 |
commit | b7fc89f121128287a2247a6af00edc2499e9b0ad (patch) | |
tree | de08288b0fbceac18a258b0467f66fe0a3002251 /PermissionController/src/com/android/permissioncontroller/safetycenter | |
parent | 97488126387755197f303d1210dbeb73d056815c (diff) | |
parent | 651c5d7585d985f0cca6fa459171175f3abd94d2 (diff) | |
download | Permission-b7fc89f121128287a2247a6af00edc2499e9b0ad.tar.gz |
Merge "Fix severity level for the Privacy sources group" into udc-dev
Diffstat (limited to 'PermissionController/src/com/android/permissioncontroller/safetycenter')
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, |