diff options
author | 2022-07-27 14:26:30 -0700 | |
---|---|---|
committer | 2022-08-04 18:07:05 +0000 | |
commit | 3d5f7772eb7a27cb92c23983b5dbe69500557159 (patch) | |
tree | 76e52766422c5069a4961eac23a57f77f7678c41 | |
parent | fa0f0865af0b1c4f32deb2154a55dcc9d46d5800 (diff) |
Add current task when starting PendingIntents from sources
When a SafetyEntryPreference is clicked, and a PendingIntent is sent,
manually set the task to be the same as the current task.
Fixes: 19401188
Test: manual
Change-Id: I5a232cb00d59d153f1aacd303366afdc468ccb87
7 files changed, 64 insertions, 5 deletions
diff --git a/PermissionController/AndroidManifest.xml b/PermissionController/AndroidManifest.xml index e081b81fa..b93e536df 100644 --- a/PermissionController/AndroidManifest.xml +++ b/PermissionController/AndroidManifest.xml @@ -62,6 +62,7 @@ <!--SYSTEM_APPLICATION_OVERLAY will be granted on T+, as installer protection is added in T --> <uses-permission android:name="android.permission.SYSTEM_APPLICATION_OVERLAY"/> <uses-permission android:name="android.permission.SET_UNRESTRICTED_KEEP_CLEAR_AREAS"/> + <uses-permission android:name="android.permission.START_TASKS_FROM_RECENTS" /> <application android:name="com.android.permissioncontroller.PermissionControllerApplication" android:label="@string/app_name" diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/SafetyCenterConstants.java b/PermissionController/src/com/android/permissioncontroller/safetycenter/SafetyCenterConstants.java index a5e773f76..cbf683ecf 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetycenter/SafetyCenterConstants.java +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/SafetyCenterConstants.java @@ -31,4 +31,6 @@ public class SafetyCenterConstants { "expand_issue_group_qs_fragment_key"; public static final String EXTRA_NAVIGATION_SOURCE = "navigation_source_intent_extra"; + + public static final int INVALID_TASK_ID = -1; } diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterDashboardFragment.java b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterDashboardFragment.java index 5b5d82937..148340fbc 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterDashboardFragment.java +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterDashboardFragment.java @@ -19,6 +19,7 @@ package com.android.permissioncontroller.safetycenter.ui; import static android.os.Build.VERSION_CODES.TIRAMISU; import static com.android.permissioncontroller.Constants.EXTRA_SESSION_ID; +import static com.android.permissioncontroller.safetycenter.SafetyCenterConstants.INVALID_TASK_ID; import static com.android.permissioncontroller.safetycenter.SafetyCenterConstants.QUICK_SETTINGS_SAFETY_CENTER_FRAGMENT; import static java.util.Objects.requireNonNull; @@ -55,8 +56,10 @@ import com.android.permissioncontroller.R; import com.android.permissioncontroller.safetycenter.ui.model.LiveSafetyCenterViewModelFactory; import com.android.permissioncontroller.safetycenter.ui.model.SafetyCenterUiData; import com.android.permissioncontroller.safetycenter.ui.model.SafetyCenterViewModel; +import com.android.safetycenter.internaldata.SafetyCenterIds; import com.android.safetycenter.resources.SafetyCenterResourcesContext; +import java.util.Arrays; import java.util.List; import java.util.Map; @@ -79,6 +82,7 @@ public final class SafetyCenterDashboardFragment extends PreferenceFragmentCompa private PreferenceGroup mEntriesGroup; private PreferenceGroup mStaticEntriesGroup; private SafetyCenterViewModel mViewModel; + private List<String> mSameTaskEntries; private boolean mIsQuickSettingsFragment; public SafetyCenterDashboardFragment() { @@ -133,6 +137,8 @@ public final class SafetyCenterDashboardFragment extends PreferenceFragmentCompa @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { setPreferencesFromResource(R.xml.safety_center_dashboard, rootKey); + mSameTaskEntries = Arrays.asList(new SafetyCenterResourcesContext(getContext()) + .getStringByName("config_same_task_safety_source_ids").split(",")); if (getArguments() != null) { mIsQuickSettingsFragment = @@ -319,6 +325,7 @@ public final class SafetyCenterDashboardFragment extends PreferenceFragmentCompa mEntriesGroup.addPreference( new SafetyEntryPreference( context, + getTaskIdForEntry(entry), entry, PositionInCardList.calculate(isFirstElement, isLastElement), mViewModel)); @@ -349,7 +356,11 @@ public final class SafetyCenterDashboardFragment extends PreferenceFragmentCompa isCardEnd); mEntriesGroup.addPreference( new SafetyEntryPreference( - context, entries.get(i), positionInCardList, mViewModel)); + context, + getTaskIdForEntry(entries.get(i)), + entries.get(i), + positionInCardList, + mViewModel)); } } @@ -363,8 +374,15 @@ public final class SafetyCenterDashboardFragment extends PreferenceFragmentCompa mStaticEntriesGroup.addPreference(category); for (SafetyCenterStaticEntry entry : group.getStaticEntries()) { - category.addPreference(new StaticSafetyEntryPreference(context, entry, mViewModel)); + category.addPreference( + new StaticSafetyEntryPreference( + context, requireActivity().getTaskId(), entry, mViewModel)); } } } + + private int getTaskIdForEntry(SafetyCenterEntry entry) { + String issueId = SafetyCenterIds.entryIdFromString(entry.getId()).getSafetySourceId(); + return mSameTaskEntries.contains(issueId) ? requireActivity().getTaskId() : INVALID_TASK_ID; + } } diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyEntryPreference.java b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyEntryPreference.java index 71f976be1..5ebc6a52f 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyEntryPreference.java +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyEntryPreference.java @@ -18,6 +18,9 @@ package com.android.permissioncontroller.safetycenter.ui; import static android.os.Build.VERSION_CODES.TIRAMISU; +import static com.android.permissioncontroller.safetycenter.SafetyCenterConstants.INVALID_TASK_ID; + +import android.app.ActivityOptions; import android.app.PendingIntent; import android.content.Context; import android.safetycenter.SafetyCenterEntry; @@ -46,6 +49,7 @@ public final class SafetyEntryPreference extends Preference implements Comparabl public SafetyEntryPreference( Context context, + int taskId, SafetyCenterEntry entry, PositionInCardList position, SafetyCenterViewModel viewModel) { @@ -66,7 +70,12 @@ public final class SafetyEntryPreference extends Preference implements Comparabl setOnPreferenceClickListener( unused -> { try { - pendingIntent.send(); + ActivityOptions options = ActivityOptions.makeBasic(); + if (taskId != INVALID_TASK_ID) { + options.setLaunchTaskId(taskId); + } + entry.getPendingIntent() + .send(context, 0, null, null, null, null, options.toBundle()); mViewModel .getInteractionLogger() .recordForEntry(Action.ENTRY_CLICKED, mEntry); diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/StaticSafetyEntryPreference.java b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/StaticSafetyEntryPreference.java index e71a17a3c..609407c6b 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/StaticSafetyEntryPreference.java +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/StaticSafetyEntryPreference.java @@ -18,6 +18,7 @@ package com.android.permissioncontroller.safetycenter.ui; import static android.os.Build.VERSION_CODES.TIRAMISU; +import android.app.ActivityOptions; import android.content.Context; import android.safetycenter.SafetyCenterStaticEntry; import android.text.TextUtils; @@ -39,7 +40,10 @@ public class StaticSafetyEntryPreference extends Preference implements Comparabl private final SafetyCenterViewModel mViewModel; public StaticSafetyEntryPreference( - Context context, SafetyCenterStaticEntry entry, SafetyCenterViewModel viewModel) { + Context context, + int taskId, + SafetyCenterStaticEntry entry, + SafetyCenterViewModel viewModel) { super(context); mEntry = entry; mViewModel = viewModel; @@ -49,7 +53,10 @@ public class StaticSafetyEntryPreference extends Preference implements Comparabl setOnPreferenceClickListener( unused -> { try { - mEntry.getPendingIntent().send(); + ActivityOptions options = ActivityOptions.makeBasic(); + options.setLaunchTaskId(taskId); + mEntry.getPendingIntent() + .send(context, 0, null, null, null, null, options.toBundle()); } catch (Exception ex) { Log.e( TAG, diff --git a/SafetyCenter/Resources/shared_res/values/config.xml b/SafetyCenter/Resources/shared_res/values/config.xml new file mode 100644 index 000000000..f80acf41c --- /dev/null +++ b/SafetyCenter/Resources/shared_res/values/config.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + ~ Copyright (C) 2022 The Android Open Source Project + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + --> + +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <!-- Comma separated list of safety source IDs to show in the same task as the safety center --> + <string name="config_same_task_safety_source_ids" translatable="false">AndroidLockScreen,AndroidBiometrics,AndroidPermissionUsage,AndroidPermissionManager,AndroidPrivacyControls,AndroidWorkPolicyInfo,AndroidAdvancedSecurity,AndroidAdvancedPrivacy</string> +</resources>
\ No newline at end of file diff --git a/permissions/com.android.permissioncontroller.xml b/permissions/com.android.permissioncontroller.xml index 453b47478..84fe69f11 100644 --- a/permissions/com.android.permissioncontroller.xml +++ b/permissions/com.android.permissioncontroller.xml @@ -32,5 +32,6 @@ <permission name="android.permission.READ_SAFETY_CENTER_STATUS" /> <permission name="android.permission.SEND_SAFETY_CENTER_UPDATE" /> <permission name="android.permission.SET_UNRESTRICTED_KEEP_CLEAR_AREAS" /> + <permission name="android.permission.START_TASKS_FROM_RECENTS" /> </privapp-permissions> </permissions> |