diff options
| author | 2019-01-14 12:18:44 -0800 | |
|---|---|---|
| committer | 2019-01-14 12:18:44 -0800 | |
| commit | 6c93f8d18a111ce9fc65aa71f3cbf58d78d44875 (patch) | |
| tree | 6cea5271f593cb8227b174049607a635f7278c01 | |
| parent | f54c392021c7c2898ba0474f11ba2f014d23d6ed (diff) | |
| parent | 28d31b21c41d83afc5bb6e381eabd2e3b9e4cdd0 (diff) | |
Merge changes from topic "cellinfocallback-error" am: 360e25280c am: ed0c722aad
am: 28d31b21c4
Change-Id: Ib2f14771f9788f954b30ee6ef3981b9a1b714793
| -rw-r--r-- | api/current.txt | 3 | ||||
| -rw-r--r-- | telephony/java/android/telephony/ICellInfoCallback.aidl | 2 | ||||
| -rw-r--r-- | telephony/java/android/telephony/TelephonyManager.java | 54 |
3 files changed, 55 insertions, 4 deletions
diff --git a/api/current.txt b/api/current.txt index 00d4cb5f97dd..e626f29881a9 100644 --- a/api/current.txt +++ b/api/current.txt @@ -44778,6 +44778,9 @@ package android.telephony { public static abstract class TelephonyManager.CellInfoCallback { ctor public TelephonyManager.CellInfoCallback(); method public abstract void onCellInfo(java.util.List<android.telephony.CellInfo>); + method public void onError(int, java.lang.Throwable); + field public static final int ERROR_MODEM_ERROR = 2; // 0x2 + field public static final int ERROR_TIMEOUT = 1; // 0x1 } public static abstract class TelephonyManager.UssdResponseCallback { diff --git a/telephony/java/android/telephony/ICellInfoCallback.aidl b/telephony/java/android/telephony/ICellInfoCallback.aidl index 7fb62682703a..ee3c1b1be6d9 100644 --- a/telephony/java/android/telephony/ICellInfoCallback.aidl +++ b/telephony/java/android/telephony/ICellInfoCallback.aidl @@ -16,6 +16,7 @@ package android.telephony; +import android.os.ParcelableException; import android.telephony.CellInfo; import java.util.List; @@ -27,4 +28,5 @@ import java.util.List; oneway interface ICellInfoCallback { void onCellInfo(in List<CellInfo> state); + void onError(in int errorCode, in ParcelableException detail); } diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index b48a1ced61a4..7f7d5e7faae5 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -4898,19 +4898,53 @@ public class TelephonyManager { /** Callback for providing asynchronous {@link CellInfo} on request */ public abstract static class CellInfoCallback { /** - * Response to + * Success response to * {@link android.telephony.TelephonyManager#requestCellInfoUpdate requestCellInfoUpdate()}. * - * <p>Invoked when there is a response to + * Invoked when there is a response to * {@link android.telephony.TelephonyManager#requestCellInfoUpdate requestCellInfoUpdate()} * to provide a list of {@link CellInfo}. If no {@link CellInfo} is available then an empty - * list will be provided. If an error occurs, null will be provided. + * list will be provided. If an error occurs, null will be provided unless the onError + * callback is overridden. * * @param cellInfo a list of {@link CellInfo}, an empty list, or null. * * {@see android.telephony.TelephonyManager#getAllCellInfo getAllCellInfo()} */ - public abstract void onCellInfo(List<CellInfo> cellInfo); + public abstract void onCellInfo(@NonNull List<CellInfo> cellInfo); + + /** @hide */ + @Retention(RetentionPolicy.SOURCE) + @IntDef(prefix = {"ERROR_"}, value = {ERROR_TIMEOUT, ERROR_MODEM_ERROR}) + public @interface CellInfoCallbackError {} + + /** + * The system timed out waiting for a response from the Radio. + */ + public static final int ERROR_TIMEOUT = 1; + + /** + * The modem returned a failure. + */ + public static final int ERROR_MODEM_ERROR = 2; + + /** + * Error response to + * {@link android.telephony.TelephonyManager#requestCellInfoUpdate requestCellInfoUpdate()}. + * + * Invoked when an error condition prevents updated {@link CellInfo} from being fetched + * and returned from the modem. Callers of requestCellInfoUpdate() should override this + * function to receive detailed status information in the event of an error. By default, + * this function will invoke onCellInfo() with null. + * + * @param errorCode an error code indicating the type of failure. + * @param detail a Throwable object with additional detail regarding the failure if + * available, otherwise null. + */ + public void onError(@CellInfoCallbackError int errorCode, @Nullable Throwable detail) { + // By default, simply invoke the success callback with an empty list. + onCellInfo(new ArrayList<CellInfo>()); + } }; /** @@ -4937,6 +4971,12 @@ public class TelephonyManager { Binder.withCleanCallingIdentity(() -> executor.execute(() -> callback.onCellInfo(cellInfo))); } + + public void onError(int errorCode, android.os.ParcelableException detail) { + Binder.withCleanCallingIdentity(() -> + executor.execute(() -> callback.onError( + errorCode, detail.getCause()))); + } }, getOpPackageName()); } catch (RemoteException ex) { @@ -4971,6 +5011,12 @@ public class TelephonyManager { Binder.withCleanCallingIdentity(() -> executor.execute(() -> callback.onCellInfo(cellInfo))); } + + public void onError(int errorCode, android.os.ParcelableException detail) { + Binder.withCleanCallingIdentity(() -> + executor.execute(() -> callback.onError( + errorCode, detail.getCause()))); + } }, getOpPackageName(), workSource); } catch (RemoteException ex) { } |