19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.os; 18f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.AndroidException; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Parent exception for all Binder remote-invocation errors 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class RemoteException extends AndroidException { 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public RemoteException() { 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(); 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 280bde66a837542e5bd901d8b8e47c5bd7c4c99fe4Jeff Brown 290bde66a837542e5bd901d8b8e47c5bd7c4c99fe4Jeff Brown public RemoteException(String message) { 300bde66a837542e5bd901d8b8e47c5bd7c4c99fe4Jeff Brown super(message); 310bde66a837542e5bd901d8b8e47c5bd7c4c99fe4Jeff Brown } 323a44f3f1b446315ef894e01d2ab9b5388c2bd8c4Jeff Sharkey 333a44f3f1b446315ef894e01d2ab9b5388c2bd8c4Jeff Sharkey /** {@hide} */ 343a44f3f1b446315ef894e01d2ab9b5388c2bd8c4Jeff Sharkey public RuntimeException rethrowAsRuntimeException() { 353a44f3f1b446315ef894e01d2ab9b5388c2bd8c4Jeff Sharkey throw new RuntimeException(this); 363a44f3f1b446315ef894e01d2ab9b5388c2bd8c4Jeff Sharkey } 37f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey 38f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey /** 39f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey * Rethrow this exception when we know it came from the system server. This 40f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey * gives us an opportunity to throw a nice clean 41f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey * {@link DeadSystemException} signal to avoid spamming logs with 42f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey * misleading stack traces. 43f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey * <p> 44f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey * Apps making calls into the system server may end up persisting internal 45f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey * state or making security decisions based on the perceived success or 46f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey * failure of a call, or any default values returned. For this reason, we 47f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey * want to strongly throw when there was trouble with the transaction. 48f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey * 49f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey * @hide 50f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey */ 51f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey public RuntimeException rethrowFromSystemServer() { 52f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey if (this instanceof DeadObjectException) { 53f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw new RuntimeException(new DeadSystemException()); 54f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey } else { 55f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey throw new RuntimeException(this); 56f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey } 57f8880561e67e1da246970b49b14285efd4164ab1Jeff Sharkey } 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 59