Merge "SDK API doesSwitchModemConfigTriggerReboot"
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index f8d8ca0..480aa5c 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -120,6 +120,7 @@
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.STATUS_BAR" />
+ <uses-permission android:name="android.permission.STATUS_BAR_SERVICE" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS" />
diff --git a/res/layout/emergency_dialer.xml b/res/layout/emergency_dialer.xml
index 491b661..6247379 100644
--- a/res/layout/emergency_dialer.xml
+++ b/res/layout/emergency_dialer.xml
@@ -66,25 +66,6 @@
android:layout_gravity="bottom"
android:orientation="vertical">
- <!--Emergency dialer shortcuts implement EmergencyInfoGroup to replace
- EmergencyActionGroup. Using a title to indicate the dialpad is emergency calls only.-->
- <FrameLayout
- android:id="@+id/emergency_dialpad_title_container"
- android:layout_height="64dp"
- android:layout_width="match_parent"
- android:layout_marginTop="16dp"
- android:layout_marginBottom="24dp"
- android:visibility="gone">
- <TextView
- android:id="@+id/emergency_dialpad_title"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:layout_gravity="center"
- android:textStyle="bold"
- android:maxLines="1"
- android:text="@string/emergency_dialpad_title"/>
- </FrameLayout>
-
<!-- FrameLayout -->
<com.android.phone.EmergencyActionGroup
android:id="@+id/emergency_action_group"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 305d58c..4ad0d26 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1159,8 +1159,6 @@
<string name="emergency_information_confirm_hint">Tap again to view info</string>
<!-- Dialog title for the "radio enable" UI for emergency calls -->
<string name="emergency_enable_radio_dialog_title">Emergency call</string>
- <!-- Title for the emergency dialpad UI -->
- <string name="emergency_dialpad_title">Emergency calls only</string>
<!-- Emergency dialer: Title of single emergency shortcut button -->
<string name="single_emergency_number_title">Emergency number</string>
<!-- Emergency dialer: Title of numerous emergency shortcut buttons -->
diff --git a/src/com/android/phone/CarrierConfigLoader.java b/src/com/android/phone/CarrierConfigLoader.java
index 054fe2f..061efef 100644
--- a/src/com/android/phone/CarrierConfigLoader.java
+++ b/src/com/android/phone/CarrierConfigLoader.java
@@ -541,7 +541,8 @@
private void broadcastConfigChangedIntent(int phoneId, boolean addSubIdExtra) {
Intent intent = new Intent(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED);
intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT |
- Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND);
+ Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND |
+ Intent.FLAG_RECEIVER_FOREGROUND);
// Include subId/carrier id extra only if SIM records are loaded
TelephonyManager telephonyManager = TelephonyManager.from(mContext);
int simApplicationState = telephonyManager.getSimApplicationState();
diff --git a/src/com/android/phone/EmergencyDialer.java b/src/com/android/phone/EmergencyDialer.java
index 38eb40d..812aac4 100644
--- a/src/com/android/phone/EmergencyDialer.java
+++ b/src/com/android/phone/EmergencyDialer.java
@@ -1111,13 +1111,6 @@
mEmergencyInfoGroup.setOnConfirmClickListener(this);
- // EmergencyActionGroup is replaced by EmergencyInfoGroup.
- mEmergencyActionGroup.setVisibility(View.GONE);
-
- // Setup dialpad title.
- final View emergencyDialpadTitle = findViewById(R.id.emergency_dialpad_title_container);
- emergencyDialpadTitle.setVisibility(View.VISIBLE);
-
mEmergencyShortcutButtonList = new ArrayList<>();
setupEmergencyCallShortcutButton();
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index cf96626..ca93961 100755
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -74,6 +74,7 @@
import android.telephony.PhoneCapability;
import android.telephony.PhoneNumberRange;
import android.telephony.RadioAccessFamily;
+import android.telephony.RadioAccessSpecifier;
import android.telephony.Rlog;
import android.telephony.ServiceState;
import android.telephony.SignalStrength;
@@ -82,6 +83,7 @@
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyHistogram;
import android.telephony.TelephonyManager;
+import android.telephony.TelephonyScanManager;
import android.telephony.UiccCardInfo;
import android.telephony.UiccSlotInfo;
import android.telephony.UssdResponse;
@@ -4423,7 +4425,6 @@
IBinder binder, String callingPackage) {
TelephonyPermissions.enforceCallingOrSelfModifyPermissionOrCarrierPrivilege(
mApp, subId, "requestNetworkScan");
-
LocationAccessPolicy.LocationPermissionResult locationResult =
LocationAccessPolicy.checkLocationPermission(mApp,
new LocationAccessPolicy.LocationPermissionQuery.Builder()
@@ -4433,18 +4434,54 @@
.setMethod("requestNetworkScan")
.setMinSdkVersionForFine(Build.VERSION_CODES.Q)
.build());
- switch (locationResult) {
- case DENIED_HARD:
- throw new SecurityException("Not allowed to request network scan -- location");
- case DENIED_SOFT:
- return -1;
+ if (locationResult != LocationAccessPolicy.LocationPermissionResult.ALLOWED) {
+ SecurityException e = checkNetworkRequestForSanitizedLocationAccess(request);
+ if (e != null) {
+ if (locationResult == LocationAccessPolicy.LocationPermissionResult.DENIED_HARD) {
+ throw e;
+ } else {
+ return TelephonyScanManager.INVALID_SCAN_ID;
+ }
+ }
}
-
return mNetworkScanRequestTracker.startNetworkScan(
request, messenger, binder, getPhone(subId),
callingPackage);
}
+ private SecurityException checkNetworkRequestForSanitizedLocationAccess(
+ NetworkScanRequest request) {
+ if (mApp.checkCallingOrSelfPermission(android.Manifest.permission.NETWORK_SCAN)
+ != PERMISSION_GRANTED) {
+ return new SecurityException("permission.NETWORK_SCAN is needed for network scans"
+ + " without location access.");
+ }
+
+ if (request.getSpecifiers() != null && request.getSpecifiers().length > 0) {
+ for (RadioAccessSpecifier ras : request.getSpecifiers()) {
+ if (ras.getBands() != null && ras.getBands().length > 0) {
+ return new SecurityException("Specific bands must not be"
+ + " scanned without location access.");
+ }
+ if (ras.getChannels() != null && ras.getChannels().length > 0) {
+ return new SecurityException("Specific channels must not be"
+ + " scanned without location access.");
+ }
+ }
+ }
+
+ List<String> allowedMccMncs =
+ NetworkScanRequestTracker.getAllowedMccMncsForLocationRestrictedScan(mApp);
+ for (String mccmnc : request.getPlmns()) {
+ if (!allowedMccMncs.contains(mccmnc)) {
+ return new SecurityException("Requested mccmnc " + mccmnc + " is not known to the"
+ + " device and cannot be scanned for without location access.");
+ }
+ }
+
+ return null;
+ }
+
/**
* Stops an existing network scan with the given scanId.
*
@@ -6183,11 +6220,12 @@
*/
@Override
public boolean isDataRoamingEnabled(int subId) {
+ mApp.enforceCallingOrSelfPermission(android.Manifest.permission.ACCESS_NETWORK_STATE,
+ null /* message */);
+
boolean isEnabled = false;
final long identity = Binder.clearCallingIdentity();
try {
- mApp.enforceCallingOrSelfPermission(android.Manifest.permission.ACCESS_NETWORK_STATE,
- null /* message */);
Phone phone = getPhone(subId);
isEnabled = phone != null ? phone.getDataRoamingEnabled() : false;
} catch (Exception e) {
@@ -6212,11 +6250,11 @@
*/
@Override
public void setDataRoamingEnabled(int subId, boolean isEnabled) {
+ TelephonyPermissions.enforceCallingOrSelfModifyPermissionOrCarrierPrivilege(
+ mApp, subId, "setDataRoamingEnabled");
+
final long identity = Binder.clearCallingIdentity();
try {
- TelephonyPermissions.enforceCallingOrSelfModifyPermissionOrCarrierPrivilege(
- mApp, subId, "setDataRoamingEnabled");
-
Phone phone = getPhone(subId);
if (phone != null) {
phone.setDataRoamingEnabled(isEnabled);
@@ -6228,11 +6266,12 @@
@Override
public boolean isManualNetworkSelectionAllowed(int subId) {
+ TelephonyPermissions.enforeceCallingOrSelfReadPhoneStatePermissionOrCarrierPrivilege(
+ mApp, subId, "isManualNetworkSelectionAllowed");
+
boolean isAllowed = true;
final long identity = Binder.clearCallingIdentity();
try {
- TelephonyPermissions.enforeceCallingOrSelfReadPhoneStatePermissionOrCarrierPrivilege(
- mApp, subId, "isManualNetworkSelectionAllowed");
Phone phone = getPhone(subId);
if (phone != null) {
isAllowed = phone.isCspPlmnEnabled();