From 90664488b427cf0e4c96c3077de36d3106a3956a Mon Sep 17 00:00:00 2001 From: Marcello Galhardo Date: Tue, 18 Apr 2023 16:13:38 +0000 Subject: [PATCH 1/2] Allow System to by-pass `verifyShortcutInfoPackage` SystemUI needs to be able to modify shortcuts defined by other System Apps. A clear use case is Note Task shortcut which needs to be updated based on the notes role app which is observed from SystemUI. Test: manual Fixes: b/278724068 Change-Id: Iaca0e6a13ecb68f856334fd83947ac721d45ff81 --- .../core/java/com/android/server/pm/ShortcutService.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/services/core/java/com/android/server/pm/ShortcutService.java b/services/core/java/com/android/server/pm/ShortcutService.java index b669ba2388804..84a9888d24589 100644 --- a/services/core/java/com/android/server/pm/ShortcutService.java +++ b/services/core/java/com/android/server/pm/ShortcutService.java @@ -1716,6 +1716,11 @@ public class ShortcutService extends IShortcutService.Stub { if (si == null) { return; } + + if (isCallerSystem()) { + return; // no check + } + if (!Objects.equals(callerPackage, si.getPackage())) { android.util.EventLog.writeEvent(0x534e4554, "109824443", -1, ""); throw new SecurityException("Shortcut package name mismatch"); From e8b786395d4692c23f36a166edf18a2bea83d325 Mon Sep 17 00:00:00 2001 From: Marcello Galhardo Date: Mon, 24 Apr 2023 19:36:48 +0000 Subject: [PATCH 2/2] Update Note Task shortcut in Settings We have moved Note Task shortcut from SystemUI to Settings, as requested per Shortcut team and agreed with Settings team. We are now deleting all shortcut code duplicated inside SystemUI, and moving the "shortcut management logic" from NoteTaskController to point to the new shortcut in settings. Test: atest NoteTaskControllerTest Fixes: b/278724068 Change-Id: Idb772752bce28c97258c3a0855d87f613ee2d134 --- packages/SystemUI/AndroidManifest.xml | 16 ------ .../systemui/notetask/NoteTaskController.kt | 19 +++++-- .../systemui/notetask/NoteTaskModule.kt | 4 -- .../CreateNoteTaskShortcutActivity.kt | 55 ------------------- .../notetask/NoteTaskControllerTest.kt | 24 +++----- 5 files changed, 24 insertions(+), 94 deletions(-) delete mode 100644 packages/SystemUI/src/com/android/systemui/notetask/shortcut/CreateNoteTaskShortcutActivity.kt diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml index 4652ef195a0c2..32d6b70f7f471 100644 --- a/packages/SystemUI/AndroidManifest.xml +++ b/packages/SystemUI/AndroidManifest.xml @@ -966,22 +966,6 @@ android:permission="android.permission.BIND_JOB_SERVICE"/> - - - - - - - - Creating - * a custom shortcut activity - */ -class CreateNoteTaskShortcutActivity -@Inject -constructor( - private val roleManager: RoleManager, - private val shortcutManager: ShortcutManager, -) : ComponentActivity() { - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - - val shortcutInfo = roleManager.createNoteShortcutInfoAsUser(context = this, user) - val shortcutIntent = shortcutManager.createShortcutResultIntent(shortcutInfo) - setResult(Activity.RESULT_OK, shortcutIntent) - - finish() - } -} diff --git a/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskControllerTest.kt index 55f221df1f0a7..5dbcd33ab0e6f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/notetask/NoteTaskControllerTest.kt @@ -45,8 +45,8 @@ import androidx.test.runner.AndroidJUnit4 import com.android.systemui.R import com.android.systemui.SysuiTestCase import com.android.systemui.notetask.NoteTaskController.Companion.EXTRA_SHORTCUT_BADGE_OVERRIDE_PACKAGE +import com.android.systemui.notetask.NoteTaskController.Companion.SETTINGS_CREATE_NOTE_TASK_SHORTCUT_COMPONENT import com.android.systemui.notetask.NoteTaskController.Companion.SHORTCUT_ID -import com.android.systemui.notetask.shortcut.CreateNoteTaskShortcutActivity import com.android.systemui.notetask.shortcut.LaunchNoteTaskActivity import com.android.systemui.notetask.shortcut.LaunchNoteTaskManagedProfileProxyActivity import com.android.systemui.settings.FakeUserTracker @@ -423,8 +423,8 @@ internal class NoteTaskControllerTest : SysuiTestCase() { eq(COMPONENT_ENABLED_STATE_ENABLED), eq(PackageManager.DONT_KILL_APP), ) - assertThat(argument.value.className) - .isEqualTo(CreateNoteTaskShortcutActivity::class.java.name) + + assertThat(argument.value).isEqualTo(SETTINGS_CREATE_NOTE_TASK_SHORTCUT_COMPONENT) } @Test @@ -438,8 +438,7 @@ internal class NoteTaskControllerTest : SysuiTestCase() { eq(COMPONENT_ENABLED_STATE_DISABLED), eq(PackageManager.DONT_KILL_APP), ) - assertThat(argument.value.className) - .isEqualTo(CreateNoteTaskShortcutActivity::class.java.name) + assertThat(argument.value).isEqualTo(SETTINGS_CREATE_NOTE_TASK_SHORTCUT_COMPONENT) } @Test @@ -458,8 +457,7 @@ internal class NoteTaskControllerTest : SysuiTestCase() { eq(COMPONENT_ENABLED_STATE_ENABLED), eq(PackageManager.DONT_KILL_APP), ) - assertThat(argument.value.className) - .isEqualTo(CreateNoteTaskShortcutActivity::class.java.name) + assertThat(argument.value).isEqualTo(SETTINGS_CREATE_NOTE_TASK_SHORTCUT_COMPONENT) } @Test @@ -479,8 +477,7 @@ internal class NoteTaskControllerTest : SysuiTestCase() { eq(COMPONENT_ENABLED_STATE_DISABLED), eq(PackageManager.DONT_KILL_APP), ) - assertThat(argument.value.className) - .isEqualTo(CreateNoteTaskShortcutActivity::class.java.name) + assertThat(argument.value).isEqualTo(SETTINGS_CREATE_NOTE_TASK_SHORTCUT_COMPONENT) } // endregion @@ -664,8 +661,7 @@ internal class NoteTaskControllerTest : SysuiTestCase() { eq(COMPONENT_ENABLED_STATE_ENABLED), eq(PackageManager.DONT_KILL_APP), ) - assertThat(actualComponent.value.className) - .isEqualTo(CreateNoteTaskShortcutActivity::class.java.name) + assertThat(actualComponent.value).isEqualTo(SETTINGS_CREATE_NOTE_TASK_SHORTCUT_COMPONENT) verify(shortcutManager, never()).disableShortcuts(any()) verify(shortcutManager).enableShortcuts(listOf(SHORTCUT_ID)) val actualShortcuts = argumentCaptor>() @@ -696,8 +692,7 @@ internal class NoteTaskControllerTest : SysuiTestCase() { eq(COMPONENT_ENABLED_STATE_DISABLED), eq(PackageManager.DONT_KILL_APP), ) - assertThat(argument.value.className) - .isEqualTo(CreateNoteTaskShortcutActivity::class.java.name) + assertThat(argument.value).isEqualTo(SETTINGS_CREATE_NOTE_TASK_SHORTCUT_COMPONENT) verify(shortcutManager).disableShortcuts(listOf(SHORTCUT_ID)) verify(shortcutManager, never()).enableShortcuts(any()) verify(shortcutManager, never()).updateShortcuts(any()) @@ -714,8 +709,7 @@ internal class NoteTaskControllerTest : SysuiTestCase() { eq(COMPONENT_ENABLED_STATE_DISABLED), eq(PackageManager.DONT_KILL_APP), ) - assertThat(argument.value.className) - .isEqualTo(CreateNoteTaskShortcutActivity::class.java.name) + assertThat(argument.value).isEqualTo(SETTINGS_CREATE_NOTE_TASK_SHORTCUT_COMPONENT) verify(shortcutManager).disableShortcuts(listOf(SHORTCUT_ID)) verify(shortcutManager, never()).enableShortcuts(any()) verify(shortcutManager, never()).updateShortcuts(any())