/* * 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; } }