Merge "Do not use hidden API ParcelableException"

This commit is contained in:
Meng Wang
2019-11-05 18:12:37 +00:00
committed by Gerrit Code Review
2 changed files with 21 additions and 8 deletions

View File

@@ -16,7 +16,6 @@
package android.telephony; package android.telephony;
import android.os.ParcelableException;
import android.telephony.CellInfo; import android.telephony.CellInfo;
import java.util.List; import java.util.List;
@@ -28,5 +27,5 @@ import java.util.List;
oneway interface ICellInfoCallback oneway interface ICellInfoCallback
{ {
void onCellInfo(in List<CellInfo> state); void onCellInfo(in List<CellInfo> state);
void onError(in int errorCode, in ParcelableException detail); void onError(in int errorCode, in String exceptionName, in String message);
} }

View File

@@ -70,7 +70,6 @@ import android.telephony.Annotation.NetworkType;
import android.telephony.Annotation.RadioPowerState; import android.telephony.Annotation.RadioPowerState;
import android.telephony.Annotation.SimActivationState; import android.telephony.Annotation.SimActivationState;
import android.telephony.VisualVoicemailService.VisualVoicemailTask; import android.telephony.VisualVoicemailService.VisualVoicemailTask;
import android.telephony.data.ApnSetting;
import android.telephony.emergency.EmergencyNumber; import android.telephony.emergency.EmergencyNumber;
import android.telephony.emergency.EmergencyNumber.EmergencyServiceCategories; import android.telephony.emergency.EmergencyNumber.EmergencyServiceCategories;
import android.telephony.ims.ImsMmTelManager; import android.telephony.ims.ImsMmTelManager;
@@ -5490,19 +5489,20 @@ public class TelephonyManager {
telephony.requestCellInfoUpdate( telephony.requestCellInfoUpdate(
getSubId(), getSubId(),
new ICellInfoCallback.Stub() { new ICellInfoCallback.Stub() {
@Override
public void onCellInfo(List<CellInfo> cellInfo) { public void onCellInfo(List<CellInfo> cellInfo) {
Binder.withCleanCallingIdentity(() -> Binder.withCleanCallingIdentity(() ->
executor.execute(() -> callback.onCellInfo(cellInfo))); executor.execute(() -> callback.onCellInfo(cellInfo)));
} }
public void onError(int errorCode, android.os.ParcelableException detail) { @Override
public void onError(int errorCode, String exceptionName, String message) {
Binder.withCleanCallingIdentity(() -> Binder.withCleanCallingIdentity(() ->
executor.execute(() -> callback.onError( executor.execute(() -> callback.onError(
errorCode, errorCode,
detail == null ? null : detail.getCause()))); createThrowableByClassName(exceptionName, message))));
} }
}, getOpPackageName()); }, getOpPackageName());
} catch (RemoteException ex) { } catch (RemoteException ex) {
} }
} }
@@ -5531,22 +5531,36 @@ public class TelephonyManager {
telephony.requestCellInfoUpdateWithWorkSource( telephony.requestCellInfoUpdateWithWorkSource(
getSubId(), getSubId(),
new ICellInfoCallback.Stub() { new ICellInfoCallback.Stub() {
@Override
public void onCellInfo(List<CellInfo> cellInfo) { public void onCellInfo(List<CellInfo> cellInfo) {
Binder.withCleanCallingIdentity(() -> Binder.withCleanCallingIdentity(() ->
executor.execute(() -> callback.onCellInfo(cellInfo))); executor.execute(() -> callback.onCellInfo(cellInfo)));
} }
public void onError(int errorCode, android.os.ParcelableException detail) { @Override
public void onError(int errorCode, String exceptionName, String message) {
Binder.withCleanCallingIdentity(() -> Binder.withCleanCallingIdentity(() ->
executor.execute(() -> callback.onError( executor.execute(() -> callback.onError(
errorCode, errorCode,
detail == null ? null : detail.getCause()))); createThrowableByClassName(exceptionName, message))));
} }
}, getOpPackageName(), workSource); }, getOpPackageName(), workSource);
} catch (RemoteException ex) { } catch (RemoteException ex) {
} }
} }
private static Throwable createThrowableByClassName(String className, String message) {
if (className == null) {
return null;
}
try {
Class<?> c = Class.forName(className);
return (Throwable) c.getConstructor(String.class).newInstance(message);
} catch (ReflectiveOperationException | ClassCastException e) {
}
return new RuntimeException(className + ": " + message);
}
/** /**
* Sets the minimum time in milli-seconds between {@link PhoneStateListener#onCellInfoChanged * Sets the minimum time in milli-seconds between {@link PhoneStateListener#onCellInfoChanged
* PhoneStateListener.onCellInfoChanged} will be invoked. * PhoneStateListener.onCellInfoChanged} will be invoked.