diff options
| author | 2019-01-14 17:50:39 +0000 | |
|---|---|---|
| committer | 2019-01-14 17:50:39 +0000 | |
| commit | 360e25280c1a119e2a204545c70bcf8018fb961c (patch) | |
| tree | f5478c235eb01327f0e6aa0d45a2ed145e478497 | |
| parent | e35f7027495597ca7eaa92fee8c028fd4efdf960 (diff) | |
| parent | 7484270560f0366bc192319be46aedb1a07049d4 (diff) | |
Merge changes from topic "cellinfocallback-error"
* changes:
Add an onError() method to CellInfoCallback
Add AIDL for ParcelableException
| -rwxr-xr-x | api/current.txt | 3 | ||||
| -rw-r--r-- | core/java/android/os/ParcelableException.aidl | 18 | ||||
| -rw-r--r-- | telephony/java/android/telephony/ICellInfoCallback.aidl | 2 | ||||
| -rw-r--r-- | telephony/java/android/telephony/TelephonyManager.java | 54 |
4 files changed, 73 insertions, 4 deletions
diff --git a/api/current.txt b/api/current.txt index a3b3722b9f18..499978a3aa88 100755 --- a/api/current.txt +++ b/api/current.txt @@ -43171,6 +43171,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/core/java/android/os/ParcelableException.aidl b/core/java/android/os/ParcelableException.aidl new file mode 100644 index 000000000000..d21492212341 --- /dev/null +++ b/core/java/android/os/ParcelableException.aidl @@ -0,0 +1,18 @@ +/* Copyright 2018, 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 android.os; + +parcelable ParcelableException; 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 c0ce0b3d8b66..621b8a6b30bb 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -4871,19 +4871,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>()); + } }; /** @@ -4910,6 +4944,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) { @@ -4944,6 +4984,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) { } |