diff options
author | Michael Groover <mpgroover@google.com> | 2023-01-26 22:15:53 +0000 |
---|---|---|
committer | Michael Groover <mpgroover@google.com> | 2023-01-26 23:54:53 +0000 |
commit | 6f2bf6fe778fea2ea0cbe60fca30c5d4965ea5bd (patch) | |
tree | a0b5c3a02869ef5b8c74412db01403e870b57466 | |
parent | aa0a3c4f9015602ae99c22580685fd0a95d751f8 (diff) | |
download | ims-6f2bf6fe778fea2ea0cbe60fca30c5d4965ea5bd.tar.gz |
Add exported flag to exposed runtime receiver
Android T allows apps to declare a runtime receiver as not exported
by invoking registerReceiver with a new RECEIVER_NOT_EXPORTED flag;
receivers registered with this flag will only receive broadcasts from
the platform and the app itself. However to ensure developers can
properly protect their receivers, all apps targeting U
and registering a receiver for non-system broadcasts must
specify either the exported or not exported flag when invoking
registerReceiver; if one of these flags is not provided, the
platform will throw a SecurityException. This commit updates
the receiver in DeviceCapabilityListener with the RECEIVER_EXPORTED
flag since it is registering for the TTY_PREFERRED_MODE_CHANGED
action which can be sent from UIDs other than the system; the
receiver is also protected by a signature permission which limits
the apps that could send this broadcast to this receiver.
Fixes: 266769311
Test: atest CellBroadcastUiTest#testAlertUiOnReceivedAlert
Change-Id: I821e92fdd0a3027b189a6cdec5da7740ea8846e1
3 files changed, 8 insertions, 2 deletions
diff --git a/src/java/com/android/ims/rcs/uce/presence/publish/DeviceCapabilityListener.java b/src/java/com/android/ims/rcs/uce/presence/publish/DeviceCapabilityListener.java index b824aa08..d3c82f2a 100644 --- a/src/java/com/android/ims/rcs/uce/presence/publish/DeviceCapabilityListener.java +++ b/src/java/com/android/ims/rcs/uce/presence/publish/DeviceCapabilityListener.java @@ -276,7 +276,7 @@ public class DeviceCapabilityListener { IntentFilter filter = new IntentFilter(); filter.addAction(TelecomManager.ACTION_TTY_PREFERRED_MODE_CHANGED); mContext.registerReceiver(mReceiver, filter, android.Manifest.permission.MODIFY_PHONE_STATE, - null); + null, Context.RECEIVER_EXPORTED); ContentResolver resolver = mContext.getContentResolver(); if (resolver != null) { diff --git a/tests/src/com/android/ims/ContextFixture.java b/tests/src/com/android/ims/ContextFixture.java index 48cb9ab1..21dd6348 100644 --- a/tests/src/com/android/ims/ContextFixture.java +++ b/tests/src/com/android/ims/ContextFixture.java @@ -138,6 +138,12 @@ public class ContextFixture { } @Override + public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter, + String broadcastPermission, Handler scheduler, int flags) { + return null; + } + + @Override public void unregisterReceiver(BroadcastReceiver receiver) { } diff --git a/tests/src/com/android/ims/rcs/uce/presence/publish/DeviceCapabilityListenerTest.java b/tests/src/com/android/ims/rcs/uce/presence/publish/DeviceCapabilityListenerTest.java index 4b3caeb4..7c649891 100644 --- a/tests/src/com/android/ims/rcs/uce/presence/publish/DeviceCapabilityListenerTest.java +++ b/tests/src/com/android/ims/rcs/uce/presence/publish/DeviceCapabilityListenerTest.java @@ -107,7 +107,7 @@ public class DeviceCapabilityListenerTest extends ImsTestBase { deviceCapListener.initialize(); verify(mContext).registerReceiver(any(), any(), - eq(android.Manifest.permission.MODIFY_PHONE_STATE), any()); + eq(android.Manifest.permission.MODIFY_PHONE_STATE), any(), anyInt()); verify(mProvisioningManager).registerProvisioningChangedCallback(any(), any()); } |