aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Groover <mpgroover@google.com>2023-01-26 22:15:53 +0000
committerMichael Groover <mpgroover@google.com>2023-01-26 23:54:53 +0000
commit6f2bf6fe778fea2ea0cbe60fca30c5d4965ea5bd (patch)
treea0b5c3a02869ef5b8c74412db01403e870b57466
parentaa0a3c4f9015602ae99c22580685fd0a95d751f8 (diff)
downloadims-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
-rw-r--r--src/java/com/android/ims/rcs/uce/presence/publish/DeviceCapabilityListener.java2
-rw-r--r--tests/src/com/android/ims/ContextFixture.java6
-rw-r--r--tests/src/com/android/ims/rcs/uce/presence/publish/DeviceCapabilityListenerTest.java2
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());
}