1 /* 2 ** Copyright 2006, 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 com.android.internal.os.IResultReceiver; 20 import com.android.internal.view.IInputContext; 21 import com.android.internal.view.IInputMethodClient; 22 import com.android.internal.policy.IKeyguardDismissCallback; 23 import com.android.internal.policy.IShortcutService; 24 25 import android.app.IAssistDataReceiver; 26 import android.content.res.CompatibilityInfo; 27 import android.content.res.Configuration; 28 import android.graphics.Bitmap; 29 import android.graphics.GraphicBuffer; 30 import android.graphics.Point; 31 import android.graphics.Rect; 32 import android.graphics.Region; 33 import android.os.Bundle; 34 import android.os.IRemoteCallback; 35 import android.os.ParcelFileDescriptor; 36 import android.view.IApplicationToken; 37 import android.view.IAppTransitionAnimationSpecsFuture; 38 import android.view.IDockedStackListener; 39 import android.view.IOnKeyguardExitResult; 40 import android.view.IPinnedStackListener; 41 import android.view.RemoteAnimationAdapter; 42 import android.view.IRotationWatcher; 43 import android.view.IWallpaperVisibilityListener; 44 import android.view.IWindowSession; 45 import android.view.IWindowSessionCallback; 46 import android.view.KeyEvent; 47 import android.view.InputEvent; 48 import android.view.MagnificationSpec; 49 import android.view.MotionEvent; 50 import android.view.InputChannel; 51 import android.view.InputDevice; 52 import android.view.IInputFilter; 53 import android.view.AppTransitionAnimationSpec; 54 import android.view.WindowContentFrameStats; 55 import android.view.WindowManager; 56 57 /** 58 * System private interface to the window manager. 59 * 60 * {@hide} 61 */ 62 interface IWindowManager 63 { 64 /** 65 * ===== NOTICE ===== 66 * The first three methods must remain the first three methods. Scripts 67 * and tools rely on their transaction number to work properly. 68 */ 69 // This is used for debugging 70 boolean startViewServer(int port); // Transaction #1 71 boolean stopViewServer(); // Transaction #2 72 boolean isViewServerRunning(); // Transaction #3 73 74 IWindowSession openSession(in IWindowSessionCallback callback, in IInputMethodClient client, 75 in IInputContext inputContext); 76 boolean inputMethodClientHasFocus(IInputMethodClient client); 77 78 void getInitialDisplaySize(int displayId, out Point size); 79 void getBaseDisplaySize(int displayId, out Point size); 80 void setForcedDisplaySize(int displayId, int width, int height); 81 void clearForcedDisplaySize(int displayId); 82 int getInitialDisplayDensity(int displayId); 83 int getBaseDisplayDensity(int displayId); 84 void setForcedDisplayDensityForUser(int displayId, int density, int userId); 85 void clearForcedDisplayDensityForUser(int displayId, int userId); 86 void setForcedDisplayScalingMode(int displayId, int mode); // 0 = auto, 1 = disable 87 88 void setOverscan(int displayId, int left, int top, int right, int bottom); 89 90 // These can only be called when holding the MANAGE_APP_TOKENS permission. 91 void setEventDispatching(boolean enabled); 92 void addWindowToken(IBinder token, int type, int displayId); 93 void removeWindowToken(IBinder token, int displayId); 94 void setFocusedApp(IBinder token, boolean moveFocusNow); 95 void prepareAppTransition(int transit, boolean alwaysKeepCurrent); 96 int getPendingAppTransition(); 97 void overridePendingAppTransition(String packageName, int enterAnim, int exitAnim, 98 IRemoteCallback startedCallback); 99 void overridePendingAppTransitionScaleUp(int startX, int startY, int startWidth, 100 int startHeight); 101 void overridePendingAppTransitionClipReveal(int startX, int startY, 102 int startWidth, int startHeight); 103 void overridePendingAppTransitionThumb(in GraphicBuffer srcThumb, int startX, int startY, 104 IRemoteCallback startedCallback, boolean scaleUp); 105 void overridePendingAppTransitionAspectScaledThumb(in GraphicBuffer srcThumb, int startX, 106 int startY, int targetWidth, int targetHeight, IRemoteCallback startedCallback, 107 boolean scaleUp); 108 /** 109 * Overrides animation for app transition that exits from an application to a multi-window 110 * environment and allows specifying transition animation parameters for each window. 111 * 112 * @param specs Array of transition animation descriptions for entering windows. 113 * 114 * @hide 115 */ 116 void overridePendingAppTransitionMultiThumb(in AppTransitionAnimationSpec[] specs, 117 IRemoteCallback startedCallback, IRemoteCallback finishedCallback, boolean scaleUp); 118 void overridePendingAppTransitionInPlace(String packageName, int anim); 119 120 /** 121 * Like overridePendingAppTransitionMultiThumb, but uses a future to supply the specs. This is 122 * used for recents, where generating the thumbnails of the specs takes a non-trivial amount of 123 * time, so we want to move that off the critical path for starting the new activity. 124 */ 125 void overridePendingAppTransitionMultiThumbFuture( 126 IAppTransitionAnimationSpecsFuture specsFuture, IRemoteCallback startedCallback, 127 boolean scaleUp); 128 void overridePendingAppTransitionRemote(in RemoteAnimationAdapter remoteAnimationAdapter); 129 void executeAppTransition(); 130 131 /** 132 * Used by system ui to report that recents has shown itself. 133 * @deprecated to be removed once prebuilts are updated 134 */ 135 void endProlongedAnimations(); 136 137 // Re-evaluate the current orientation from the caller's state. 138 // If there is a change, the new Configuration is returned and the 139 // caller must call setNewConfiguration() sometime later. 140 Configuration updateOrientationFromAppTokens(in Configuration currentConfig, 141 IBinder freezeThisOneIfNeeded, int displayId); 142 // Notify window manager of the new display override configuration. Returns an array of stack 143 // ids that were affected by the update, ActivityManager should resize these stacks. 144 int[] setNewDisplayOverrideConfiguration(in Configuration overrideConfig, int displayId); 145 146 void startFreezingScreen(int exitAnim, int enterAnim); 147 void stopFreezingScreen(); 148 149 // these require DISABLE_KEYGUARD permission 150 void disableKeyguard(IBinder token, String tag); 151 void reenableKeyguard(IBinder token); 152 void exitKeyguardSecurely(IOnKeyguardExitResult callback); 153 boolean isKeyguardLocked(); 154 boolean isKeyguardSecure(); 155 void dismissKeyguard(IKeyguardDismissCallback callback, CharSequence message); 156 157 // Requires INTERACT_ACROSS_USERS_FULL permission 158 void setSwitchingUser(boolean switching); 159 160 void closeSystemDialogs(String reason); 161 162 // These can only be called with the SET_ANIMATON_SCALE permission. 163 float getAnimationScale(int which); 164 float[] getAnimationScales(); 165 void setAnimationScale(int which, float scale); 166 void setAnimationScales(in float[] scales); 167 168 float getCurrentAnimatorScale(); 169 170 // For testing 171 void setInTouchMode(boolean showFocus); 172 173 // For StrictMode flashing a red border on violations from the UI 174 // thread. The uid/pid is implicit from the Binder call, and the Window 175 // Manager uses that to determine whether or not the red border should 176 // actually be shown. (it will be ignored that pid doesn't have windows 177 // on screen) 178 void showStrictModeViolation(boolean on); 179 180 // Proxy to set the system property for whether the flashing 181 // should be enabled. The 'enabled' value is null or blank for 182 // the system default (differs per build variant) or any valid 183 // boolean string as parsed by SystemProperties.getBoolean(). 184 void setStrictModeVisualIndicatorPreference(String enabled); 185 186 /** 187 * Set whether screen capture is disabled for all windows of a specific user from 188 * the device policy cache. 189 */ 190 void refreshScreenCaptureDisabled(int userId); 191 192 // These can only be called with the SET_ORIENTATION permission. 193 /** 194 * Update the current screen rotation based on the current state of 195 * the world. 196 * @param alwaysSendConfiguration Flag to force a new configuration to 197 * be evaluated. This can be used when there are other parameters in 198 * configuration that are changing. 199 * @param forceRelayout If true, the window manager will always do a relayout 200 * of its windows even if the rotation hasn't changed. 201 */ 202 void updateRotation(boolean alwaysSendConfiguration, boolean forceRelayout); 203 204 /** 205 * Retrieve the current orientation of the primary screen. 206 * @return Constant as per {@link android.view.Surface.Rotation}. 207 * 208 * @see android.view.Display#DEFAULT_DISPLAY 209 */ 210 int getDefaultDisplayRotation(); 211 212 /** 213 * Watch the rotation of the specified screen. Returns the current rotation, 214 * calls back when it changes. 215 */ 216 int watchRotation(IRotationWatcher watcher, int displayId); 217 218 /** 219 * Remove a rotation watcher set using watchRotation. 220 * @hide 221 */ 222 void removeRotationWatcher(IRotationWatcher watcher); 223 224 /** 225 * Determine the preferred edge of the screen to pin the compact options menu against. 226 * @return a Gravity value for the options menu panel 227 * @hide 228 */ 229 int getPreferredOptionsPanelGravity(); 230 231 /** 232 * Lock the device orientation to the specified rotation, or to the 233 * current rotation if -1. Sensor input will be ignored until 234 * thawRotation() is called. 235 * @hide 236 */ 237 void freezeRotation(int rotation); 238 239 /** 240 * Release the orientation lock imposed by freezeRotation(). 241 * @hide 242 */ 243 void thawRotation(); 244 245 /** 246 * Gets whether the rotation is frozen. 247 * 248 * @return Whether the rotation is frozen. 249 */ 250 boolean isRotationFrozen(); 251 252 /** 253 * Screenshot the current wallpaper layer, including the whole screen. 254 */ 255 Bitmap screenshotWallpaper(); 256 257 /** 258 * Registers a wallpaper visibility listener. 259 * @return Current visibility. 260 */ 261 boolean registerWallpaperVisibilityListener(IWallpaperVisibilityListener listener, 262 int displayId); 263 264 /** 265 * Remove a visibility watcher that was added using registerWallpaperVisibilityListener. 266 */ 267 void unregisterWallpaperVisibilityListener(IWallpaperVisibilityListener listener, 268 int displayId); 269 270 /** 271 * Used only for assist -- request a screenshot of the current application. 272 */ 273 boolean requestAssistScreenshot(IAssistDataReceiver receiver); 274 275 /** 276 * Called by the status bar to notify Views of changes to System UI visiblity. 277 */ 278 oneway void statusBarVisibilityChanged(int visibility); 279 280 /** 281 * Called by System UI to notify of changes to the visibility of Recents. 282 */ 283 oneway void setRecentsVisibility(boolean visible); 284 285 /** 286 * Called by System UI to notify of changes to the visibility of PIP. 287 */ 288 oneway void setPipVisibility(boolean visible); 289 290 /** 291 * Called by System UI to notify of changes to the visibility and height of the shelf. 292 */ 293 void setShelfHeight(boolean visible, int shelfHeight); 294 295 /** 296 * Called by System UI to enable or disable haptic feedback on the navigation bar buttons. 297 */ 298 void setNavBarVirtualKeyHapticFeedbackEnabled(boolean enabled); 299 300 /** 301 * Device has a software navigation bar (separate from the status bar). 302 */ 303 boolean hasNavigationBar(); 304 305 /** 306 * Get the position of the nav bar 307 */ 308 int getNavBarPosition(); 309 310 /** 311 * Lock the device immediately with the specified options (can be null). 312 */ 313 void lockNow(in Bundle options); 314 315 /** 316 * Device is in safe mode. 317 */ 318 boolean isSafeModeEnabled(); 319 320 /** 321 * Enables the screen if all conditions are met. 322 */ 323 void enableScreenIfNeeded(); 324 325 /** 326 * Clears the frame statistics for a given window. 327 * 328 * @param token The window token. 329 * @return Whether the frame statistics were cleared. 330 */ 331 boolean clearWindowContentFrameStats(IBinder token); 332 333 /** 334 * Gets the content frame statistics for a given window. 335 * 336 * @param token The window token. 337 * @return The frame statistics or null if the window does not exist. 338 */ 339 WindowContentFrameStats getWindowContentFrameStats(IBinder token); 340 341 /** 342 * @return the dock side the current docked stack is at; must be one of the 343 * WindowManagerGlobal.DOCKED_* values 344 */ 345 int getDockedStackSide(); 346 347 /** 348 * Sets the region the user can touch the divider. This region will be excluded from the region 349 * which is used to cause a focus switch when dispatching touch. 350 */ 351 void setDockedStackDividerTouchRegion(in Rect touchableRegion); 352 353 /** 354 * Registers a listener that will be called when the dock divider changes its visibility or when 355 * the docked stack gets added/removed. 356 */ 357 void registerDockedStackListener(IDockedStackListener listener); 358 359 /** 360 * Registers a listener that will be called when the pinned stack state changes. 361 */ 362 void registerPinnedStackListener(int displayId, IPinnedStackListener listener); 363 364 /** 365 * Updates the dim layer used while resizing. 366 * 367 * @param visible Whether the dim layer should be visible. 368 * @param targetWindowingMode The windowing mode of the stack the dim layer should be placed on. 369 * @param alpha The translucency of the dim layer, between 0 and 1. 370 */ 371 void setResizeDimLayer(boolean visible, int targetWindowingMode, float alpha); 372 373 /** 374 * Requests Keyboard Shortcuts from the displayed window. 375 * 376 * @param receiver The receiver to deliver the results to. 377 */ 378 void requestAppKeyboardShortcuts(IResultReceiver receiver, int deviceId); 379 380 /** 381 * Retrieves the current stable insets from the primary display. 382 */ 383 void getStableInsets(int displayId, out Rect outInsets); 384 385 /** 386 * Register shortcut key. Shortcut code is packed as: 387 * (MetaState << Integer.SIZE) | KeyCode 388 * @hide 389 */ 390 void registerShortcutKey(in long shortcutCode, IShortcutService keySubscriber); 391 392 /** 393 * Create an input consumer by name. 394 */ 395 void createInputConsumer(IBinder token, String name, out InputChannel inputChannel); 396 397 /** 398 * Destroy an input consumer by name. This method will also dispose the input channels 399 * associated with that InputConsumer. 400 */ 401 boolean destroyInputConsumer(String name); 402 403 /** 404 * Return the touch region for the current IME window, or an empty region if there is none. 405 */ 406 Region getCurrentImeTouchRegion(); 407 408 /** 409 * Starts a window trace. 410 */ 411 void startWindowTrace(); 412 413 /** 414 * Stops a window trace. 415 */ 416 void stopWindowTrace(); 417 418 /** 419 * Returns true if window trace is enabled. 420 */ 421 boolean isWindowTraceEnabled(); 422 423 /** 424 * Requests that the WindowManager sends WindowManagerPolicy#ACTION_USER_ACTIVITY_NOTIFICATION 425 * on the next user activity. 426 */ 427 void requestUserActivityNotification(); 428 429 /** 430 * Notify WindowManager that it should not override the info in DisplayManager for the specified 431 * display. This can disable letter- or pillar-boxing applied in DisplayManager when the metrics 432 * of the logical display reported from WindowManager do not correspond to the metrics of the 433 * physical display it is based on. 434 * 435 * @param displayId The id of the display. 436 */ 437 void dontOverrideDisplayInfo(int displayId); 438 } 439