Restructure CarrierMessagingServiceWrapper with better interfaces.

- CarrierMessagingServiceWrapper is now a final class with only
APIs of direct actions on messaging.
- The original abstract parts of the class are now interfaces:
interface CarrierMessagingServiceConnectionCallback
and Runnable callback.
- CarrierMessagingCallbackWrapper is renamed to
CarrierMessagingCallback

Bug: 172087216
Test: build and manual
Change-Id: I1760623543b929a51ce26dc7dcc5f8ebe7fd9732
Merged-In: I1760623543b929a51ce26dc7dcc5f8ebe7fd9732
This commit is contained in:
Malcolm Chen
2020-10-30 15:13:26 -07:00
committed by Xiangyu/Malcolm Chen
parent b8c0727474
commit ac6313bc22

View File

@@ -46,12 +46,13 @@ import java.util.List;
* CarrierMessagingService. * CarrierMessagingService.
* @hide * @hide
*/ */
public abstract class CarrierMessagingServiceWrapper { public final class CarrierMessagingServiceWrapper {
// Populated by bindToCarrierMessagingService. bindToCarrierMessagingService must complete // Populated by bindToCarrierMessagingService. bindToCarrierMessagingService must complete
// prior to calling disposeConnection so that mCarrierMessagingServiceConnection is initialized. // prior to calling disposeConnection so that mCarrierMessagingServiceConnection is initialized.
private volatile CarrierMessagingServiceConnection mCarrierMessagingServiceConnection; private volatile CarrierMessagingServiceConnection mCarrierMessagingServiceConnection;
private volatile ICarrierMessagingService mICarrierMessagingService; private volatile ICarrierMessagingService mICarrierMessagingService;
private Runnable mOnServiceReadyCallback;
/** /**
* Binds to the carrier messaging service under package {@code carrierPackageName}. This method * Binds to the carrier messaging service under package {@code carrierPackageName}. This method
@@ -63,12 +64,14 @@ public abstract class CarrierMessagingServiceWrapper {
* @hide * @hide
*/ */
public boolean bindToCarrierMessagingService(@NonNull Context context, public boolean bindToCarrierMessagingService(@NonNull Context context,
@NonNull String carrierPackageName) { @NonNull String carrierPackageName,
@NonNull Runnable onServiceReadyCallback) {
Preconditions.checkState(mCarrierMessagingServiceConnection == null); Preconditions.checkState(mCarrierMessagingServiceConnection == null);
Intent intent = new Intent(CarrierMessagingService.SERVICE_INTERFACE); Intent intent = new Intent(CarrierMessagingService.SERVICE_INTERFACE);
intent.setPackage(carrierPackageName); intent.setPackage(carrierPackageName);
mCarrierMessagingServiceConnection = new CarrierMessagingServiceConnection(); mCarrierMessagingServiceConnection = new CarrierMessagingServiceConnection();
mOnServiceReadyCallback = onServiceReadyCallback;
return context.bindService(intent, mCarrierMessagingServiceConnection, return context.bindService(intent, mCarrierMessagingServiceConnection,
Context.BIND_AUTO_CREATE); Context.BIND_AUTO_CREATE);
} }
@@ -83,14 +86,9 @@ public abstract class CarrierMessagingServiceWrapper {
Preconditions.checkNotNull(mCarrierMessagingServiceConnection); Preconditions.checkNotNull(mCarrierMessagingServiceConnection);
context.unbindService(mCarrierMessagingServiceConnection); context.unbindService(mCarrierMessagingServiceConnection);
mCarrierMessagingServiceConnection = null; mCarrierMessagingServiceConnection = null;
mOnServiceReadyCallback = null;
} }
/**
* Implemented by subclasses to use the carrier messaging service once it is ready.
* @hide
*/
public abstract void onServiceReady();
/** /**
* Called when connection with service is established. * Called when connection with service is established.
* *
@@ -98,7 +96,7 @@ public abstract class CarrierMessagingServiceWrapper {
*/ */
private void onServiceReady(ICarrierMessagingService carrierMessagingService) { private void onServiceReady(ICarrierMessagingService carrierMessagingService) {
mICarrierMessagingService = carrierMessagingService; mICarrierMessagingService = carrierMessagingService;
onServiceReady(); if (mOnServiceReadyCallback != null) mOnServiceReadyCallback.run();
} }
/** /**
@@ -113,11 +111,11 @@ public abstract class CarrierMessagingServiceWrapper {
* @hide * @hide
*/ */
public void filterSms(@NonNull MessagePdu pdu, @NonNull String format, int destPort, public void filterSms(@NonNull MessagePdu pdu, @NonNull String format, int destPort,
int subId, @NonNull final CarrierMessagingCallbackWrapper callback) { int subId, @NonNull final CarrierMessagingCallback callback) {
if (mICarrierMessagingService != null) { if (mICarrierMessagingService != null) {
try { try {
mICarrierMessagingService.filterSms(pdu, format, destPort, subId, mICarrierMessagingService.filterSms(pdu, format, destPort, subId,
new CarrierMessagingCallbackWrapperInternal(callback)); new CarrierMessagingCallbackInternal(callback));
} catch (RemoteException e) { } catch (RemoteException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
@@ -137,11 +135,11 @@ public abstract class CarrierMessagingServiceWrapper {
* @hide * @hide
*/ */
public void sendTextSms(@NonNull String text, int subId, @NonNull String destAddress, public void sendTextSms(@NonNull String text, int subId, @NonNull String destAddress,
int sendSmsFlag, @NonNull final CarrierMessagingCallbackWrapper callback) { int sendSmsFlag, @NonNull final CarrierMessagingCallback callback) {
if (mICarrierMessagingService != null) { if (mICarrierMessagingService != null) {
try { try {
mICarrierMessagingService.sendTextSms(text, subId, destAddress, sendSmsFlag, mICarrierMessagingService.sendTextSms(text, subId, destAddress, sendSmsFlag,
new CarrierMessagingCallbackWrapperInternal(callback)); new CarrierMessagingCallbackInternal(callback));
} catch (RemoteException e) { } catch (RemoteException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
@@ -163,11 +161,11 @@ public abstract class CarrierMessagingServiceWrapper {
*/ */
public void sendDataSms(@NonNull byte[] data, int subId, @NonNull String destAddress, public void sendDataSms(@NonNull byte[] data, int subId, @NonNull String destAddress,
int destPort, int sendSmsFlag, int destPort, int sendSmsFlag,
@NonNull final CarrierMessagingCallbackWrapper callback) { @NonNull final CarrierMessagingCallback callback) {
if (mICarrierMessagingService != null) { if (mICarrierMessagingService != null) {
try { try {
mICarrierMessagingService.sendDataSms(data, subId, destAddress, destPort, mICarrierMessagingService.sendDataSms(data, subId, destAddress, destPort,
sendSmsFlag, new CarrierMessagingCallbackWrapperInternal(callback)); sendSmsFlag, new CarrierMessagingCallbackInternal(callback));
} catch (RemoteException e) { } catch (RemoteException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
@@ -188,11 +186,11 @@ public abstract class CarrierMessagingServiceWrapper {
*/ */
public void sendMultipartTextSms(@NonNull List<String> parts, int subId, public void sendMultipartTextSms(@NonNull List<String> parts, int subId,
@NonNull String destAddress, int sendSmsFlag, @NonNull String destAddress, int sendSmsFlag,
@NonNull final CarrierMessagingCallbackWrapper callback) { @NonNull final CarrierMessagingCallback callback) {
if (mICarrierMessagingService != null) { if (mICarrierMessagingService != null) {
try { try {
mICarrierMessagingService.sendMultipartTextSms(parts, subId, destAddress, mICarrierMessagingService.sendMultipartTextSms(parts, subId, destAddress,
sendSmsFlag, new CarrierMessagingCallbackWrapperInternal(callback)); sendSmsFlag, new CarrierMessagingCallbackInternal(callback));
} catch (RemoteException e) { } catch (RemoteException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
@@ -212,11 +210,11 @@ public abstract class CarrierMessagingServiceWrapper {
* @hide * @hide
*/ */
public void sendMms(@NonNull Uri pduUri, int subId, @NonNull Uri location, public void sendMms(@NonNull Uri pduUri, int subId, @NonNull Uri location,
@NonNull final CarrierMessagingCallbackWrapper callback) { @NonNull final CarrierMessagingCallback callback) {
if (mICarrierMessagingService != null) { if (mICarrierMessagingService != null) {
try { try {
mICarrierMessagingService.sendMms(pduUri, subId, location, mICarrierMessagingService.sendMms(pduUri, subId, location,
new CarrierMessagingCallbackWrapperInternal(callback)); new CarrierMessagingCallbackInternal(callback));
} catch (RemoteException e) { } catch (RemoteException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
@@ -235,11 +233,11 @@ public abstract class CarrierMessagingServiceWrapper {
* @hide * @hide
*/ */
public void downloadMms(@NonNull Uri pduUri, int subId, @NonNull Uri location, public void downloadMms(@NonNull Uri pduUri, int subId, @NonNull Uri location,
@NonNull final CarrierMessagingCallbackWrapper callback) { @NonNull final CarrierMessagingCallback callback) {
if (mICarrierMessagingService != null) { if (mICarrierMessagingService != null) {
try { try {
mICarrierMessagingService.downloadMms(pduUri, subId, location, mICarrierMessagingService.downloadMms(pduUri, subId, location,
new CarrierMessagingCallbackWrapperInternal(callback)); new CarrierMessagingCallbackInternal(callback));
} catch (RemoteException e) { } catch (RemoteException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
@@ -265,7 +263,7 @@ public abstract class CarrierMessagingServiceWrapper {
* {@link CarrierMessagingServiceWrapper}. * {@link CarrierMessagingServiceWrapper}.
* @hide * @hide
*/ */
public abstract static class CarrierMessagingCallbackWrapper { public interface CarrierMessagingCallback {
/** /**
* Response callback for {@link CarrierMessagingServiceWrapper#filterSms}. * Response callback for {@link CarrierMessagingServiceWrapper#filterSms}.
@@ -277,7 +275,7 @@ public abstract class CarrierMessagingServiceWrapper {
* {@see CarrierMessagingService#onReceiveTextSms}. * {@see CarrierMessagingService#onReceiveTextSms}.
* @hide * @hide
*/ */
public void onFilterComplete(int result) { default void onFilterComplete(int result) {
} }
@@ -291,7 +289,7 @@ public abstract class CarrierMessagingServiceWrapper {
* only if result is {@link CarrierMessagingService#SEND_STATUS_OK}. * only if result is {@link CarrierMessagingService#SEND_STATUS_OK}.
* @hide * @hide
*/ */
public void onSendSmsComplete(int result, int messageRef) { default void onSendSmsComplete(int result, int messageRef) {
} }
@@ -305,7 +303,7 @@ public abstract class CarrierMessagingServiceWrapper {
* {@link CarrierMessagingService#SEND_STATUS_OK}. * {@link CarrierMessagingService#SEND_STATUS_OK}.
* @hide * @hide
*/ */
public void onSendMultipartSmsComplete(int result, @Nullable int[] messageRefs) { default void onSendMultipartSmsComplete(int result, @Nullable int[] messageRefs) {
} }
@@ -319,7 +317,7 @@ public abstract class CarrierMessagingServiceWrapper {
* {@link CarrierMessagingService#SEND_STATUS_OK}. * {@link CarrierMessagingService#SEND_STATUS_OK}.
* @hide * @hide
*/ */
public void onSendMmsComplete(int result, @Nullable byte[] sendConfPdu) { default void onSendMmsComplete(int result, @Nullable byte[] sendConfPdu) {
} }
@@ -330,43 +328,43 @@ public abstract class CarrierMessagingServiceWrapper {
* and {@link CarrierMessagingService#SEND_STATUS_ERROR}. * and {@link CarrierMessagingService#SEND_STATUS_ERROR}.
* @hide * @hide
*/ */
public void onDownloadMmsComplete(int result) { default void onDownloadMmsComplete(int result) {
} }
} }
private final class CarrierMessagingCallbackWrapperInternal private final class CarrierMessagingCallbackInternal
extends ICarrierMessagingCallback.Stub { extends ICarrierMessagingCallback.Stub {
CarrierMessagingCallbackWrapper mCarrierMessagingCallbackWrapper; CarrierMessagingCallback mCarrierMessagingCallback;
CarrierMessagingCallbackWrapperInternal(CarrierMessagingCallbackWrapper callback) { CarrierMessagingCallbackInternal(CarrierMessagingCallback callback) {
mCarrierMessagingCallbackWrapper = callback; mCarrierMessagingCallback = callback;
} }
@Override @Override
public void onFilterComplete(int result) throws RemoteException { public void onFilterComplete(int result) throws RemoteException {
mCarrierMessagingCallbackWrapper.onFilterComplete(result); mCarrierMessagingCallback.onFilterComplete(result);
} }
@Override @Override
public void onSendSmsComplete(int result, int messageRef) throws RemoteException { public void onSendSmsComplete(int result, int messageRef) throws RemoteException {
mCarrierMessagingCallbackWrapper.onSendSmsComplete(result, messageRef); mCarrierMessagingCallback.onSendSmsComplete(result, messageRef);
} }
@Override @Override
public void onSendMultipartSmsComplete(int result, int[] messageRefs) public void onSendMultipartSmsComplete(int result, int[] messageRefs)
throws RemoteException { throws RemoteException {
mCarrierMessagingCallbackWrapper.onSendMultipartSmsComplete(result, messageRefs); mCarrierMessagingCallback.onSendMultipartSmsComplete(result, messageRefs);
} }
@Override @Override
public void onSendMmsComplete(int result, byte[] sendConfPdu) throws RemoteException { public void onSendMmsComplete(int result, byte[] sendConfPdu) throws RemoteException {
mCarrierMessagingCallbackWrapper.onSendMmsComplete(result, sendConfPdu); mCarrierMessagingCallback.onSendMmsComplete(result, sendConfPdu);
} }
@Override @Override
public void onDownloadMmsComplete(int result) throws RemoteException { public void onDownloadMmsComplete(int result) throws RemoteException {
mCarrierMessagingCallbackWrapper.onDownloadMmsComplete(result); mCarrierMessagingCallback.onDownloadMmsComplete(result);
} }
} }
} }