Merge "Update permissions for ServiceState broadcast" into sc-dev am: cc16c9178b am: 4e51e85e00

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/16765537

Change-Id: Ifd8cc68fb8b6536abf6def5e699374a08ec90ff0
This commit is contained in:
TreeHugger Robot
2022-03-01 22:32:18 +00:00
committed by Automerger Merge Worker

View File

@@ -2901,14 +2901,32 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
intent.putExtra(SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX, subId); intent.putExtra(SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX, subId);
intent.putExtra(PHONE_CONSTANTS_SLOT_KEY, phoneId); intent.putExtra(PHONE_CONSTANTS_SLOT_KEY, phoneId);
intent.putExtra(SubscriptionManager.EXTRA_SLOT_INDEX, phoneId); intent.putExtra(SubscriptionManager.EXTRA_SLOT_INDEX, phoneId);
// Send the broadcast twice -- once for all apps with READ_PHONE_STATE, then again // Send the broadcast twice -- once for all apps with READ_PHONE_STATE, then again
// for all apps with READ_PRIV but not READ_PHONE_STATE. This ensures that any app holding // for all apps with READ_PRIVILEGED_PHONE_STATE but not READ_PHONE_STATE.
// either READ_PRIV or READ_PHONE get this broadcast exactly once. // Do this again twice, the first time for apps with ACCESS_FINE_LOCATION, then again with
mContext.sendBroadcastAsUser(intent, UserHandle.ALL, Manifest.permission.READ_PHONE_STATE); // the location-sanitized service state for all apps without ACCESS_FINE_LOCATION.
mContext.createContextAsUser(UserHandle.ALL, 0) // This ensures that any app holding either READ_PRIVILEGED_PHONE_STATE or READ_PHONE_STATE
.sendBroadcastMultiplePermissions(intent, // get this broadcast exactly once, and we are not exposing location without permission.
new String[] { Manifest.permission.READ_PRIVILEGED_PHONE_STATE }, mContext.createContextAsUser(UserHandle.ALL, 0).sendBroadcastMultiplePermissions(intent,
new String[] { Manifest.permission.READ_PHONE_STATE }); new String[] {Manifest.permission.READ_PHONE_STATE,
Manifest.permission.ACCESS_FINE_LOCATION});
mContext.createContextAsUser(UserHandle.ALL, 0).sendBroadcastMultiplePermissions(intent,
new String[] {Manifest.permission.READ_PRIVILEGED_PHONE_STATE,
Manifest.permission.ACCESS_FINE_LOCATION},
new String[] {Manifest.permission.READ_PHONE_STATE});
// Replace bundle with location-sanitized ServiceState
data = new Bundle();
state.createLocationInfoSanitizedCopy(true).fillInNotifierBundle(data);
intent.putExtras(data);
mContext.createContextAsUser(UserHandle.ALL, 0).sendBroadcastMultiplePermissions(intent,
new String[] {Manifest.permission.READ_PHONE_STATE},
new String[] {Manifest.permission.ACCESS_FINE_LOCATION});
mContext.createContextAsUser(UserHandle.ALL, 0).sendBroadcastMultiplePermissions(intent,
new String[] {Manifest.permission.READ_PRIVILEGED_PHONE_STATE},
new String[] {Manifest.permission.READ_PHONE_STATE,
Manifest.permission.ACCESS_FINE_LOCATION});
} }
private void broadcastSignalStrengthChanged(SignalStrength signalStrength, int phoneId, private void broadcastSignalStrengthChanged(SignalStrength signalStrength, int phoneId,