blob: 862386648edd53e2356d4ff02811e6947f8fe4b7 [file] [log] [blame]
/*
* Copyright (C) 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.server.telecom;
import android.annotation.NonNull;
import android.os.Binder;
import android.os.RemoteException;
import android.telecom.CallDiagnosticService;
import android.telecom.CallDiagnostics;
import android.telecom.Log;
import com.android.internal.telecom.ICallDiagnosticServiceAdapter;
/**
* Adapter class used to provide a path for messages FROM a {@link CallDiagnosticService} back to
* the telecom stack.
*/
public class CallDiagnosticServiceAdapter extends ICallDiagnosticServiceAdapter.Stub {
public interface TelecomAdapter {
void displayDiagnosticMessage(String callId, int messageId, CharSequence message);
void clearDiagnosticMessage(String callId, int messageId);
void sendDeviceToDeviceMessage(String callId, @CallDiagnostics.MessageType int message,
int value);
void overrideDisconnectMessage(String callId, CharSequence message);
}
private final TelecomAdapter mTelecomAdapter;
private final String mOwnerPackageName;
private final String mOwnerPackageAbbreviation;
private final TelecomSystem.SyncRoot mLock;
CallDiagnosticServiceAdapter(@NonNull TelecomAdapter telecomAdapter,
@NonNull String ownerPackageName, @NonNull TelecomSystem.SyncRoot lock) {
mTelecomAdapter = telecomAdapter;
mOwnerPackageName = ownerPackageName;
mOwnerPackageAbbreviation = Log.getPackageAbbreviation(ownerPackageName);
mLock = lock;
}
@Override
public void displayDiagnosticMessage(String callId, int messageId, CharSequence message)
throws RemoteException {
try {
Log.startSession("CDSA.dDM", mOwnerPackageAbbreviation);
long token = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
Log.i(this, "displayDiagnosticMessage; callId=%s, msg=%d/%s", callId, messageId,
message);
mTelecomAdapter.displayDiagnosticMessage(callId, messageId, message);
}
} finally {
Binder.restoreCallingIdentity(token);
}
} finally {
Log.endSession();
}
}
@Override
public void clearDiagnosticMessage(String callId, int messageId) throws RemoteException {
try {
Log.startSession("CDSA.cDM", mOwnerPackageAbbreviation);
long token = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
Log.i(this, "clearDiagnosticMessage; callId=%s, msg=%d", callId, messageId);
mTelecomAdapter.clearDiagnosticMessage(callId, messageId);
}
} finally {
Binder.restoreCallingIdentity(token);
}
} finally {
Log.endSession();
}
}
@Override
public void sendDeviceToDeviceMessage(String callId, @CallDiagnostics.MessageType int message,
int value)
throws RemoteException {
try {
Log.startSession("CDSA.sDTDM", mOwnerPackageAbbreviation);
long token = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
Log.i(this, "sendDeviceToDeviceMessage; callId=%s, msg=%d/%d", callId, message,
value);
mTelecomAdapter.sendDeviceToDeviceMessage(callId, message, value);
}
} finally {
Binder.restoreCallingIdentity(token);
}
} finally {
Log.endSession();
}
}
@Override
public void overrideDisconnectMessage(String callId, CharSequence message)
throws RemoteException {
try {
Log.startSession("CDSA.oDM", mOwnerPackageAbbreviation);
long token = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
Log.i(this, "overrideDisconnectMessage; callId=%s, msg=%s", callId, message);
mTelecomAdapter.overrideDisconnectMessage(callId, message);
}
} finally {
Binder.restoreCallingIdentity(token);
}
} finally {
Log.endSession();
}
}
}