Merge "Support for API cleanups."
diff --git a/src/com/android/server/telecom/CallLogManager.java b/src/com/android/server/telecom/CallLogManager.java
index b84d37e..a88fec8 100755
--- a/src/com/android/server/telecom/CallLogManager.java
+++ b/src/com/android/server/telecom/CallLogManager.java
@@ -337,8 +337,8 @@
int callFeatures = getCallFeatures(call.getVideoStateHistory(),
call.getDisconnectCause().getCode() == DisconnectCause.CALL_PULLED,
call.wasHighDefAudio(), call.wasWifi(),
- (call.getConnectionProperties() & Connection.PROPERTY_ASSISTED_DIALING_USED) ==
- Connection.PROPERTY_ASSISTED_DIALING_USED,
+ (call.getConnectionProperties() & Connection.PROPERTY_ASSISTED_DIALING) ==
+ Connection.PROPERTY_ASSISTED_DIALING,
call.wasEverRttCall(),
call.wasVolte());
diff --git a/src/com/android/server/telecom/ConnectionServiceWrapper.java b/src/com/android/server/telecom/ConnectionServiceWrapper.java
index b089db6..a3b23af 100644
--- a/src/com/android/server/telecom/ConnectionServiceWrapper.java
+++ b/src/com/android/server/telecom/ConnectionServiceWrapper.java
@@ -16,9 +16,12 @@
package com.android.server.telecom;
+import static android.Manifest.permission.MODIFY_PHONE_STATE;
+
import android.app.AppOpsManager;
import android.content.ComponentName;
import android.content.Context;
+import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Binder;
import android.os.Bundle;
@@ -465,6 +468,32 @@
public void addConferenceCall(String callId, ParcelableConference parcelableConference,
Session.Info sessionInfo) {
Log.startSession(sessionInfo, LogUtils.Sessions.CSW_ADD_CONFERENCE_CALL);
+
+ if (parcelableConference.getConnectElapsedTimeMillis() != 0
+ && mContext.checkCallingOrSelfPermission(MODIFY_PHONE_STATE)
+ != PackageManager.PERMISSION_GRANTED) {
+ Log.w(this, "addConferenceCall from caller without permission!");
+ parcelableConference = new ParcelableConference(
+ parcelableConference.getPhoneAccount(),
+ parcelableConference.getState(),
+ parcelableConference.getConnectionCapabilities(),
+ parcelableConference.getConnectionProperties(),
+ parcelableConference.getConnectionIds(),
+ parcelableConference.getVideoProvider(),
+ parcelableConference.getVideoState(),
+ 0 /* connectTimeMillis */,
+ 0 /* connectElapsedRealTime */,
+ parcelableConference.getStatusHints(),
+ parcelableConference.getExtras(),
+ parcelableConference.getHandle(),
+ parcelableConference.getHandlePresentation(),
+ "" /* callerDisplayName */,
+ TelecomManager.PRESENTATION_UNKNOWN /* callerDisplayNamePresentation */,
+ parcelableConference.getDisconnectCause(),
+ parcelableConference.isRingbackRequested()
+ );
+ }
+
long token = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
@@ -752,6 +781,13 @@
public void setAddress(String callId, Uri address, int presentation,
Session.Info sessionInfo) {
Log.startSession(sessionInfo, "CSW.sA");
+
+ if (mContext.checkCallingOrSelfPermission(MODIFY_PHONE_STATE)
+ != PackageManager.PERMISSION_GRANTED) {
+ Log.w(this, "setAddress from caller without permission.");
+ return;
+ }
+
long token = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
@@ -836,6 +872,13 @@
mAppOpsManager.checkPackage(Binder.getCallingUid(),
callingPhoneAccountHandle.getComponentName().getPackageName());
}
+
+ if (mContext.checkCallingOrSelfPermission(MODIFY_PHONE_STATE)
+ != PackageManager.PERMISSION_GRANTED) {
+ Log.w(this, "addExistingConnection from caller without permission!");
+ return;
+ }
+
long token = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
@@ -1038,6 +1081,13 @@
public void setConferenceState(String callId, boolean isConference,
Session.Info sessionInfo) throws RemoteException {
Log.startSession(sessionInfo, "CSW.sCS");
+
+ if (mContext.checkCallingOrSelfPermission(MODIFY_PHONE_STATE)
+ != PackageManager.PERMISSION_GRANTED) {
+ Log.w(this, "setConferenceState from caller without permission.");
+ return;
+ }
+
long token = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
diff --git a/src/com/android/server/telecom/ParcelableCallUtils.java b/src/com/android/server/telecom/ParcelableCallUtils.java
index 9f90874..3b77621 100644
--- a/src/com/android/server/telecom/ParcelableCallUtils.java
+++ b/src/com/android/server/telecom/ParcelableCallUtils.java
@@ -553,8 +553,8 @@
Connection.PROPERTY_SELF_MANAGED,
android.telecom.Call.Details.PROPERTY_SELF_MANAGED,
- Connection.PROPERTY_ASSISTED_DIALING_USED,
- android.telecom.Call.Details.PROPERTY_ASSISTED_DIALING_USED,
+ Connection.PROPERTY_ASSISTED_DIALING,
+ android.telecom.Call.Details.PROPERTY_ASSISTED_DIALING,
Connection.PROPERTY_IS_RTT,
android.telecom.Call.Details.PROPERTY_RTT,
diff --git a/src/com/android/server/telecom/TelecomServiceImpl.java b/src/com/android/server/telecom/TelecomServiceImpl.java
index b75c0a6..08d77a0 100644
--- a/src/com/android/server/telecom/TelecomServiceImpl.java
+++ b/src/com/android/server/telecom/TelecomServiceImpl.java
@@ -490,6 +490,18 @@
if (callingUid != Process.SHELL_UID) {
enforceUserHandleMatchesCaller(account.getAccountHandle());
}
+
+ if (TextUtils.isEmpty(account.getGroupId())
+ && mContext.checkCallingOrSelfPermission(MODIFY_PHONE_STATE)
+ != PackageManager.PERMISSION_GRANTED) {
+ Log.w(this, "registerPhoneAccount - attempt to set a"
+ + " group from a non-system caller.");
+ // Not permitted to set group, so null it out.
+ account = new PhoneAccount.Builder(account)
+ .setGroupId(null)
+ .build();
+ }
+
final long token = Binder.clearCallingIdentity();
try {
mPhoneAccountRegistrar.registerPhoneAccount(account);