Merge "Rethrow remote's ServiceSpecificException"
This commit is contained in:
@@ -236,6 +236,7 @@ public final class Parcel {
|
||||
private static final int VAL_DOUBLEARRAY = 28;
|
||||
|
||||
// The initial int32 in a Binder call's reply Parcel header:
|
||||
// Keep these in sync with libbinder's binder/Status.h.
|
||||
private static final int EX_SECURITY = -1;
|
||||
private static final int EX_BAD_PARCELABLE = -2;
|
||||
private static final int EX_ILLEGAL_ARGUMENT = -3;
|
||||
@@ -243,7 +244,11 @@ public final class Parcel {
|
||||
private static final int EX_ILLEGAL_STATE = -5;
|
||||
private static final int EX_NETWORK_MAIN_THREAD = -6;
|
||||
private static final int EX_UNSUPPORTED_OPERATION = -7;
|
||||
private static final int EX_SERVICE_SPECIFIC = -8;
|
||||
private static final int EX_HAS_REPLY_HEADER = -128; // special; see below
|
||||
// EX_TRANSACTION_FAILED is used exclusively in native code.
|
||||
// see libbinder's binder/Status.h
|
||||
private static final int EX_TRANSACTION_FAILED = -129;
|
||||
|
||||
private static native int nativeDataSize(long nativePtr);
|
||||
private static native int nativeDataAvail(long nativePtr);
|
||||
@@ -1540,6 +1545,8 @@ public final class Parcel {
|
||||
code = EX_NETWORK_MAIN_THREAD;
|
||||
} else if (e instanceof UnsupportedOperationException) {
|
||||
code = EX_UNSUPPORTED_OPERATION;
|
||||
} else if (e instanceof ServiceSpecificException) {
|
||||
code = EX_SERVICE_SPECIFIC;
|
||||
}
|
||||
writeInt(code);
|
||||
StrictMode.clearGatheredViolations();
|
||||
@@ -1550,6 +1557,9 @@ public final class Parcel {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
writeString(e.getMessage());
|
||||
if (e instanceof ServiceSpecificException) {
|
||||
writeInt(((ServiceSpecificException)e).errorCode);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1660,6 +1670,8 @@ public final class Parcel {
|
||||
throw new NetworkOnMainThreadException();
|
||||
case EX_UNSUPPORTED_OPERATION:
|
||||
throw new UnsupportedOperationException(msg);
|
||||
case EX_SERVICE_SPECIFIC:
|
||||
throw new ServiceSpecificException(readInt(), msg);
|
||||
}
|
||||
throw new RuntimeException("Unknown exception code: " + code
|
||||
+ " msg " + msg);
|
||||
|
||||
39
core/java/android/os/ServiceSpecificException.java
Normal file
39
core/java/android/os/ServiceSpecificException.java
Normal file
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
* Copyright (C) 2015 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;
|
||||
|
||||
/**
|
||||
* An exception specific to a service.
|
||||
*
|
||||
* <p>This exception includes an error code specific to the throwing
|
||||
* service. This is mostly used by system services to indicate
|
||||
* domain specific error conditions.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public class ServiceSpecificException extends RuntimeException {
|
||||
public final int errorCode;
|
||||
|
||||
ServiceSpecificException(int errorCode, String message) {
|
||||
super(message);
|
||||
this.errorCode = errorCode;
|
||||
}
|
||||
|
||||
ServiceSpecificException(int errorCode) {
|
||||
this.errorCode = errorCode;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user