Merge "Fix wrong log and import order in PhoneInterfaceManager"
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 49c1571..c4c33ca 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -199,6 +199,10 @@
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" />
<uses-permission android:name="android.permission.READ_PRECISE_PHONE_STATE" />
<uses-permission android:name="android.permission.MANAGE_ROLE_HOLDERS" />
+ <!-- Allows us to whitelist receivers of the
+ ACTION_SIM_SLOT_STATUS_CHANGED broadcast to start activities
+ from the background. -->
+ <uses-permission android:name="android.permission.START_ACTIVITIES_FROM_BACKGROUND" />
<application android:name="PhoneApp"
android:persistent="true"
diff --git a/ecc/input/eccdata.txt b/ecc/input/eccdata.txt
index bf5d92c..403cad7 100644
--- a/ecc/input/eccdata.txt
+++ b/ecc/input/eccdata.txt
@@ -600,11 +600,8 @@
countries {
iso_code: "DE"
eccs {
- phone_number: "110"
- types: POLICE
- }
- eccs {
phone_number: "112"
+ types: POLICE
types: AMBULANCE
types: FIRE
}
diff --git a/ecc/output/eccdata b/ecc/output/eccdata
index 2b9007a..917273d 100644
--- a/ecc/output/eccdata
+++ b/ecc/output/eccdata
Binary files differ
diff --git a/src/com/android/phone/CarrierConfigLoader.java b/src/com/android/phone/CarrierConfigLoader.java
index 48047ca..d1eb3dc 100644
--- a/src/com/android/phone/CarrierConfigLoader.java
+++ b/src/com/android/phone/CarrierConfigLoader.java
@@ -194,7 +194,7 @@
case EVENT_SYSTEM_UNLOCKED:
{
- for (int i = 0; i < TelephonyManager.from(mContext).getPhoneCount(); ++i) {
+ for (int i = 0; i < TelephonyManager.from(mContext).getMaxPhoneCount(); ++i) {
// When user unlock device, we should only try to send broadcast again if we
// have sent it before unlock. This will avoid we try to load carrier config
// when SIM is still loading when unlock happens.
@@ -211,7 +211,7 @@
// Only update if there are cached config removed to avoid updating config for
// unrelated packages.
if (clearCachedConfigForPackage(carrierPackageName)) {
- int numPhones = TelephonyManager.from(mContext).getPhoneCount();
+ int numPhones = TelephonyManager.from(mContext).getMaxPhoneCount();
for (int i = 0; i < numPhones; ++i) {
updateConfigForPhoneId(i);
}
@@ -523,7 +523,7 @@
pkgFilter.addDataScheme("package");
context.registerReceiver(mPackageReceiver, pkgFilter);
- int numPhones = TelephonyManager.from(context).getPhoneCount();
+ int numPhones = TelephonyManager.from(context).getMaxPhoneCount();
mConfigFromDefaultApp = new PersistableBundle[numPhones];
mConfigFromCarrierApp = new PersistableBundle[numPhones];
mOverrideConfigs = new PersistableBundle[numPhones];
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index 7dca3cd..b22b66d 100755
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -6456,7 +6456,10 @@
if (card != null) {
cardId = card.getCardId();
} else {
- cardId = slot.getIccId();
+ cardId = slot.getEid();
+ if (TextUtils.isEmpty(cardId)) {
+ cardId = slot.getIccId();
+ }
}
if (cardId != null) {
diff --git a/src/com/android/services/telephony/RadioOnHelper.java b/src/com/android/services/telephony/RadioOnHelper.java
index 288c72c..85f94ab 100644
--- a/src/com/android/services/telephony/RadioOnHelper.java
+++ b/src/com/android/services/telephony/RadioOnHelper.java
@@ -53,7 +53,7 @@
return;
}
mListeners = new ArrayList<>(2);
- for (int i = 0; i < TelephonyManager.getDefault().getPhoneCount(); i++) {
+ for (int i = 0; i < TelephonyManager.getDefault().getMaxPhoneCount(); i++) {
mListeners.add(new RadioOnStateListener());
}
}
@@ -76,7 +76,7 @@
mCallback = callback;
mInProgressListeners.clear();
mIsRadioOnCallingEnabled = false;
- for (int i = 0; i < TelephonyManager.getDefault().getPhoneCount(); i++) {
+ for (int i = 0; i < TelephonyManager.getDefault().getMaxPhoneCount(); i++) {
Phone phone = PhoneFactory.getPhone(i);
if (phone == null) {
continue;
diff --git a/src/com/android/services/telephony/TelephonyConnection.java b/src/com/android/services/telephony/TelephonyConnection.java
index 414e4d2..84fa40c 100644
--- a/src/com/android/services/telephony/TelephonyConnection.java
+++ b/src/com/android/services/telephony/TelephonyConnection.java
@@ -1159,7 +1159,8 @@
&& isShowingOriginalDialString()) {
Log.i(this, "new original dial string is null, convert to: "
+ mOriginalConnection.getOrigDialString());
- originalConnection.setConverted(mOriginalConnection.getOrigDialString());
+ originalConnection.restoreDialedNumberAfterConversion(
+ mOriginalConnection.getOrigDialString());
}
clearOriginalConnection();
diff --git a/src/com/android/services/telephony/TelephonyConnectionService.java b/src/com/android/services/telephony/TelephonyConnectionService.java
index c8562c7..0e5a612 100644
--- a/src/com/android/services/telephony/TelephonyConnectionService.java
+++ b/src/com/android/services/telephony/TelephonyConnectionService.java
@@ -25,6 +25,9 @@
import android.content.IntentFilter;
import android.net.Uri;
import android.os.Bundle;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.os.Looper;
import android.provider.Settings;
import android.telecom.Conference;
import android.telecom.Connection;
@@ -176,6 +179,8 @@
// destroyed.
@VisibleForTesting
public Pair<WeakReference<TelephonyConnection>, Queue<Phone>> mEmergencyRetryCache;
+ private Handler mDdsSwitchHandler;
+ private HandlerThread mHandlerThread;
/**
* Keeps track of the status of a SIM slot.
@@ -329,11 +334,17 @@
IntentFilter intentFilter = new IntentFilter(
TelecomManager.ACTION_TTY_PREFERRED_MODE_CHANGED);
registerReceiver(mTtyBroadcastReceiver, intentFilter);
+
+ mHandlerThread = new HandlerThread("DdsSwitchHandlerThread");
+ mHandlerThread.start();
+ Looper looper = mHandlerThread.getLooper();
+ mDdsSwitchHandler = new Handler(looper);
}
@Override
public boolean onUnbind(Intent intent) {
unregisterReceiver(mTtyBroadcastReceiver);
+ mHandlerThread.quitSafely();
return super.onUnbind(intent);
}
@@ -523,14 +534,14 @@
} else {
final Connection resultConnection = getTelephonyConnection(request, numberToDial,
true, handle, phone);
- CompletableFuture<Boolean> phoneFuture = delayDialForDdsSwitch(phone);
- phoneFuture.whenComplete((result, error) -> {
- if (error != null) {
- Log.w(this, "onCreateOutgoingConn - delayDialForDdsSwitch exception= "
- + error.getMessage());
+ mDdsSwitchHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ boolean result = delayDialForDdsSwitch(phone);
+ Log.i(this,
+ "onCreateOutgoingConn - delayDialForDdsSwitch result = " + result);
+ placeOutgoingConnection(request, resultConnection, phone);
}
- Log.i(this, "onCreateOutgoingConn - delayDialForDdsSwitch result = " + result);
- placeOutgoingConnection(request, resultConnection, phone);
});
return resultConnection;
}
@@ -604,14 +615,14 @@
adjustAndPlaceOutgoingConnection(phone, originalConnection, request, numberToDial,
handle, originalPhoneType, false);
} else {
- delayDialForDdsSwitch(phone).whenComplete((result, error) -> {
- if (error != null) {
- Log.w(this, "handleOnComplete - delayDialForDdsSwitch exception= "
- + error.getMessage());
+ mDdsSwitchHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ boolean result = delayDialForDdsSwitch(phone);
+ Log.i(this, "handleOnComplete - delayDialForDdsSwitch result = " + result);
+ adjustAndPlaceOutgoingConnection(phone, originalConnection, request,
+ numberToDial, handle, originalPhoneType, true);
}
- Log.i(this, "handleOnComplete - delayDialForDdsSwitch result = " + result);
- adjustAndPlaceOutgoingConnection(phone, originalConnection, request,
- numberToDial, handle, originalPhoneType, true);
});
}
@@ -1380,13 +1391,22 @@
return chosenPhone;
}
- private CompletableFuture<Boolean> delayDialForDdsSwitch(Phone phone) {
+ /**
+ * If needed, block until the the default data is is switched for outgoing emergency call, or
+ * timeout expires.
+ */
+ private boolean delayDialForDdsSwitch(Phone phone) {
if (phone == null) {
- return CompletableFuture.completedFuture(Boolean.TRUE);
+ return true;
}
- return possiblyOverrideDefaultDataForEmergencyCall(phone)
- .completeOnTimeout(false, DEFAULT_DATA_SWITCH_TIMEOUT_MS,
- TimeUnit.MILLISECONDS);
+ try {
+ return possiblyOverrideDefaultDataForEmergencyCall(phone).get(
+ DEFAULT_DATA_SWITCH_TIMEOUT_MS, TimeUnit.MILLISECONDS);
+ } catch (Exception e) {
+ Log.w(this, "onCreateOutgoingConn - delayDialForDdsSwitch exception= "
+ + e.getMessage());
+ return false;
+ }
}
/**