blob: 08d289556ca3effb5209b5adfd4cb02f1fea65b1 [file] [log] [blame]
/*
* Copyright (C) 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 com.android.server.backup.keyvalue;
import android.app.backup.BackupTransport;
import com.android.internal.util.Preconditions;
/**
* The key-value backup task has failed, no more packages will be processed and we shouldn't attempt
* any more backups now. These can be caused by transport failures (as opposed to agent failures).
*
* @see KeyValueBackupTask
* @see AgentException
*/
class TaskException extends BackupException {
private static final int DEFAULT_STATUS = BackupTransport.TRANSPORT_ERROR;
static TaskException stateCompromised() {
return new TaskException(/* stateCompromised */ true, DEFAULT_STATUS);
}
static TaskException stateCompromised(Exception cause) {
if (cause instanceof TaskException) {
TaskException exception = (TaskException) cause;
return new TaskException(cause, /* stateCompromised */ true, exception.getStatus());
}
return new TaskException(cause, /* stateCompromised */ true, DEFAULT_STATUS);
}
static TaskException forStatus(int status) {
Preconditions.checkArgument(
status != BackupTransport.TRANSPORT_OK, "Exception based on TRANSPORT_OK");
return new TaskException(/* stateCompromised */ false, status);
}
static TaskException causedBy(Exception cause) {
if (cause instanceof TaskException) {
return (TaskException) cause;
}
return new TaskException(cause, /* stateCompromised */ false, DEFAULT_STATUS);
}
static TaskException create() {
return new TaskException(/* stateCompromised */ false, DEFAULT_STATUS);
}
private final boolean mStateCompromised;
private final int mStatus;
private TaskException(Exception cause, boolean stateCompromised, int status) {
super(cause);
mStateCompromised = stateCompromised;
mStatus = status;
}
private TaskException(boolean stateCompromised, int status) {
mStateCompromised = stateCompromised;
mStatus = status;
}
boolean isStateCompromised() {
return mStateCompromised;
}
int getStatus() {
return mStatus;
}
}