blob: 0e9119a4332be30f51fd463ea52214d1c13541a8 [file] [log] [blame]
/*
* Copyright (C) 2023 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 androidx.window.extensions.area;
import static androidx.window.extensions.area.WindowAreaComponent.SESSION_STATE_ACTIVE;
import static androidx.window.extensions.area.WindowAreaComponent.SESSION_STATE_INACTIVE;
import android.content.Context;
import android.view.Display;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.window.extensions.core.util.function.Consumer;
import java.util.Objects;
/**
* Controller class that manages the creation of the {@link android.app.Presentation} object used
* to show content on the rear facing display. This controller notifies the session callback with
* {@link androidx.window.extensions.area.WindowAreaComponent.WindowAreaStatus} values when the
* feature is active, or when the feature has been ended.
*/
class RearDisplayPresentationController {
// Original context that requested to enable rear display presentation mode
@NonNull
private final Context mContext;
@NonNull
private final Consumer<@WindowAreaComponent.WindowAreaSessionState Integer> mStateConsumer;
@Nullable
private ExtensionWindowAreaPresentation mExtensionWindowAreaPresentation;
/**
* Creates the RearDisplayPresentationController
* @param context Originating {@link android.content.Context} that is initiating the rear
* display presentation session.
* @param stateConsumer {@link Consumer} that will be notified that the session is active when
* the device state request is active and the session has been created. If the device
* state request is cancelled, the callback will be notified that the session has been
* ended. This could occur through a call to cancel the feature or if the device is
* manipulated in a way that cancels any device state override.
*/
RearDisplayPresentationController(@NonNull Context context,
@NonNull Consumer<@WindowAreaComponent.WindowAreaSessionState Integer> stateConsumer) {
Objects.requireNonNull(context);
Objects.requireNonNull(stateConsumer);
mContext = context;
mStateConsumer = stateConsumer;
}
public void startSession(@NonNull Display rearDisplay) {
mExtensionWindowAreaPresentation =
new RearDisplayPresentation(mContext, rearDisplay, mStateConsumer);
mStateConsumer.accept(SESSION_STATE_ACTIVE);
}
public void endSession() {
mStateConsumer.accept(SESSION_STATE_INACTIVE);
}
@Nullable
public ExtensionWindowAreaPresentation getWindowAreaPresentation() {
return mExtensionWindowAreaPresentation;
}
}