124be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu/*
224be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu * Copyright (C) 2015 The Android Open Source Project
324be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu *
424be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu * Licensed under the Apache License, Version 2.0 (the "License");
524be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu * you may not use this file except in compliance with the License.
624be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu * You may obtain a copy of the License at
724be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu *
824be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu *      http://www.apache.org/licenses/LICENSE-2.0
924be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu *
1024be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu * Unless required by applicable law or agreed to in writing, software
1124be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu * distributed under the License is distributed on an "AS IS" BASIS,
1224be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1324be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu * See the License for the specific language governing permissions and
1424be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu * limitations under the License.
1524be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu */
1624be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu
17d2d86155337a7dd9fd285a25c93e27dc05200ed1Senpo Hupackage com.android.camera.captureintent.stateful;
1824be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu
1924be7cc6d138129b4087ef28f114701de54aba3cSenpo Huimport com.google.common.base.Optional;
2024be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu
2124be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu/**
22d2d86155337a7dd9fd285a25c93e27dc05200ed1Senpo Hu * Defines an event handler interface that any implementation of this interface
23d2d86155337a7dd9fd285a25c93e27dc05200ed1Senpo Hu * can be used by {@link StateMachine} to handle a particular type of event
24d2d86155337a7dd9fd285a25c93e27dc05200ed1Senpo Hu * which extends {@link Event}.
2524be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu *
26d2d86155337a7dd9fd285a25c93e27dc05200ed1Senpo Hu * @param <T> The particular type of event.
2724be7cc6d138129b4087ef28f114701de54aba3cSenpo Hu */
28d2d86155337a7dd9fd285a25c93e27dc05200ed1Senpo Hupublic interface EventHandler<T extends Event> {
29d2d86155337a7dd9fd285a25c93e27dc05200ed1Senpo Hu
30d2d86155337a7dd9fd285a25c93e27dc05200ed1Senpo Hu    /**
31d2d86155337a7dd9fd285a25c93e27dc05200ed1Senpo Hu     * Process a single event.
32d2d86155337a7dd9fd285a25c93e27dc05200ed1Senpo Hu     *
33d2d86155337a7dd9fd285a25c93e27dc05200ed1Senpo Hu     * @param event The event to be processed.
34d2d86155337a7dd9fd285a25c93e27dc05200ed1Senpo Hu     * @return The next desired state. If it is not NO_CHANGE, the state
35d2d86155337a7dd9fd285a25c93e27dc05200ed1Senpo Hu     *         machine will change to the next desired state.
36d2d86155337a7dd9fd285a25c93e27dc05200ed1Senpo Hu     */
37d2d86155337a7dd9fd285a25c93e27dc05200ed1Senpo Hu    public Optional<State> processEvent(T event);
38d2d86155337a7dd9fd285a25c93e27dc05200ed1Senpo Hu}