1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
|
/*
* Copyright (C) 2021 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.app;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.ComponentName;
import android.os.Bundle;
import android.util.AndroidRuntimeException;
/**
* Exception used by {@link ActivityThread} to crash an app process for an unknown cause.
* An exception of this class is no longer supposed to be thrown. Instead, we use fine-grained
* sub-exceptions.
*
* Subclasses must be registered in
* {@link android.app.ActivityThread#throwRemoteServiceException(java.lang.String, int)}.
*
* @hide
*/
public class RemoteServiceException extends AndroidRuntimeException {
public RemoteServiceException(String msg) {
super(msg);
}
public RemoteServiceException(String msg, Throwable cause) {
super(msg, cause);
}
/**
* Exception used to crash an app process when it didn't call {@link Service#startForeground}
* in time after the service was started with
* {@link android.content.Context#startForegroundService}.
*
* @hide
*/
public static class ForegroundServiceDidNotStartInTimeException extends RemoteServiceException {
/** The type ID passed to {@link IApplicationThread#scheduleCrash}. */
public static final int TYPE_ID = 1;
private static final String KEY_SERVICE_CLASS_NAME = "serviceclassname";
public ForegroundServiceDidNotStartInTimeException(String msg, Throwable cause) {
super(msg, cause);
}
public static Bundle createExtrasForService(@NonNull ComponentName service) {
Bundle b = new Bundle();
b.putString(KEY_SERVICE_CLASS_NAME, service.getClassName());
return b;
}
@Nullable
public static String getServiceClassNameFromExtras(@Nullable Bundle extras) {
return (extras == null) ? null : extras.getString(KEY_SERVICE_CLASS_NAME);
}
}
/**
* Exception used to crash an app process when the system received a RemoteException
* while posting a notification of a foreground service.
*
* @hide
*/
public static class CannotPostForegroundServiceNotificationException
extends RemoteServiceException {
/** The type ID passed to {@link IApplicationThread#scheduleCrash}. */
public static final int TYPE_ID = 2;
public CannotPostForegroundServiceNotificationException(String msg) {
super(msg);
}
}
/**
* Exception used to crash an app process when the system finds an error in a foreground service
* notification.
*
* @hide
*/
public static class BadForegroundServiceNotificationException extends RemoteServiceException {
/** The type ID passed to {@link IApplicationThread#scheduleCrash}. */
public static final int TYPE_ID = 3;
public BadForegroundServiceNotificationException(String msg) {
super(msg);
}
}
/**
* Exception used to crash an app process when it calls a setting activity that requires
* the {@code REQUEST_PASSWORD_COMPLEXITY} permission.
*
* @hide
*/
public static class MissingRequestPasswordComplexityPermissionException
extends RemoteServiceException {
/** The type ID passed to {@link IApplicationThread#scheduleCrash}. */
public static final int TYPE_ID = 4;
public MissingRequestPasswordComplexityPermissionException(String msg) {
super(msg);
}
}
/**
* Exception used to crash an app process by {@code adb shell am crash}.
*
* @hide
*/
public static class CrashedByAdbException extends RemoteServiceException {
/** The type ID passed to {@link IApplicationThread#scheduleCrash}. */
public static final int TYPE_ID = 5;
public CrashedByAdbException(String msg) {
super(msg);
}
}
}
|