1fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville/**
264c42cae4482fe0157e977b8ddd0f2c2436b3f31Wink Saville * Copyright (C) 2011 The Android Open Source Project
3fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville *
4fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville * Licensed under the Apache License, Version 2.0 (the "License");
5fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville * you may not use this file except in compliance with the License.
6fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville * You may obtain a copy of the License at
7fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville *
8fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville *      http://www.apache.org/licenses/LICENSE-2.0
9fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville *
10fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville * Unless required by applicable law or agreed to in writing, software
11fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville * distributed under the License is distributed on an "AS IS" BASIS,
12fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville * See the License for the specific language governing permissions and
14fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville * limitations under the License.
15fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville */
16fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville
17fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Savillepackage com.android.internal.util;
18fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville
19fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Savilleimport android.os.Message;
20fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville
21fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville/**
22fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville * {@hide}
23fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville *
2464c42cae4482fe0157e977b8ddd0f2c2436b3f31Wink Saville * The interface for implementing states in a {@link StateMachine}
25fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville */
2664c42cae4482fe0157e977b8ddd0f2c2436b3f31Wink Savillepublic interface IState {
27fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville
28fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville    /**
2964c42cae4482fe0157e977b8ddd0f2c2436b3f31Wink Saville     * Returned by processMessage to indicate the the message was processed.
30fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville     */
3164c42cae4482fe0157e977b8ddd0f2c2436b3f31Wink Saville    static final boolean HANDLED = true;
3264c42cae4482fe0157e977b8ddd0f2c2436b3f31Wink Saville
3364c42cae4482fe0157e977b8ddd0f2c2436b3f31Wink Saville    /**
3464c42cae4482fe0157e977b8ddd0f2c2436b3f31Wink Saville     * Returned by processMessage to indicate the the message was NOT processed.
3564c42cae4482fe0157e977b8ddd0f2c2436b3f31Wink Saville     */
3664c42cae4482fe0157e977b8ddd0f2c2436b3f31Wink Saville    static final boolean NOT_HANDLED = false;
37fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville
38fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville    /**
39fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville     * Called when a state is entered.
40fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville     */
4164c42cae4482fe0157e977b8ddd0f2c2436b3f31Wink Saville    void enter();
4264c42cae4482fe0157e977b8ddd0f2c2436b3f31Wink Saville
4364c42cae4482fe0157e977b8ddd0f2c2436b3f31Wink Saville    /**
4464c42cae4482fe0157e977b8ddd0f2c2436b3f31Wink Saville     * Called when a state is exited.
4564c42cae4482fe0157e977b8ddd0f2c2436b3f31Wink Saville     */
4664c42cae4482fe0157e977b8ddd0f2c2436b3f31Wink Saville    void exit();
47fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville
48fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville    /**
49fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville     * Called when a message is to be processed by the
50fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville     * state machine.
51fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville     *
52fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville     * This routine is never reentered thus no synchronization
53fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville     * is needed as only one processMessage method will ever be
54fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville     * executing within a state machine at any given time. This
55fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville     * does mean that processing by this routine must be completed
56fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville     * as expeditiously as possible as no subsequent messages will
57fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville     * be processed until this routine returns.
58fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville     *
59fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville     * @param msg to process
6064c42cae4482fe0157e977b8ddd0f2c2436b3f31Wink Saville     * @return HANDLED if processing has completed and NOT_HANDLED
6164c42cae4482fe0157e977b8ddd0f2c2436b3f31Wink Saville     *         if the message wasn't processed.
62fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville     */
6364c42cae4482fe0157e977b8ddd0f2c2436b3f31Wink Saville    boolean processMessage(Message msg);
64fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville
65fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville    /**
6664c42cae4482fe0157e977b8ddd0f2c2436b3f31Wink Saville     * Name of State for debugging purposes.
6764c42cae4482fe0157e977b8ddd0f2c2436b3f31Wink Saville     *
6864c42cae4482fe0157e977b8ddd0f2c2436b3f31Wink Saville     * @return name of state.
69fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville     */
7064c42cae4482fe0157e977b8ddd0f2c2436b3f31Wink Saville    String getName();
71fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville}
72