/**
 * 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 android.view;

import android.content.ComponentName;
import android.view.InsetsSourceControl;
import android.view.InsetsState;
import android.view.inputmethod.ImeTracker;

/**
 * Singular controller of insets to use when there isn't another obvious controller available.
 * Specifically, this will take over insets control in multi-window.
 * @hide
 */
oneway interface IDisplayWindowInsetsController {

    /**
     * Called when top focused window changes to determine whether or not to take over insets
     * control. Won't be called if config_remoteInsetsControllerControlsSystemBars is false.
     * @param component: Passes the top application component in the focused window.
     * @param requestedVisibleTypes The insets types requested visible by the focused window.
     */
    void topFocusedWindowChanged(in ComponentName component, int requestedVisibleTypes);

    /**
     * @see IWindow#insetsChanged
     */
    void insetsChanged(in InsetsState insetsState);

    /**
     * @see IWindow#insetsControlChanged
     */
    void insetsControlChanged(in InsetsState insetsState, in InsetsSourceControl[] activeControls);

    /**
     * @see IWindow#showInsets
     */
    void showInsets(int types, boolean fromIme, in @nullable ImeTracker.Token statsToken);

    /**
     * @see IWindow#hideInsets
     */
    void hideInsets(int types, boolean fromIme, in @nullable ImeTracker.Token statsToken);
}
