Merge "Import translations. DO NOT MERGE" into lmp-dev
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index c0cdc3e..cdc6a4c 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -427,6 +427,7 @@
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.MAIN" />
+ <action android:name="android.telecomm.intent.action.SHOW_CALL_SETTINGS" />
<action android:name="com.android.phone.CallFeaturesSetting.ADD_VOICEMAIL" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
@@ -585,7 +586,8 @@
</intent-filter>
</provider>
- <receiver android:name="com.android.services.telephony.AddAccountsReceiver">
+ <receiver android:name="com.android.services.telephony.AddAccountsReceiver"
+ android:singleUser="true" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.DEFAULT" />
diff --git a/src/com/android/phone/PhoneUtils.java b/src/com/android/phone/PhoneUtils.java
index 60950a5..19361ba 100644
--- a/src/com/android/phone/PhoneUtils.java
+++ b/src/com/android/phone/PhoneUtils.java
@@ -731,12 +731,7 @@
// On GSM phones, null is returned for MMI codes
if (null == connection) {
- if (phoneType == PhoneConstants.PHONE_TYPE_GSM && gatewayUri == null) {
- if (DBG) log("dialed MMI code: " + number);
- status = CALL_STATUS_DIALED_MMI;
- } else {
- status = CALL_STATUS_FAILED;
- }
+ status = CALL_STATUS_FAILED;
} else {
// Now that the call is successful, we can save the gateway info for the call
if (callGateway != null) {
diff --git a/src/com/android/services/telephony/GsmConnection.java b/src/com/android/services/telephony/GsmConnection.java
index a385b9f..298f3d9 100644
--- a/src/com/android/services/telephony/GsmConnection.java
+++ b/src/com/android/services/telephony/GsmConnection.java
@@ -51,7 +51,7 @@
void setIsConferenceCapable(boolean isConferenceCapable) {
if (mIsConferenceCapable != isConferenceCapable) {
mIsConferenceCapable = isConferenceCapable;
- updateCallCapabilities(false);
+ updateCallCapabilities();
}
}
diff --git a/src/com/android/services/telephony/TelecommAccountRegistry.java b/src/com/android/services/telephony/TelecommAccountRegistry.java
index 0ab76d9..509a410 100644
--- a/src/com/android/services/telephony/TelecommAccountRegistry.java
+++ b/src/com/android/services/telephony/TelecommAccountRegistry.java
@@ -101,6 +101,8 @@
* Sets up all the phone accounts for SIM and SIP accounts on first boot.
*/
void setup() {
+ // Initialize the PhoneFactory, since the PhoneApp may not yet have been set up
+ PhoneFactory.makeDefaultPhones(mContext);
// Before we do anything, we need to clear whatever entries we registered at boot.
mTelecommManager.clearAccounts(mContext.getPackageName());
diff --git a/src/com/android/services/telephony/TelephonyConnection.java b/src/com/android/services/telephony/TelephonyConnection.java
index 6803bdd..16e167b 100644
--- a/src/com/android/services/telephony/TelephonyConnection.java
+++ b/src/com/android/services/telephony/TelephonyConnection.java
@@ -22,6 +22,7 @@
import android.os.Message;
import android.telecomm.CallAudioState;
import android.telecomm.CallCapabilities;
+import android.telecomm.CallVideoProvider;
import android.telephony.DisconnectCause;
import com.android.internal.telephony.Call;
@@ -32,6 +33,7 @@
import android.telecomm.Connection;
+import java.lang.Override;
import java.util.List;
import java.util.Objects;
@@ -48,7 +50,7 @@
switch (msg.what) {
case MSG_PRECISE_CALL_STATE_CHANGED:
Log.v(TelephonyConnection.this, "MSG_PRECISE_CALL_STATE_CHANGED");
- updateState(false);
+ updateState();
break;
case MSG_RINGBACK_TONE:
Log.v(TelephonyConnection.this, "MSG_RINGBACK_TONE");
@@ -106,6 +108,17 @@
public void onRemoteVideoCapabilityChanged(boolean capable) {
setRemoteVideoCapable(capable);
}
+
+ /**
+ * The {@link com.android.internal.telephony.Connection} has reported a change in the
+ * call video provider.
+ *
+ * @param callVideoProvider The call video provider.
+ */
+ @Override
+ public void onCallVideoProviderChanged(CallVideoProvider callVideoProvider) {
+ setCallVideoProvider(callVideoProvider);
+ }
};
private com.android.internal.telephony.Connection mOriginalConnection;
@@ -144,6 +157,9 @@
setVideoState(mOriginalConnection.getVideoState());
setLocalVideoCapable(mOriginalConnection.isLocalVideoCapable());
setRemoteVideoCapable(mOriginalConnection.isRemoteVideoCapable());
+ setCallVideoProvider(mOriginalConnection.getCallVideoProvider());
+
+ updateHandle();
}
@Override
@@ -285,22 +301,21 @@
protected abstract int buildCallCapabilities();
- protected final void updateCallCapabilities(boolean force) {
+ protected final void updateCallCapabilities() {
int newCallCapabilities = buildCallCapabilities();
newCallCapabilities = applyVideoCapabilities(newCallCapabilities);
- if (force || getCallCapabilities() != newCallCapabilities) {
+ if (getCallCapabilities() != newCallCapabilities) {
setCallCapabilities(newCallCapabilities);
}
}
- protected final void updateHandle(boolean force) {
- updateCallCapabilities(force);
+ protected final void updateHandle() {
+ updateCallCapabilities();
if (mOriginalConnection != null) {
- Uri handle = TelephonyConnectionService.getHandleFromAddress(
- mOriginalConnection.getAddress());
+ Uri handle = getHandleFromAddress(mOriginalConnection.getAddress());
int presentation = mOriginalConnection.getNumberPresentation();
- if (force || !Objects.equals(handle, getHandle()) ||
+ if (!Objects.equals(handle, getHandle()) ||
presentation != getHandlePresentation()) {
Log.v(this, "updateHandle, handle changed");
setHandle(handle, presentation);
@@ -308,7 +323,7 @@
String name = mOriginalConnection.getCnapName();
int namePresentation = mOriginalConnection.getCnapNamePresentation();
- if (force || !Objects.equals(name, getCallerDisplayName()) ||
+ if (!Objects.equals(name, getCallerDisplayName()) ||
namePresentation != getCallerDisplayNamePresentation()) {
Log.v(this, "updateHandle, caller display name changed");
setCallerDisplayName(name, namePresentation);
@@ -316,10 +331,6 @@
}
}
- void onAddedToCallService() {
- updateState(false);
- }
-
void onRemovedFromCallService() {
// Subclass can override this to do cleanup.
}
@@ -395,14 +406,14 @@
return true;
}
- private void updateState(boolean force) {
+ private void updateState() {
if (mOriginalConnection == null) {
return;
}
Call.State newState = mOriginalConnection.getState();
Log.v(this, "Update state from %s to %s for %s", mOriginalConnectionState, newState, this);
- if (force || mOriginalConnectionState != newState) {
+ if (mOriginalConnectionState != newState) {
mOriginalConnectionState = newState;
switch (newState) {
case IDLE:
@@ -429,8 +440,8 @@
break;
}
}
- updateCallCapabilities(force);
- updateHandle(force);
+ updateCallCapabilities();
+ updateHandle();
}
private void close() {
@@ -491,7 +502,7 @@
*/
public void setLocalVideoCapable(boolean capable) {
mLocalVideoCapable = capable;
- updateCallCapabilities(false);
+ updateCallCapabilities();
}
/**
@@ -502,6 +513,14 @@
*/
public void setRemoteVideoCapable(boolean capable) {
mRemoteVideoCapable = capable;
- updateCallCapabilities(false);
+ updateCallCapabilities();
+ }
+
+ private static Uri getHandleFromAddress(String address) {
+ // Address can be null for blocked calls.
+ if (address == null) {
+ address = "";
+ }
+ return Uri.fromParts(TelephonyConnectionService.SCHEME_TEL, address, null);
}
}
diff --git a/src/com/android/services/telephony/TelephonyConnectionService.java b/src/com/android/services/telephony/TelephonyConnectionService.java
index 41b6b9e..b3467a6 100644
--- a/src/com/android/services/telephony/TelephonyConnectionService.java
+++ b/src/com/android/services/telephony/TelephonyConnectionService.java
@@ -33,6 +33,8 @@
import com.android.internal.telephony.Call;
import com.android.internal.telephony.CallStateException;
import com.android.internal.telephony.Phone;
+
+import com.android.internal.telephony.PhoneConstants;
import com.android.internal.telephony.PhoneFactory;
import com.android.internal.telephony.SubscriptionController;
@@ -42,7 +44,7 @@
* Service for making GSM and CDMA connections.
*/
public class TelephonyConnectionService extends ConnectionService {
- private static String SCHEME_TEL = "tel";
+ static String SCHEME_TEL = "tel";
private ComponentName mExpectedComponentName = null;
private EmergencyCallHelper mEmergencyCallHelper;
@@ -180,15 +182,6 @@
return;
}
- Uri handle = getHandleFromAddress(originalConnection.getAddress());
- ConnectionRequest telephonyRequest = new ConnectionRequest(
- request.getAccountHandle(),
- request.getCallId(),
- handle,
- originalConnection.getNumberPresentation(),
- request.getExtras(),
- request.getVideoState());
-
TelephonyConnection connection = null;
if (phone.getPhoneType() == TelephonyManager.PHONE_TYPE_GSM) {
connection = new GsmConnection(originalConnection);
@@ -199,16 +192,13 @@
if (connection == null) {
response.onCancel(request);
} else {
- response.onSuccess(telephonyRequest, connection);
+ response.onSuccess(request, connection);
}
}
@Override
public void onConnectionAdded(Connection connection) {
Log.v(this, "onConnectionAdded, connection: " + connection);
- if (connection instanceof TelephonyConnection) {
- ((TelephonyConnection) connection).onAddedToCallService();
- }
}
@Override
@@ -236,23 +226,21 @@
}
if (originalConnection == null) {
+ int disconnectCause = DisconnectCause.ERROR_UNSPECIFIED;
+
+ // On GSM phones, null connection means that we dialed an MMI code
+ if (phone.getPhoneType() == PhoneConstants.PHONE_TYPE_GSM) {
+ disconnectCause = DisconnectCause.DIALED_MMI;
+ }
Log.d(this, "startOutgoingCall, phone.dial returned null");
- response.onFailure(request, DisconnectCause.ERROR_UNSPECIFIED, "Connection is null");
+ response.onFailure(request, disconnectCause, "Connection is null");
return;
}
- ConnectionRequest telephonyRequest = new ConnectionRequest(
- request.getAccountHandle(),
- request.getCallId(),
- request.getHandle(),
- request.getHandlePresentation(),
- request.getExtras(),
- request.getVideoState());
-
if (phone.getPhoneType() == TelephonyManager.PHONE_TYPE_GSM) {
- response.onSuccess(telephonyRequest, new GsmConnection(originalConnection));
+ response.onSuccess(request, new GsmConnection(originalConnection));
} else if (phone.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA) {
- response.onSuccess(telephonyRequest, new CdmaConnection(originalConnection));
+ response.onSuccess(request, new CdmaConnection(originalConnection));
} else {
// TODO(ihab): Tear down 'originalConnection' here, or move recognition of
// getPhoneType() earlier in this method before we've already asked phone to dial()
@@ -281,12 +269,4 @@
}
return null;
}
-
- static Uri getHandleFromAddress(String address) {
- // Address can be null for blocked calls.
- if (address == null) {
- address = "";
- }
- return Uri.fromParts(SCHEME_TEL, address, null);
- }
}