/*
* Copyright 2017 Gabor Varadi
*
* 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.zhuinden.simplestack.navigator;
import android.support.annotation.NonNull;
import android.view.View;
import android.view.ViewGroup;
/**
* An interface that represents the view change when a state change occurs.
*
* Specified in {@link StateKey}, if {@link DefaultStateChanger} is used with default {@link DefaultStateChanger.GetViewChangeHandlerStrategy}.
*/
public interface ViewChangeHandler {
/**
* It must be called to signal that the view change is complete.
*/
interface CompletionCallback {
void onCompleted();
}
/**
* Perform the view change. The previous view must be removed from the container, and the new view must be added to the container.
* When complete, the completion callback must be called.
*
* @param container the container for the views
* @param previousView the previous view
* @param newView the new view
* @param direction the direction (from the StateChange)
* @param completionCallback the callback that must be called when the view change is complete.
*/
void performViewChange(@NonNull final ViewGroup container, @NonNull final View previousView, @NonNull final View newView, final int direction, @NonNull final CompletionCallback completionCallback);
}