Merge from master
Change-Id: I20c8bb451376e78b306ac231cf3d6a239a72267e
diff --git a/src/com/android/phone/CallNotifier.java b/src/com/android/phone/CallNotifier.java
index 2b7d2ff..dd1eaab 100644
--- a/src/com/android/phone/CallNotifier.java
+++ b/src/com/android/phone/CallNotifier.java
@@ -18,18 +18,14 @@
import com.android.internal.telephony.Call;
import com.android.internal.telephony.CallManager;
-import com.android.internal.telephony.CallerInfo;
-import com.android.internal.telephony.CallerInfoAsyncQuery;
import com.android.internal.telephony.Connection;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneConstants;
-import com.android.internal.telephony.PhoneBase;
import com.android.internal.telephony.TelephonyCapabilities;
import com.android.internal.telephony.cdma.CdmaInformationRecords.CdmaDisplayInfoRec;
import com.android.internal.telephony.cdma.CdmaInformationRecords.CdmaSignalInfoRec;
import com.android.internal.telephony.cdma.SignalToneUtil;
-import android.app.ActivityManagerNative;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothHeadset;
import android.bluetooth.BluetoothProfile;
@@ -37,14 +33,10 @@
import android.media.AudioAttributes;
import android.media.AudioManager;
import android.media.ToneGenerator;
-import android.net.Uri;
import android.os.AsyncResult;
import android.os.Handler;
import android.os.Message;
import android.os.SystemProperties;
-import android.os.SystemVibrator;
-import android.os.Vibrator;
-import android.provider.CallLog.Calls;
import android.provider.Settings;
import android.telecom.TelecomManager;
import android.telephony.DisconnectCause;
@@ -55,7 +47,6 @@
import android.telephony.SubscriptionManager.OnSubscriptionsChangedListener;
import android.telephony.TelephonyManager;
import android.util.ArrayMap;
-import android.util.EventLog;
import android.util.Log;
import java.util.Iterator;
diff --git a/src/com/android/phone/EmergencyCallbackModeService.java b/src/com/android/phone/EmergencyCallbackModeService.java
index 3310df1..997be83 100644
--- a/src/com/android/phone/EmergencyCallbackModeService.java
+++ b/src/com/android/phone/EmergencyCallbackModeService.java
@@ -35,7 +35,6 @@
import android.os.SystemProperties;
import android.util.Log;
-import com.android.internal.telephony.cdma.CDMAPhone;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneConstants;
import com.android.internal.telephony.PhoneFactory;
diff --git a/src/com/android/phone/NotificationMgr.java b/src/com/android/phone/NotificationMgr.java
index 100a38c..103d51e 100644
--- a/src/com/android/phone/NotificationMgr.java
+++ b/src/com/android/phone/NotificationMgr.java
@@ -33,7 +33,6 @@
import android.os.UserManager;
import android.preference.PreferenceManager;
import android.provider.ContactsContract.PhoneLookup;
-import android.provider.Settings;
import android.telecom.PhoneAccount;
import android.telecom.PhoneAccountHandle;
import android.telecom.TelecomManager;
@@ -49,16 +48,13 @@
import android.widget.Toast;
import com.android.internal.telephony.Phone;
-import com.android.internal.telephony.PhoneBase;
import com.android.internal.telephony.TelephonyCapabilities;
import com.android.phone.settings.VoicemailSettingsActivity;
import com.android.phone.vvm.omtp.sync.VoicemailStatusQueryHelper;
import com.android.phone.settings.VoicemailNotificationSettingsUtil;
-import com.android.phone.settings.VoicemailProviderSettingsUtil;
import java.util.Iterator;
import java.util.List;
-import java.util.Map;
import java.util.Set;
/**
@@ -681,10 +677,10 @@
SharedPreferences sp =
PreferenceManager.getDefaultSharedPreferences(mContext);
String networkSelection =
- sp.getString(PhoneBase.NETWORK_SELECTION_NAME_KEY + subId, "");
+ sp.getString(Phone.NETWORK_SELECTION_NAME_KEY + subId, "");
if (TextUtils.isEmpty(networkSelection)) {
networkSelection =
- sp.getString(PhoneBase.NETWORK_SELECTION_KEY + subId, "");
+ sp.getString(Phone.NETWORK_SELECTION_KEY + subId, "");
}
if (DBG) log("updateNetworkSelection()..." + "state = " +
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index d61ef59..6f828db 100644
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -80,12 +80,9 @@
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
-import java.util.Objects;
/**
* Implementation of the ITelephony interface.
@@ -2460,14 +2457,20 @@
public String getLine1NumberForDisplay(int subId, String callingPackage) {
// This is open to apps with WRITE_SMS.
if (!canReadPhoneNumber(callingPackage, "getLine1NumberForDisplay")) {
+ if (DBG_MERGE) log("getLine1NumberForDisplay returning null due to permission");
return null;
}
String iccId = getIccId(subId);
if (iccId != null) {
String numberPrefKey = PREF_CARRIERS_NUMBER_PREFIX + iccId;
+ if (DBG_MERGE) {
+ log("getLine1NumberForDisplay returning " +
+ mTelephonySharedPreferences.getString(numberPrefKey, null));
+ }
return mTelephonySharedPreferences.getString(numberPrefKey, null);
}
+ if (DBG_MERGE) log("getLine1NumberForDisplay returning null as iccId is null");
return null;
}
@@ -2748,7 +2751,7 @@
}
/**
- * Besides READ_PHONE_STATE, WRITE_SMS also allows apps to get phone numbers.
+ * Besides READ_PHONE_STATE, WRITE_SMS and READ_SMS also allow apps to get phone numbers.
*/
private boolean canReadPhoneNumber(String callingPackage, String message) {
// Default SMS app can always read it.
@@ -2758,11 +2761,19 @@
}
try {
return canReadPhoneState(callingPackage, message);
- } catch (SecurityException e) {
- // Can be read with READ_SMS too.
- mApp.enforceCallingOrSelfPermission(android.Manifest.permission.READ_SMS, message);
- return mAppOps.noteOp(AppOpsManager.OP_READ_SMS,
- Binder.getCallingUid(), callingPackage) == AppOpsManager.MODE_ALLOWED;
+ } catch (SecurityException readPhoneStateSecurityException) {
+ try {
+ // Can be read with READ_SMS too.
+ mApp.enforceCallingOrSelfPermission(android.Manifest.permission.READ_SMS, message);
+ return mAppOps.noteOp(AppOpsManager.OP_READ_SMS,
+ Binder.getCallingUid(), callingPackage) == AppOpsManager.MODE_ALLOWED;
+ } catch (SecurityException readSmsSecurityException) {
+ // Throw exception with message including both READ_PHONE_STATE and READ_SMS
+ // permissions
+ throw new SecurityException(message + ": Neither user " + Binder.getCallingUid() +
+ " nor current process has " + android.Manifest.permission.READ_PHONE_STATE +
+ " or " + android.Manifest.permission.READ_SMS + ".");
+ }
}
}
@@ -2880,4 +2891,23 @@
public ModemActivityInfo getModemActivityInfo() {
return (ModemActivityInfo) sendRequest(CMD_GET_MODEM_ACTIVITY_INFO, null);
}
+
+ /**
+ * {@hide}
+ * Returns the service state information on specified subscription.
+ */
+ @Override
+ public ServiceState getServiceStateForSubscriber(int subId, String callingPackage) {
+
+ if (!canReadPhoneState(callingPackage, "getServiceStateForSubscriber")) {
+ return null;
+ }
+
+ final Phone phone = getPhone(subId);
+ if (phone == null) {
+ return null;
+ }
+
+ return phone.getServiceState();
+ }
}
diff --git a/src/com/android/phone/vvm/omtp/sms/OmtpMessageReceiver.java b/src/com/android/phone/vvm/omtp/sms/OmtpMessageReceiver.java
index 3eefbee..0ecf341 100644
--- a/src/com/android/phone/vvm/omtp/sms/OmtpMessageReceiver.java
+++ b/src/com/android/phone/vvm/omtp/sms/OmtpMessageReceiver.java
@@ -62,6 +62,12 @@
}
SmsMessage[] messages = Telephony.Sms.Intents.getMessagesFromIntent(intent);
+
+ if (messages == null) {
+ Log.w(TAG, "Message does not exist in the intent.");
+ return;
+ }
+
StringBuilder messageBody = new StringBuilder();
for (int i = 0; i < messages.length; i++) {
@@ -162,4 +168,4 @@
/* isEnabled */ false, /* isUserSet */ true);
}
}
-}
\ No newline at end of file
+}