1 /* 2 * Copyright (C) 2014 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 android.view; 18 19 import android.annotation.NonNull; 20 import android.annotation.Nullable; 21 import android.graphics.Rect; 22 import android.graphics.Region; 23 import android.hardware.display.DisplayManagerInternal; 24 import android.os.IBinder; 25 import android.view.animation.Animation; 26 27 import java.util.List; 28 29 /** 30 * Window manager local system service interface. 31 * 32 * @hide Only for use within the system server. 33 */ 34 public abstract class WindowManagerInternal { 35 36 /** 37 * Interface to receive a callback when the windows reported for 38 * accessibility changed. 39 */ 40 public interface WindowsForAccessibilityCallback { 41 42 /** 43 * Called when the windows for accessibility changed. 44 * 45 * @param windows The windows for accessibility. 46 */ onWindowsForAccessibilityChanged(List<WindowInfo> windows)47 public void onWindowsForAccessibilityChanged(List<WindowInfo> windows); 48 } 49 50 /** 51 * Callbacks for contextual changes that affect the screen magnification 52 * feature. 53 */ 54 public interface MagnificationCallbacks { 55 56 /** 57 * Called when the region where magnification operates changes. Note that this isn't the 58 * entire screen. For example, IMEs are not magnified. 59 * 60 * @param magnificationRegion the current magnification region 61 */ onMagnificationRegionChanged(Region magnificationRegion)62 public void onMagnificationRegionChanged(Region magnificationRegion); 63 64 /** 65 * Called when an application requests a rectangle on the screen to allow 66 * the client to apply the appropriate pan and scale. 67 * 68 * @param left The rectangle left. 69 * @param top The rectangle top. 70 * @param right The rectangle right. 71 * @param bottom The rectangle bottom. 72 */ onRectangleOnScreenRequested(int left, int top, int right, int bottom)73 public void onRectangleOnScreenRequested(int left, int top, int right, int bottom); 74 75 /** 76 * Notifies that the rotation changed. 77 * 78 * @param rotation The current rotation. 79 */ onRotationChanged(int rotation)80 public void onRotationChanged(int rotation); 81 82 /** 83 * Notifies that the context of the user changed. For example, an application 84 * was started. 85 */ onUserContextChanged()86 public void onUserContextChanged(); 87 } 88 89 /** 90 * Abstract class to be notified about {@link com.android.server.wm.AppTransition} events. Held 91 * as an abstract class so a listener only needs to implement the methods of its interest. 92 */ 93 public static abstract class AppTransitionListener { 94 95 /** 96 * Called when an app transition is being setup and about to be executed. 97 */ onAppTransitionPendingLocked()98 public void onAppTransitionPendingLocked() {} 99 100 /** 101 * Called when a pending app transition gets cancelled. 102 */ onAppTransitionCancelledLocked()103 public void onAppTransitionCancelledLocked() {} 104 105 /** 106 * Called when an app transition gets started 107 * 108 * @param openToken the token for the opening app 109 * @param closeToken the token for the closing app 110 * @param openAnimation the animation for the opening app 111 * @param closeAnimation the animation for the closing app 112 */ onAppTransitionStartingLocked(IBinder openToken, IBinder closeToken, Animation openAnimation, Animation closeAnimation)113 public void onAppTransitionStartingLocked(IBinder openToken, IBinder closeToken, 114 Animation openAnimation, Animation closeAnimation) {} 115 116 /** 117 * Called when an app transition is finished running. 118 * 119 * @param token the token for app whose transition has finished 120 */ onAppTransitionFinishedLocked(IBinder token)121 public void onAppTransitionFinishedLocked(IBinder token) {} 122 } 123 124 /** 125 * An interface to be notified about hardware keyboard status. 126 */ 127 public interface OnHardKeyboardStatusChangeListener { onHardKeyboardStatusChange(boolean available)128 public void onHardKeyboardStatusChange(boolean available); 129 } 130 131 /** 132 * Request that the window manager call 133 * {@link DisplayManagerInternal#performTraversalInTransactionFromWindowManager} 134 * within a surface transaction at a later time. 135 */ requestTraversalFromDisplayManager()136 public abstract void requestTraversalFromDisplayManager(); 137 138 /** 139 * Set by the accessibility layer to observe changes in the magnified region, 140 * rotation, and other window transformations related to display magnification 141 * as the window manager is responsible for doing the actual magnification 142 * and has access to the raw window data while the accessibility layer serves 143 * as a controller. 144 * 145 * @param callbacks The callbacks to invoke. 146 */ setMagnificationCallbacks(@ullable MagnificationCallbacks callbacks)147 public abstract void setMagnificationCallbacks(@Nullable MagnificationCallbacks callbacks); 148 149 /** 150 * Set by the accessibility layer to specify the magnification and panning to 151 * be applied to all windows that should be magnified. 152 * 153 * @param spec The MagnficationSpec to set. 154 * 155 * @see #setMagnificationCallbacks(MagnificationCallbacks) 156 */ setMagnificationSpec(MagnificationSpec spec)157 public abstract void setMagnificationSpec(MagnificationSpec spec); 158 159 /** 160 * Obtains the magnification regions. 161 * 162 * @param magnificationRegion the current magnification region 163 */ getMagnificationRegion(@onNull Region magnificationRegion)164 public abstract void getMagnificationRegion(@NonNull Region magnificationRegion); 165 166 /** 167 * Gets the magnification and translation applied to a window given its token. 168 * Not all windows are magnified and the window manager policy determines which 169 * windows are magnified. The returned result also takes into account the compat 170 * scale if necessary. 171 * 172 * @param windowToken The window's token. 173 * 174 * @return The magnification spec for the window. 175 * 176 * @see #setMagnificationCallbacks(MagnificationCallbacks) 177 */ getCompatibleMagnificationSpecForWindow( IBinder windowToken)178 public abstract MagnificationSpec getCompatibleMagnificationSpecForWindow( 179 IBinder windowToken); 180 181 /** 182 * Sets a callback for observing which windows are touchable for the purposes 183 * of accessibility. 184 * 185 * @param callback The callback. 186 */ setWindowsForAccessibilityCallback( WindowsForAccessibilityCallback callback)187 public abstract void setWindowsForAccessibilityCallback( 188 WindowsForAccessibilityCallback callback); 189 190 /** 191 * Sets a filter for manipulating the input event stream. 192 * 193 * @param filter The filter implementation. 194 */ setInputFilter(IInputFilter filter)195 public abstract void setInputFilter(IInputFilter filter); 196 197 /** 198 * Gets the token of the window that has input focus. 199 * 200 * @return The token. 201 */ getFocusedWindowToken()202 public abstract IBinder getFocusedWindowToken(); 203 204 /** 205 * @return Whether the keyguard is engaged. 206 */ isKeyguardLocked()207 public abstract boolean isKeyguardLocked(); 208 209 /** 210 * Gets the frame of a window given its token. 211 * 212 * @param token The token. 213 * @param outBounds The frame to populate. 214 */ getWindowFrame(IBinder token, Rect outBounds)215 public abstract void getWindowFrame(IBinder token, Rect outBounds); 216 217 /** 218 * Opens the global actions dialog. 219 */ showGlobalActions()220 public abstract void showGlobalActions(); 221 222 /** 223 * Invalidate all visible windows. Then report back on the callback once all windows have 224 * redrawn. 225 */ waitForAllWindowsDrawn(Runnable callback, long timeout)226 public abstract void waitForAllWindowsDrawn(Runnable callback, long timeout); 227 228 /** 229 * Adds a window token for a given window type. 230 * 231 * @param token The token to add. 232 * @param type The window type. 233 */ addWindowToken(android.os.IBinder token, int type)234 public abstract void addWindowToken(android.os.IBinder token, int type); 235 236 /** 237 * Removes a window token. 238 * 239 * @param token The toke to remove. 240 * @param removeWindows Whether to also remove the windows associated with the token. 241 */ removeWindowToken(android.os.IBinder token, boolean removeWindows)242 public abstract void removeWindowToken(android.os.IBinder token, boolean removeWindows); 243 244 /** 245 * Registers a listener to be notified about app transition events. 246 * 247 * @param listener The listener to register. 248 */ registerAppTransitionListener(AppTransitionListener listener)249 public abstract void registerAppTransitionListener(AppTransitionListener listener); 250 251 /** 252 * Retrieves a height of input method window. 253 */ getInputMethodWindowVisibleHeight()254 public abstract int getInputMethodWindowVisibleHeight(); 255 256 /** 257 * Saves last input method window for transition. 258 * 259 * Note that it is assumed that this method is called only by InputMethodManagerService. 260 */ saveLastInputMethodWindowForTransition()261 public abstract void saveLastInputMethodWindowForTransition(); 262 263 /** 264 * Clears last input method window for transition. 265 * 266 * Note that it is assumed that this method is called only by InputMethodManagerService. 267 */ clearLastInputMethodWindowForTransition()268 public abstract void clearLastInputMethodWindowForTransition(); 269 270 /** 271 * Returns true when the hardware keyboard is available. 272 */ isHardKeyboardAvailable()273 public abstract boolean isHardKeyboardAvailable(); 274 275 /** 276 * Sets the callback listener for hardware keyboard status changes. 277 * 278 * @param listener The listener to set. 279 */ setOnHardKeyboardStatusChangeListener( OnHardKeyboardStatusChangeListener listener)280 public abstract void setOnHardKeyboardStatusChangeListener( 281 OnHardKeyboardStatusChangeListener listener); 282 283 /** Returns true if the stack with the input Id is currently visible. */ isStackVisible(int stackId)284 public abstract boolean isStackVisible(int stackId); 285 286 /** 287 * @return True if and only if the docked divider is currently in resize mode. 288 */ isDockedDividerResizing()289 public abstract boolean isDockedDividerResizing(); 290 } 291