Merge "Remove sleep in test app." into udc-dev
diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml
index 9226599..75d3416 100644
--- a/res/values-as/strings.xml
+++ b/res/values-as/strings.xml
@@ -108,7 +108,7 @@
<string name="phone_settings_call_blocking_txt" msgid="7311523114822507178">"কল অৱৰোধ"</string>
<string name="phone_settings_number_not_in_contact_txt" msgid="2602249106007265757">"আপোনাৰ সর্ম্পকসূচীত নথকা"</string>
<string name="phone_settings_number_not_in_contact_summary_txt" msgid="963327038085718969">"আপোনাৰ সর্ম্পকসূচীত নথকা নম্বৰ অৱৰোধ কৰক"</string>
- <string name="phone_settings_private_num_txt" msgid="6339272760338475619">"ব্য়ক্তিগত"</string>
+ <string name="phone_settings_private_num_txt" msgid="6339272760338475619">"ব্যক্তিগত"</string>
<string name="phone_settings_private_num_summary_txt" msgid="6755758240544021037">"যিসকল কল কৰোঁতাই তেওঁলোকৰ নম্বৰ প্ৰকাশ নকৰে তেওঁলোকক অৱৰোধ কৰক"</string>
<string name="phone_settings_payphone_txt" msgid="5003987966052543965">"পে\'ফ\'ন"</string>
<string name="phone_settings_payphone_summary_txt" msgid="3936631076065563665">"পে\'ফ\'নৰ পৰা অহা কল অৱৰোধ কৰক"</string>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index 7c07654..29fdc4a 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -75,10 +75,10 @@
<string name="blocked_numbers_butter_bar_title" msgid="582982373755950791">"Тыйым уақытша алынды"</string>
<string name="blocked_numbers_butter_bar_body" msgid="1261213114919301485">"Төтенше жағдай нөмірін терген немесе мәтіндік хабар жіберген соң, төтенше жағдай қызметтері сізге хабарласа алуы үшін тыйым алынады."</string>
<string name="blocked_numbers_butter_bar_button" msgid="2704456308072489793">"Қазір қайта қосу"</string>
- <string name="blocked_numbers_number_blocked_message" msgid="4314736791180919167">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> бөгелген"</string>
+ <string name="blocked_numbers_number_blocked_message" msgid="4314736791180919167">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> блокталған"</string>
<string name="blocked_numbers_number_unblocked_message" msgid="2933071624674945601">"<xliff:g id="UNBLOCKED_NUMBER">%1$s</xliff:g> бөгеуден шығарылды"</string>
<string name="blocked_numbers_block_emergency_number_message" msgid="4198550501500893890">"Жедел қызмет нөмірін бөгеу мүмкін емес."</string>
- <string name="blocked_numbers_number_already_blocked_message" msgid="2301270825735665458">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> бұрыннан бөгелген."</string>
+ <string name="blocked_numbers_number_already_blocked_message" msgid="2301270825735665458">"<xliff:g id="BLOCKED_NUMBER">%1$s</xliff:g> бұрыннан блокталған."</string>
<string name="toast_personal_call_msg" msgid="5817631570381795610">"Қоңырау шалу үшін жеке нөмір тергішті пайдалану"</string>
<string name="notification_incoming_call" msgid="1233481138362230894">"<xliff:g id="CALL_VIA">%1$s</xliff:g> қоңырауы: <xliff:g id="CALL_FROM">%2$s</xliff:g>"</string>
<string name="notification_incoming_video_call" msgid="5795968314037063900">"<xliff:g id="CALL_VIA">%1$s</xliff:g> бейне қоңырауы: <xliff:g id="CALL_FROM">%2$s</xliff:g>"</string>
diff --git a/src/com/android/server/telecom/Call.java b/src/com/android/server/telecom/Call.java
index e2d8489..743156e 100644
--- a/src/com/android/server/telecom/Call.java
+++ b/src/com/android/server/telecom/Call.java
@@ -4575,7 +4575,7 @@
throw new UnsupportedOperationException(
"Can't streaming call created by non voip apps");
}
-
+ Log.addEvent(this, LogUtils.Events.START_STREAMING);
synchronized (mLock) {
if (mIsStreaming) {
// ignore
@@ -4595,7 +4595,7 @@
// ignore
return;
}
-
+ Log.addEvent(this, LogUtils.Events.STOP_STREAMING);
mIsStreaming = false;
for (Listener listener : mListeners) {
listener.onCallStreamingStateChanged(this, false /** isStreaming */);
diff --git a/src/com/android/server/telecom/CallAudioManager.java b/src/com/android/server/telecom/CallAudioManager.java
index 8cac314..38e6b00 100644
--- a/src/com/android/server/telecom/CallAudioManager.java
+++ b/src/com/android/server/telecom/CallAudioManager.java
@@ -146,6 +146,9 @@
@Override
public void onCallRemoved(Call call) {
+ if (mStreamingCall == call) {
+ mStreamingCall = null;
+ }
if (shouldIgnoreCallForAudio(call)) {
return; // Don't do audio handling for calls in a conference, or external calls.
}
@@ -238,7 +241,7 @@
makeArgsForModeStateMachine());
} else {
Log.w(LOG_TAG, "Unexpected streaming call request for call %s while call "
- + "s is streaming.", call.getId(), mStreamingCall.getId());
+ + "%s is streaming.", call.getId(), mStreamingCall.getId());
}
} else {
if (mStreamingCall == call) {
diff --git a/src/com/android/server/telecom/CallAudioModeStateMachine.java b/src/com/android/server/telecom/CallAudioModeStateMachine.java
index 3ced36d..9ad9094 100644
--- a/src/com/android/server/telecom/CallAudioModeStateMachine.java
+++ b/src/com/android/server/telecom/CallAudioModeStateMachine.java
@@ -665,7 +665,9 @@
@Override
public void enter() {
Log.i(LOG_TAG, "Audio focus entering streaming state");
- mAudioManager.setMode(AudioManager.MODE_CALL_REDIRECT);
+ mLocalLog.log("Enter Streaming");
+ mLocalLog.log("Mode MODE_COMMUNICATION_REDIRECT");
+ mAudioManager.setMode(AudioManager.MODE_COMMUNICATION_REDIRECT);
mMostRecentMode = AudioManager.MODE_NORMAL;
mCallAudioManager.setCallAudioRouteFocusState(CallAudioRouteStateMachine.ACTIVE_FOCUS);
mCallAudioManager.getCallAudioRouteStateMachine().sendMessageWithSessionInfo(
@@ -685,7 +687,8 @@
MessageArgs args = (MessageArgs) msg.obj;
switch (msg.what) {
case NO_MORE_ACTIVE_OR_DIALING_CALLS:
- // Do nothing.
+ // Switch to either ringing, holding, or inactive
+ transitionTo(calculateProperStateFromArgs(args));
return HANDLED;
case NO_MORE_RINGING_CALLS:
// Do nothing.
diff --git a/src/com/android/server/telecom/CallStreamingController.java b/src/com/android/server/telecom/CallStreamingController.java
index 31b2235..6276a7d 100644
--- a/src/com/android/server/telecom/CallStreamingController.java
+++ b/src/com/android/server/telecom/CallStreamingController.java
@@ -36,7 +36,7 @@
import android.telecom.CallException;
import android.telecom.CallStreamingService;
import android.telecom.StreamingCall;
-import android.util.Log;
+import android.telecom.Log;
import com.android.internal.telecom.ICallStreamingService;
import com.android.server.telecom.voip.VoipCallTransaction;
@@ -65,6 +65,9 @@
private void onConnectedInternal(Call call, TransactionalServiceWrapper wrapper,
IBinder service) throws RemoteException {
synchronized (mLock) {
+ Log.i(this, "onConnectedInternal: callid=%s", call.getId());
+ Bundle extras = new Bundle();
+ extras.putString(StreamingCall.EXTRA_CALL_ID, call.getId());
mStreamingCall = call;
mTransactionalServiceWrapper = wrapper;
mService = ICallStreamingService.Stub.asInterface(service);
@@ -74,7 +77,7 @@
mService.onCallStreamingStarted(new StreamingCall(
mTransactionalServiceWrapper.getComponentName(),
mStreamingCall.getCallerDisplayName(),
- mStreamingCall.getContactUri(), new Bundle()));
+ mStreamingCall.getHandle(), extras));
mIsStreaming = true;
}
}
@@ -99,7 +102,6 @@
}
public static class QueryCallStreamingTransaction extends VoipCallTransaction {
- private static final String TAG = QueryCallStreamingTransaction.class.getSimpleName();
private final CallsManager mCallsManager;
public QueryCallStreamingTransaction(CallsManager callsManager) {
@@ -109,7 +111,7 @@
@Override
public CompletableFuture<VoipCallTransactionResult> processTransaction(Void v) {
- Log.d(TAG, "processTransaction");
+ Log.i(this, "processTransaction");
CompletableFuture<VoipCallTransactionResult> future = new CompletableFuture<>();
if (mCallsManager.getCallStreamingController().isStreaming()) {
@@ -126,8 +128,6 @@
}
public static class AudioInterceptionTransaction extends VoipCallTransaction {
- private static final String TAG = AudioInterceptionTransaction.class.getSimpleName();
-
private Call mCall;
private boolean mEnterInterception;
@@ -140,7 +140,7 @@
@Override
public CompletableFuture<VoipCallTransactionResult> processTransaction(Void v) {
- Log.d(TAG, "processTransaction");
+ Log.d(this, "processTransaction");
CompletableFuture<VoipCallTransactionResult> future = new CompletableFuture<>();
if (mEnterInterception) {
@@ -160,7 +160,6 @@
}
public class StreamingServiceTransaction extends VoipCallTransaction {
- private static final String TAG = "StreamingServiceTransaction";
public static final String MESSAGE = "STREAMING_FAILED_NO_SENDER";
private final TransactionalServiceWrapper mWrapper;
private final Context mContext;
@@ -179,13 +178,13 @@
@SuppressLint("LongLogTag")
@Override
public CompletionStage<VoipCallTransactionResult> processTransaction(Void v) {
- Log.d(TAG, "processTransaction");
+ Log.d(this, "processTransaction");
CompletableFuture<VoipCallTransactionResult> future = new CompletableFuture<>();
RoleManager roleManager = mContext.getSystemService(RoleManager.class);
PackageManager packageManager = mContext.getPackageManager();
if (roleManager == null || packageManager == null) {
- Log.e(TAG, "Can't find system service");
+ Log.w(this, "processTransaction: Can't find system service");
future.complete(new VoipCallTransactionResult(
VoipCallTransactionResult.RESULT_FAILED, MESSAGE));
return future;
@@ -194,7 +193,7 @@
List<String> holders = roleManager.getRoleHoldersAsUser(
RoleManager.ROLE_SYSTEM_CALL_STREAMING, mUserHandle);
if (holders.isEmpty()) {
- Log.e(TAG, "Can't find streaming app");
+ Log.w(this, "processTransaction: Can't find streaming app");
future.complete(new VoipCallTransactionResult(
VoipCallTransactionResult.RESULT_FAILED, MESSAGE));
return future;
@@ -205,7 +204,7 @@
List<ResolveInfo> infos = packageManager.queryIntentServicesAsUser(serviceIntent,
PackageManager.GET_META_DATA, mUserHandle);
if (infos.isEmpty()) {
- Log.e(TAG, "Can't find streaming service");
+ Log.w(this, "processTransaction: Can't find streaming service");
future.complete(new VoipCallTransactionResult(
VoipCallTransactionResult.RESULT_FAILED, MESSAGE));
return future;
@@ -215,7 +214,7 @@
if (serviceInfo.permission == null || !serviceInfo.permission.equals(
Manifest.permission.BIND_CALL_STREAMING_SERVICE)) {
- android.telecom.Log.w(TAG, "Must require BIND_CALL_STREAMING_SERVICE: " +
+ Log.w(this, "Must require BIND_CALL_STREAMING_SERVICE: " +
serviceInfo.packageName);
future.complete(new VoipCallTransactionResult(
VoipCallTransactionResult.RESULT_FAILED, MESSAGE));
@@ -228,7 +227,7 @@
if (!mContext.bindServiceAsUser(intent, mConnection, Context.BIND_AUTO_CREATE
| Context.BIND_FOREGROUND_SERVICE
| Context.BIND_SCHEDULE_LIKE_TOP_APP, mUserHandle)) {
- Log.e(TAG, "Can't bind to streaming service");
+ Log.w(this, "Can't bind to streaming service");
future.complete(new VoipCallTransactionResult(
VoipCallTransactionResult.RESULT_FAILED,
"STREAMING_FAILED_SENDER_BINDING_ERROR"));
@@ -243,8 +242,6 @@
}
public class UnbindStreamingServiceTransaction extends VoipCallTransaction {
- private static final String TAG = "UnbindStreamingServiceTransaction";
-
public UnbindStreamingServiceTransaction() {
super(mTelecomLock);
}
@@ -252,7 +249,7 @@
@SuppressLint("LongLogTag")
@Override
public CompletionStage<VoipCallTransactionResult> processTransaction(Void v) {
- Log.d(TAG, "processTransaction");
+ Log.d(this, "processTransaction");
CompletableFuture<VoipCallTransactionResult> future = new CompletableFuture<>();
resetController();
@@ -285,6 +282,7 @@
StreamingCall.STATE_HOLDING);
case CallState.DISCONNECTING:
case CallState.DISCONNECTED:
+ Log.addEvent(call, LogUtils.Events.STOP_STREAMING);
transaction = new CallStreamingStateChangeTransaction(
StreamingCall.STATE_DISCONNECTED);
default:
@@ -300,8 +298,8 @@
@Override
public void onError(CallException exception) {
- Log.e(String.valueOf(this), "Exception when set call "
- + "streaming state to streaming app: " + exception);
+ Log.e(this, exception, "Exception when set call "
+ + "streaming state to streaming app");
}
});
}
@@ -348,6 +346,7 @@
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
try {
+ Log.i(this, "onServiceConnected: " + name);
onConnectedInternal(mCall, mWrapper, service);
mFuture.complete(new VoipCallTransactionResult(
VoipCallTransactionResult.RESULT_SUCCEED, null));
@@ -380,7 +379,7 @@
mService.onCallStreamingStopped();
}
} catch (RemoteException e) {
- Log.w(String.valueOf(this), "Exception when stop call streaming:" + e);
+ Log.e(this, e, "Exception when stop call streaming");
}
resetController();
if (!mFuture.isDone()) {
diff --git a/src/com/android/server/telecom/LogUtils.java b/src/com/android/server/telecom/LogUtils.java
index 8ce5dc3..4e7546f 100644
--- a/src/com/android/server/telecom/LogUtils.java
+++ b/src/com/android/server/telecom/LogUtils.java
@@ -225,6 +225,8 @@
public static final String FLASH_NOTIFICATION_STOP = "FLASH_NOTIFICATION_STOP";
public static final String GAINED_FGS_DELEGATION = "GAINED_FGS_DELEGATION";
public static final String LOST_FGS_DELEGATION = "LOST_FGS_DELEGATION";
+ public static final String START_STREAMING = "START_STREAMING";
+ public static final String STOP_STREAMING = "STOP_STREAMING";
public static class Timings {
public static final String ACCEPT_TIMING = "accept";
diff --git a/src/com/android/server/telecom/TransactionalServiceWrapper.java b/src/com/android/server/telecom/TransactionalServiceWrapper.java
index 1e6403e..d83e551 100644
--- a/src/com/android/server/telecom/TransactionalServiceWrapper.java
+++ b/src/com/android/server/telecom/TransactionalServiceWrapper.java
@@ -425,6 +425,15 @@
@Override
public void onError(CallException exception) {
+ if (isAnswerRequest) {
+ // This also sends the signal to untrack from TSW and the client_TSW
+ removeCallFromCallsManager(call,
+ new DisconnectCause(DisconnectCause.REJECTED,
+ "client rejected to answer the call;"
+ + " force disconnecting"));
+ } else {
+ mCallsManager.markCallAsOnHold(call);
+ }
maybeResetForegroundCall(foregroundCallBeforeSwap, wasActive);
}
});
diff --git a/src/com/android/server/telecom/voip/CallEventCallbackAckTransaction.java b/src/com/android/server/telecom/voip/CallEventCallbackAckTransaction.java
index 8b4ffed..93d9836 100644
--- a/src/com/android/server/telecom/voip/CallEventCallbackAckTransaction.java
+++ b/src/com/android/server/telecom/voip/CallEventCallbackAckTransaction.java
@@ -128,6 +128,8 @@
boolean success = latch.await(VoipCallTransaction.TIMEOUT_LIMIT, TimeUnit.MILLISECONDS);
if (!success) {
// client send onError and failed to complete transaction
+ Log.i(TAG, String.format("CallEventCallbackAckTransaction:"
+ + " client failed to complete the [%s] transaction", mAction));
return CompletableFuture.completedFuture(TRANSACTION_FAILED);
} else {
// success
diff --git a/src/com/android/server/telecom/voip/TransactionManager.java b/src/com/android/server/telecom/voip/TransactionManager.java
index 98faf3d..773dfb8 100644
--- a/src/com/android/server/telecom/voip/TransactionManager.java
+++ b/src/com/android/server/telecom/voip/TransactionManager.java
@@ -26,6 +26,8 @@
import com.android.internal.annotations.VisibleForTesting;
import java.util.ArrayDeque;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Queue;
public class TransactionManager {
@@ -63,30 +65,31 @@
OutcomeReceiver<VoipCallTransactionResult, CallException> receiver) {
synchronized (sLock) {
mTransactions.add(transaction);
- transaction.setCompleteListener(new TransactionCompleteListener() {
- @Override
- public void onTransactionCompleted(VoipCallTransactionResult result,
- String transactionName){
- Log.i(TAG, String.format("transaction completed: with result=[%d]",
- result.getResult()));
- if (result.getResult() == TelecomManager.TELECOM_TRANSACTION_SUCCESS) {
- receiver.onResult(result);
- } else {
- receiver.onError(
- new CallException(result.getMessage(),
- result.getResult()));
- }
- finishTransaction();
- }
-
- @Override
- public void onTransactionTimeout(String transactionName){
- receiver.onError(new CallException(transactionName + " timeout",
- CODE_OPERATION_TIMED_OUT));
- finishTransaction();
- }
- });
}
+ transaction.setCompleteListener(new TransactionCompleteListener() {
+ @Override
+ public void onTransactionCompleted(VoipCallTransactionResult result,
+ String transactionName){
+ Log.i(TAG, String.format("transaction completed: with result=[%d]",
+ result.getResult()));
+ if (result.getResult() == TelecomManager.TELECOM_TRANSACTION_SUCCESS) {
+ receiver.onResult(result);
+ } else {
+ receiver.onError(
+ new CallException(result.getMessage(),
+ result.getResult()));
+ }
+ finishTransaction();
+ }
+
+ @Override
+ public void onTransactionTimeout(String transactionName){
+ receiver.onError(new CallException(transactionName + " timeout",
+ CODE_OPERATION_TIMED_OUT));
+ finishTransaction();
+ }
+ });
+
startTransactions();
}
@@ -102,8 +105,8 @@
return;
}
mCurrentTransaction = mTransactions.poll();
- mCurrentTransaction.start();
}
+ mCurrentTransaction.start();
}
private void finishTransaction() {
@@ -115,10 +118,12 @@
@VisibleForTesting
public void clear() {
+ List<VoipCallTransaction> pendingTransactions;
synchronized (sLock) {
- for (VoipCallTransaction transaction : mTransactions) {
- transaction.finish();
- }
+ pendingTransactions = new ArrayList<>(mTransactions);
+ }
+ for (VoipCallTransaction transaction : pendingTransactions) {
+ transaction.finish();
}
}
}
diff --git a/src/com/android/server/telecom/voip/VoipCallMonitor.java b/src/com/android/server/telecom/voip/VoipCallMonitor.java
index d0304a9..2a81051 100644
--- a/src/com/android/server/telecom/voip/VoipCallMonitor.java
+++ b/src/com/android/server/telecom/voip/VoipCallMonitor.java
@@ -207,8 +207,10 @@
synchronized (mLock) {
Log.i(this, "stopFGSDelegation of handle %s", handle);
Set<Call> calls = mPhoneAccountHandleListMap.get(handle);
- for (Call call : calls) {
- stopMonitorWorks(call);
+ if (calls != null) {
+ for (Call call : calls) {
+ stopMonitorWorks(call);
+ }
}
mPhoneAccountHandleListMap.remove(handle);
diff --git a/tests/src/com/android/server/telecom/tests/CallAudioModeStateMachineTest.java b/tests/src/com/android/server/telecom/tests/CallAudioModeStateMachineTest.java
index 0f38ca5..d0a1d8b 100644
--- a/tests/src/com/android/server/telecom/tests/CallAudioModeStateMachineTest.java
+++ b/tests/src/com/android/server/telecom/tests/CallAudioModeStateMachineTest.java
@@ -131,7 +131,7 @@
assertEquals(CallAudioModeStateMachine.STREAMING_STATE_NAME, sm.getCurrentStateName());
verify(mAudioManager, never()).requestAudioFocusForCall(anyInt(), anyInt());
- verify(mAudioManager).setMode(eq(AudioManager.MODE_CALL_REDIRECT));
+ verify(mAudioManager).setMode(eq(AudioManager.MODE_COMMUNICATION_REDIRECT));
}
@SmallTest