1 /* 2 * Copyright (C) 2024 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.wm.shell.desktopmode 18 19 import android.view.WindowManager.TransitionType 20 import com.android.wm.shell.shared.desktopmode.DesktopModeTransitionSource 21 import com.android.wm.shell.transition.Transitions.TRANSIT_DESKTOP_MODE_TYPES 22 23 /** 24 * Contains desktop mode [TransitionType]s (extended from [TRANSIT_DESKTOP_MODE_TYPES]) and helper 25 * methods. 26 */ 27 object DesktopModeTransitionTypes { 28 29 const val TRANSIT_ENTER_DESKTOP_FROM_APP_HANDLE_MENU_BUTTON = TRANSIT_DESKTOP_MODE_TYPES + 1 30 const val TRANSIT_ENTER_DESKTOP_FROM_APP_FROM_OVERVIEW = TRANSIT_DESKTOP_MODE_TYPES + 2 31 const val TRANSIT_ENTER_DESKTOP_FROM_KEYBOARD_SHORTCUT = TRANSIT_DESKTOP_MODE_TYPES + 3 32 const val TRANSIT_ENTER_DESKTOP_FROM_UNKNOWN = TRANSIT_DESKTOP_MODE_TYPES + 4 33 const val TRANSIT_EXIT_DESKTOP_MODE_TASK_DRAG = TRANSIT_DESKTOP_MODE_TYPES + 5 34 const val TRANSIT_EXIT_DESKTOP_MODE_HANDLE_MENU_BUTTON = TRANSIT_DESKTOP_MODE_TYPES + 6 35 const val TRANSIT_EXIT_DESKTOP_MODE_KEYBOARD_SHORTCUT = TRANSIT_DESKTOP_MODE_TYPES + 7 36 const val TRANSIT_EXIT_DESKTOP_MODE_UNKNOWN = TRANSIT_DESKTOP_MODE_TYPES + 8 37 38 /** Transition type for starting the drag to desktop mode. */ 39 const val TRANSIT_DESKTOP_MODE_START_DRAG_TO_DESKTOP = TRANSIT_DESKTOP_MODE_TYPES + 9 40 41 /** Transition type for finalizing the drag to desktop mode. */ 42 const val TRANSIT_DESKTOP_MODE_END_DRAG_TO_DESKTOP = TRANSIT_DESKTOP_MODE_TYPES + 10 43 44 /** Transition type to cancel the drag to desktop mode. */ 45 const val TRANSIT_DESKTOP_MODE_CANCEL_DRAG_TO_DESKTOP = TRANSIT_DESKTOP_MODE_TYPES + 11 46 47 /** Transition type to animate the toggle resize between the max and default desktop sizes. */ 48 const val TRANSIT_DESKTOP_MODE_TOGGLE_RESIZE = TRANSIT_DESKTOP_MODE_TYPES + 12 49 50 /** Return whether the [TransitionType] corresponds to a transition to enter desktop mode. */ 51 @JvmStatic isEnterDesktopModeTransitionnull52 fun @receiver:TransitionType Int.isEnterDesktopModeTransition(): Boolean { 53 return this in 54 listOf( 55 TRANSIT_ENTER_DESKTOP_FROM_APP_HANDLE_MENU_BUTTON, 56 TRANSIT_ENTER_DESKTOP_FROM_APP_FROM_OVERVIEW, 57 TRANSIT_ENTER_DESKTOP_FROM_KEYBOARD_SHORTCUT, 58 TRANSIT_ENTER_DESKTOP_FROM_UNKNOWN, 59 ) 60 } 61 62 /** 63 * Returns corresponding desktop mode enter [TransitionType] for a 64 * [DesktopModeTransitionSource]. 65 */ 66 @JvmStatic 67 @TransitionType getEnterTransitionTypenull68 fun DesktopModeTransitionSource.getEnterTransitionType(): Int { 69 return when (this) { 70 DesktopModeTransitionSource.APP_HANDLE_MENU_BUTTON -> 71 TRANSIT_ENTER_DESKTOP_FROM_APP_HANDLE_MENU_BUTTON 72 DesktopModeTransitionSource.APP_FROM_OVERVIEW -> 73 TRANSIT_ENTER_DESKTOP_FROM_APP_FROM_OVERVIEW 74 DesktopModeTransitionSource.KEYBOARD_SHORTCUT -> 75 TRANSIT_ENTER_DESKTOP_FROM_KEYBOARD_SHORTCUT 76 else -> TRANSIT_ENTER_DESKTOP_FROM_UNKNOWN 77 } 78 } 79 80 /** Return whether the [TransitionType] corresponds to a transition to exit desktop mode. */ 81 @JvmStatic isExitDesktopModeTransitionnull82 fun @receiver:TransitionType Int.isExitDesktopModeTransition(): Boolean { 83 return this in 84 listOf( 85 TRANSIT_EXIT_DESKTOP_MODE_TASK_DRAG, 86 TRANSIT_EXIT_DESKTOP_MODE_HANDLE_MENU_BUTTON, 87 TRANSIT_EXIT_DESKTOP_MODE_KEYBOARD_SHORTCUT, 88 TRANSIT_EXIT_DESKTOP_MODE_UNKNOWN, 89 ) 90 } 91 92 /** 93 * Returns corresponding desktop mode exit [TransitionType] for a [DesktopModeTransitionSource]. 94 */ 95 @JvmStatic 96 @TransitionType getExitTransitionTypenull97 fun DesktopModeTransitionSource.getExitTransitionType(): Int { 98 return when (this) { 99 DesktopModeTransitionSource.TASK_DRAG -> TRANSIT_EXIT_DESKTOP_MODE_TASK_DRAG 100 DesktopModeTransitionSource.APP_HANDLE_MENU_BUTTON -> 101 TRANSIT_EXIT_DESKTOP_MODE_HANDLE_MENU_BUTTON 102 DesktopModeTransitionSource.KEYBOARD_SHORTCUT -> 103 TRANSIT_EXIT_DESKTOP_MODE_KEYBOARD_SHORTCUT 104 else -> TRANSIT_EXIT_DESKTOP_MODE_UNKNOWN 105 } 106 } 107 108 /** 109 * Returns a string representing the [TransitionType]. If not supported, returns an empty 110 * string. 111 */ 112 @JvmStatic transitTypeToStringnull113 fun transitTypeToString(transitType: Int): String = 114 when (transitType) { 115 TRANSIT_DESKTOP_MODE_START_DRAG_TO_DESKTOP -> "DESKTOP_MODE_START_DRAG_TO_DESKTOP" 116 TRANSIT_DESKTOP_MODE_END_DRAG_TO_DESKTOP -> "DESKTOP_MODE_END_DRAG_TO_DESKTOP" 117 TRANSIT_DESKTOP_MODE_CANCEL_DRAG_TO_DESKTOP -> "DESKTOP_MODE_CANCEL_DRAG_TO_DESKTOP" 118 TRANSIT_DESKTOP_MODE_TOGGLE_RESIZE -> "DESKTOP_MODE_TOGGLE_RESIZE" 119 else -> "" 120 } 121 } 122