/* * Copyright (C) 2020 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 com.android.launcher3.uioverrides.states; import static com.android.launcher3.logging.StatsLogManager.LAUNCHER_STATE_OVERVIEW; import android.content.Context; import android.graphics.Point; import android.graphics.Rect; import com.android.launcher3.BaseDraggingActivity; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherState; import com.android.quickstep.views.RecentsView; /** * An Overview state that shows the current task in a modal fashion. Modal state is where the * current task is shown on its own without other tasks visible. */ public class OverviewModalTaskState extends OverviewState { private static final int STATE_FLAGS = FLAG_DISABLE_RESTORE | FLAG_OVERVIEW_UI | FLAG_WORKSPACE_INACCESSIBLE; public OverviewModalTaskState(int id) { super(id, LAUNCHER_STATE_OVERVIEW, STATE_FLAGS); } @Override public int getTransitionDuration(Context launcher) { return 300; } @Override public int getVisibleElements(Launcher launcher) { return OVERVIEW_ACTIONS | CLEAR_ALL_BUTTON; } @Override public float[] getOverviewScaleAndOffset(Launcher launcher) { return getOverviewScaleAndOffsetForModalState(launcher); } @Override public float getOverviewModalness() { return 1.0f; } @Override public void onBackPressed(Launcher launcher) { launcher.getStateManager().goToState(LauncherState.OVERVIEW); RecentsView recentsView = launcher.getOverviewPanel(); if (recentsView != null) { recentsView.resetModalVisuals(); } else { super.onBackPressed(launcher); } } public static float[] getOverviewScaleAndOffsetForModalState(BaseDraggingActivity activity) { Point taskSize = activity.getOverviewPanel().getSelectedTaskSize(); Rect modalTaskSize = new Rect(); activity.getOverviewPanel().getModalTaskSize(modalTaskSize); float scale = Math.min((float) modalTaskSize.height() / taskSize.y, (float) modalTaskSize.width() / taskSize.x); return new float[] {scale, NO_OFFSET}; } }