Add unaudited exported flag to exposed runtime receivers
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 or later 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 all the exposed receivers with a new RECEIVER_EXPORTED_UNAUDITED flag to maintain the existing behavior of exporting the receiver while also flagging the receiver for audit before the U release. Bug: 234659204 Test: Build Change-Id: I8fbcf69575d829f26e02d661498d69f5fc8740d0
This commit is contained in:
@@ -295,7 +295,8 @@ public class SimStatusDialogController implements LifecycleObserver {
|
|||||||
if (mShowLatestAreaInfo) {
|
if (mShowLatestAreaInfo) {
|
||||||
updateAreaInfoText();
|
updateAreaInfoText();
|
||||||
mContext.registerReceiver(mAreaInfoReceiver,
|
mContext.registerReceiver(mAreaInfoReceiver,
|
||||||
new IntentFilter(CellBroadcastIntents.ACTION_AREA_INFO_UPDATED));
|
new IntentFilter(CellBroadcastIntents.ACTION_AREA_INFO_UPDATED),
|
||||||
|
Context.RECEIVER_EXPORTED/*UNAUDITED*/);
|
||||||
}
|
}
|
||||||
|
|
||||||
mIsRegisteredListener = true;
|
mIsRegisteredListener = true;
|
||||||
|
@@ -86,7 +86,8 @@ public class CarrierConfigCache {
|
|||||||
final CarrierConfigChangeReceiver receiver = new CarrierConfigChangeReceiver();
|
final CarrierConfigChangeReceiver receiver = new CarrierConfigChangeReceiver();
|
||||||
final Context appContext = context.getApplicationContext();
|
final Context appContext = context.getApplicationContext();
|
||||||
sCarrierConfigManager = appContext.getSystemService(CarrierConfigManager.class);
|
sCarrierConfigManager = appContext.getSystemService(CarrierConfigManager.class);
|
||||||
appContext.registerReceiver(receiver, new IntentFilter(ACTION_CARRIER_CONFIG_CHANGED));
|
appContext.registerReceiver(receiver, new IntentFilter(ACTION_CARRIER_CONFIG_CHANGED),
|
||||||
|
Context.RECEIVER_EXPORTED/*UNAUDITED*/);
|
||||||
return sInstance;
|
return sInstance;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -38,7 +38,8 @@ public class CarrierConfigChangedReceiver extends BroadcastReceiver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void registerOn(Context context) {
|
public void registerOn(Context context) {
|
||||||
context.registerReceiver(this, new IntentFilter(ACTION_CARRIER_CONFIG_CHANGED));
|
context.registerReceiver(this, new IntentFilter(ACTION_CARRIER_CONFIG_CHANGED),
|
||||||
|
Context.RECEIVER_EXPORTED/*UNAUDITED*/);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -166,7 +166,8 @@ public class TetherEnabler implements SwitchWidgetController.OnSwitchChangeListe
|
|||||||
TetheringManager.ACTION_TETHER_STATE_CHANGED);
|
TetheringManager.ACTION_TETHER_STATE_CHANGED);
|
||||||
filter.addAction(WifiManager.WIFI_AP_STATE_CHANGED_ACTION);
|
filter.addAction(WifiManager.WIFI_AP_STATE_CHANGED_ACTION);
|
||||||
filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
|
filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
|
||||||
mContext.registerReceiver(mTetherChangeReceiver, filter);
|
mContext.registerReceiver(mTetherChangeReceiver, filter,
|
||||||
|
Context.RECEIVER_EXPORTED/*UNAUDITED*/);
|
||||||
mTetheringEventCallback =
|
mTetheringEventCallback =
|
||||||
new TetheringManager.TetheringEventCallback() {
|
new TetheringManager.TetheringEventCallback() {
|
||||||
@Override
|
@Override
|
||||||
|
@@ -114,7 +114,8 @@ public class WorkModePreferenceControllerTest {
|
|||||||
@Test
|
@Test
|
||||||
public void onStop_shouldUnregisterReceiver() {
|
public void onStop_shouldUnregisterReceiver() {
|
||||||
// register it first
|
// register it first
|
||||||
mContext.registerReceiver(mController.mReceiver, null);
|
mContext.registerReceiver(mController.mReceiver, null,
|
||||||
|
Context.RECEIVER_EXPORTED/*UNAUDITED*/);
|
||||||
|
|
||||||
mController.onStop();
|
mController.onStop();
|
||||||
verify(mContext).unregisterReceiver(mController.mReceiver);
|
verify(mContext).unregisterReceiver(mController.mReceiver);
|
||||||
|
@@ -99,7 +99,8 @@ public class BluetoothDeviceNamePreferenceControllerTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testOnStop_receiverUnregistered() {
|
public void testOnStop_receiverUnregistered() {
|
||||||
// register it first
|
// register it first
|
||||||
mContext.registerReceiver(mController.mReceiver, null);
|
mContext.registerReceiver(mController.mReceiver, null,
|
||||||
|
Context.RECEIVER_EXPORTED/*UNAUDITED*/);
|
||||||
|
|
||||||
mController.onStop();
|
mController.onStop();
|
||||||
verify(mContext).unregisterReceiver(mController.mReceiver);
|
verify(mContext).unregisterReceiver(mController.mReceiver);
|
||||||
|
@@ -168,7 +168,8 @@ public class PreviouslyConnectedDevicePreferenceControllerTest {
|
|||||||
@Test
|
@Test
|
||||||
public void onStop_unregisterCallback() {
|
public void onStop_unregisterCallback() {
|
||||||
// register it first
|
// register it first
|
||||||
mContext.registerReceiver(mPreConnectedDeviceController.mReceiver, null);
|
mContext.registerReceiver(mPreConnectedDeviceController.mReceiver, null,
|
||||||
|
Context.RECEIVER_EXPORTED/*UNAUDITED*/);
|
||||||
|
|
||||||
// unregister the callback in onStop()
|
// unregister the callback in onStop()
|
||||||
mPreConnectedDeviceController.onStop();
|
mPreConnectedDeviceController.onStop();
|
||||||
|
Reference in New Issue
Block a user