blob: f1f7d632b6f8d10df1c93a77f3933c699f5a52e9 [file] [log] [blame]
/*
* Copyright (C) 2019 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.systemui.statusbar.notification.collection.listbuilder;
import android.annotation.IntDef;
import com.android.systemui.statusbar.notification.collection.ShadeListBuilder;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
* Used by {@link ShadeListBuilder} to track its internal state machine.
*/
public class PipelineState {
private @StateName int mState = STATE_IDLE;
/** Returns true if the current state matches <code>state</code> */
public boolean is(@StateName int state) {
return state == mState;
}
public @StateName int getState() {
return mState;
}
public void setState(@StateName int state) {
mState = state;
}
/**
* Increments the state from <code>(to - 1)</code> to <code>to</code>. If the current state
* isn't <code>(to - 1)</code>, throws an exception.
*/
public void incrementTo(@StateName int to) {
if (mState != to - 1) {
throw new IllegalStateException(
"Cannot increment from state " + mState + " to state " + to);
}
mState = to;
}
/**
* Throws an exception if the current state is not <code>state</code>.
*/
public void requireState(@StateName int state) {
if (state != mState) {
throw new IllegalStateException(
"Required state is <" + state + " but actual state is " + mState);
}
}
/**
* Throws an exception if the current state is >= <code>state</code>.
*/
public void requireIsBefore(@StateName int state) {
if (mState >= state) {
throw new IllegalStateException(
"Required state is <" + state + " but actual state is " + mState);
}
}
public static final int STATE_IDLE = 0;
public static final int STATE_BUILD_STARTED = 1;
public static final int STATE_RESETTING = 2;
public static final int STATE_PRE_GROUP_FILTERING = 3;
public static final int STATE_GROUPING = 4;
public static final int STATE_TRANSFORMING = 5;
public static final int STATE_SORTING = 6;
public static final int STATE_FINALIZE_FILTERING = 7;
public static final int STATE_FINALIZING = 8;
@IntDef(prefix = { "STATE_" }, value = {
STATE_IDLE,
STATE_BUILD_STARTED,
STATE_RESETTING,
STATE_PRE_GROUP_FILTERING,
STATE_GROUPING,
STATE_TRANSFORMING,
STATE_SORTING,
STATE_FINALIZE_FILTERING,
STATE_FINALIZING,
})
@Retention(RetentionPolicy.SOURCE)
public @interface StateName {}
}