diff options
| author | 2016-11-01 20:54:46 -0700 | |
|---|---|---|
| committer | 2016-11-02 18:25:34 +0000 | |
| commit | 5b6714c2fa3cdd87642766e3fb0a1478d2422ec2 (patch) | |
| tree | b7a4837f846b4c9d219c4711d32c9da72e30334e | |
| parent | ac2561e8206ac42921bb6ddbb0a5972fb360e394 (diff) | |
Added support for window TYPE_PRESENTATION
Switched presentation feature to use new window TYPE_PRESENTATION
and also add its own window token to the display the presentation
is running on. This is needed as window manager no longer allows
tokens to have windows on multiple displays.
Bug: 32566372
Test: Presentation mode works.
Change-Id: I9c2998311b65640743b8e23ec4f10bf1ffbfd785
4 files changed, 117 insertions, 46 deletions
diff --git a/core/java/android/app/Presentation.java b/core/java/android/app/Presentation.java index 70007f584645..af55788e617f 100644 --- a/core/java/android/app/Presentation.java +++ b/core/java/android/app/Presentation.java @@ -16,13 +16,21 @@ package android.app; +import static android.content.Context.DISPLAY_SERVICE; +import static android.content.Context.WINDOW_SERVICE; +import static android.view.WindowManager.LayoutParams.TYPE_PRESENTATION; + import android.content.Context; import android.content.res.Resources; import android.hardware.display.DisplayManager; import android.hardware.display.DisplayManager.DisplayListener; +import android.os.Binder; +import android.os.IBinder; import android.view.ContextThemeWrapper; import android.view.Display; import android.view.Gravity; +import android.view.Window; +import android.view.WindowManager; import android.view.WindowManagerImpl; import android.os.Handler; import android.os.Message; @@ -145,6 +153,7 @@ public class Presentation extends Dialog { private final Display mDisplay; private final DisplayManager mDisplayManager; + private final IBinder mToken = new Binder(); /** * Creates a new presentation that is attached to the specified display @@ -177,9 +186,14 @@ public class Presentation extends Dialog { super(createPresentationContext(outerContext, display, theme), theme, false); mDisplay = display; - mDisplayManager = (DisplayManager)getContext().getSystemService(Context.DISPLAY_SERVICE); + mDisplayManager = (DisplayManager)getContext().getSystemService(DISPLAY_SERVICE); - getWindow().setGravity(Gravity.FILL); + final Window w = getWindow(); + final WindowManager.LayoutParams attr = w.getAttributes(); + attr.token = mToken; + w.setAttributes(attr); + w.setGravity(Gravity.FILL); + w.setType(TYPE_PRESENTATION); setCanceledOnTouchOutside(false); } @@ -308,13 +322,13 @@ public class Presentation extends Dialog { // such as the parent window, which is important if the presentation uses // an application window type. final WindowManagerImpl outerWindowManager = - (WindowManagerImpl)outerContext.getSystemService(Context.WINDOW_SERVICE); + (WindowManagerImpl)outerContext.getSystemService(WINDOW_SERVICE); final WindowManagerImpl displayWindowManager = outerWindowManager.createPresentationWindowManager(displayContext); return new ContextThemeWrapper(displayContext, theme) { @Override public Object getSystemService(String name) { - if (Context.WINDOW_SERVICE.equals(name)) { + if (WINDOW_SERVICE.equals(name)) { return displayWindowManager; } return super.getSystemService(name); diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java index 106b21111cd0..2971280f65d9 100644 --- a/core/java/android/view/WindowManager.java +++ b/core/java/android/view/WindowManager.java @@ -249,48 +249,92 @@ public interface WindowManager extends ViewManager { * @see #TYPE_INPUT_METHOD_DIALOG */ @ViewDebug.ExportedProperty(mapping = { - @ViewDebug.IntToString(from = TYPE_BASE_APPLICATION, to = "TYPE_BASE_APPLICATION"), - @ViewDebug.IntToString(from = TYPE_APPLICATION, to = "TYPE_APPLICATION"), - @ViewDebug.IntToString(from = TYPE_APPLICATION_STARTING, to = "TYPE_APPLICATION_STARTING"), - @ViewDebug.IntToString(from = TYPE_DRAWN_APPLICATION, to = "TYPE_DRAWN_APPLICATION"), - @ViewDebug.IntToString(from = TYPE_APPLICATION_PANEL, to = "TYPE_APPLICATION_PANEL"), - @ViewDebug.IntToString(from = TYPE_APPLICATION_MEDIA, to = "TYPE_APPLICATION_MEDIA"), - @ViewDebug.IntToString(from = TYPE_APPLICATION_SUB_PANEL, to = "TYPE_APPLICATION_SUB_PANEL"), - @ViewDebug.IntToString(from = TYPE_APPLICATION_ABOVE_SUB_PANEL, to = "TYPE_APPLICATION_ABOVE_SUB_PANEL"), - @ViewDebug.IntToString(from = TYPE_APPLICATION_ATTACHED_DIALOG, to = "TYPE_APPLICATION_ATTACHED_DIALOG"), - @ViewDebug.IntToString(from = TYPE_APPLICATION_MEDIA_OVERLAY, to = "TYPE_APPLICATION_MEDIA_OVERLAY"), - @ViewDebug.IntToString(from = TYPE_STATUS_BAR, to = "TYPE_STATUS_BAR"), - @ViewDebug.IntToString(from = TYPE_SEARCH_BAR, to = "TYPE_SEARCH_BAR"), - @ViewDebug.IntToString(from = TYPE_PHONE, to = "TYPE_PHONE"), - @ViewDebug.IntToString(from = TYPE_SYSTEM_ALERT, to = "TYPE_SYSTEM_ALERT"), - @ViewDebug.IntToString(from = TYPE_TOAST, to = "TYPE_TOAST"), - @ViewDebug.IntToString(from = TYPE_SYSTEM_OVERLAY, to = "TYPE_SYSTEM_OVERLAY"), - @ViewDebug.IntToString(from = TYPE_PRIORITY_PHONE, to = "TYPE_PRIORITY_PHONE"), - @ViewDebug.IntToString(from = TYPE_SYSTEM_DIALOG, to = "TYPE_SYSTEM_DIALOG"), - @ViewDebug.IntToString(from = TYPE_KEYGUARD_DIALOG, to = "TYPE_KEYGUARD_DIALOG"), - @ViewDebug.IntToString(from = TYPE_SYSTEM_ERROR, to = "TYPE_SYSTEM_ERROR"), - @ViewDebug.IntToString(from = TYPE_INPUT_METHOD, to = "TYPE_INPUT_METHOD"), - @ViewDebug.IntToString(from = TYPE_INPUT_METHOD_DIALOG, to = "TYPE_INPUT_METHOD_DIALOG"), - @ViewDebug.IntToString(from = TYPE_WALLPAPER, to = "TYPE_WALLPAPER"), - @ViewDebug.IntToString(from = TYPE_STATUS_BAR_PANEL, to = "TYPE_STATUS_BAR_PANEL"), - @ViewDebug.IntToString(from = TYPE_SECURE_SYSTEM_OVERLAY, to = "TYPE_SECURE_SYSTEM_OVERLAY"), - @ViewDebug.IntToString(from = TYPE_DRAG, to = "TYPE_DRAG"), - @ViewDebug.IntToString(from = TYPE_STATUS_BAR_SUB_PANEL, to = "TYPE_STATUS_BAR_SUB_PANEL"), - @ViewDebug.IntToString(from = TYPE_POINTER, to = "TYPE_POINTER"), - @ViewDebug.IntToString(from = TYPE_NAVIGATION_BAR, to = "TYPE_NAVIGATION_BAR"), - @ViewDebug.IntToString(from = TYPE_VOLUME_OVERLAY, to = "TYPE_VOLUME_OVERLAY"), - @ViewDebug.IntToString(from = TYPE_BOOT_PROGRESS, to = "TYPE_BOOT_PROGRESS"), - @ViewDebug.IntToString(from = TYPE_INPUT_CONSUMER, to = "TYPE_INPUT_CONSUMER"), - @ViewDebug.IntToString(from = TYPE_DREAM, to = "TYPE_DREAM"), - @ViewDebug.IntToString(from = TYPE_NAVIGATION_BAR_PANEL, to = "TYPE_NAVIGATION_BAR_PANEL"), - @ViewDebug.IntToString(from = TYPE_DISPLAY_OVERLAY, to = "TYPE_DISPLAY_OVERLAY"), - @ViewDebug.IntToString(from = TYPE_MAGNIFICATION_OVERLAY, to = "TYPE_MAGNIFICATION_OVERLAY"), - @ViewDebug.IntToString(from = TYPE_PRIVATE_PRESENTATION, to = "TYPE_PRIVATE_PRESENTATION"), - @ViewDebug.IntToString(from = TYPE_VOICE_INTERACTION, to = "TYPE_VOICE_INTERACTION"), - @ViewDebug.IntToString(from = TYPE_VOICE_INTERACTION_STARTING, to = "TYPE_VOICE_INTERACTION_STARTING"), - @ViewDebug.IntToString(from = TYPE_DOCK_DIVIDER, to = "TYPE_DOCK_DIVIDER"), - @ViewDebug.IntToString(from = TYPE_QS_DIALOG, to = "TYPE_QS_DIALOG"), - @ViewDebug.IntToString(from = TYPE_SCREENSHOT, to = "TYPE_SCREENSHOT") + @ViewDebug.IntToString(from = TYPE_BASE_APPLICATION, + to = "TYPE_BASE_APPLICATION"), + @ViewDebug.IntToString(from = TYPE_APPLICATION, + to = "TYPE_APPLICATION"), + @ViewDebug.IntToString(from = TYPE_APPLICATION_STARTING, + to = "TYPE_APPLICATION_STARTING"), + @ViewDebug.IntToString(from = TYPE_DRAWN_APPLICATION, + to = "TYPE_DRAWN_APPLICATION"), + @ViewDebug.IntToString(from = TYPE_APPLICATION_PANEL, + to = "TYPE_APPLICATION_PANEL"), + @ViewDebug.IntToString(from = TYPE_APPLICATION_MEDIA, + to = "TYPE_APPLICATION_MEDIA"), + @ViewDebug.IntToString(from = TYPE_APPLICATION_SUB_PANEL, + to = "TYPE_APPLICATION_SUB_PANEL"), + @ViewDebug.IntToString(from = TYPE_APPLICATION_ABOVE_SUB_PANEL, + to = "TYPE_APPLICATION_ABOVE_SUB_PANEL"), + @ViewDebug.IntToString(from = TYPE_APPLICATION_ATTACHED_DIALOG, + to = "TYPE_APPLICATION_ATTACHED_DIALOG"), + @ViewDebug.IntToString(from = TYPE_APPLICATION_MEDIA_OVERLAY, + to = "TYPE_APPLICATION_MEDIA_OVERLAY"), + @ViewDebug.IntToString(from = TYPE_STATUS_BAR, + to = "TYPE_STATUS_BAR"), + @ViewDebug.IntToString(from = TYPE_SEARCH_BAR, + to = "TYPE_SEARCH_BAR"), + @ViewDebug.IntToString(from = TYPE_PHONE, + to = "TYPE_PHONE"), + @ViewDebug.IntToString(from = TYPE_SYSTEM_ALERT, + to = "TYPE_SYSTEM_ALERT"), + @ViewDebug.IntToString(from = TYPE_TOAST, + to = "TYPE_TOAST"), + @ViewDebug.IntToString(from = TYPE_SYSTEM_OVERLAY, + to = "TYPE_SYSTEM_OVERLAY"), + @ViewDebug.IntToString(from = TYPE_PRIORITY_PHONE, + to = "TYPE_PRIORITY_PHONE"), + @ViewDebug.IntToString(from = TYPE_SYSTEM_DIALOG, + to = "TYPE_SYSTEM_DIALOG"), + @ViewDebug.IntToString(from = TYPE_KEYGUARD_DIALOG, + to = "TYPE_KEYGUARD_DIALOG"), + @ViewDebug.IntToString(from = TYPE_SYSTEM_ERROR, + to = "TYPE_SYSTEM_ERROR"), + @ViewDebug.IntToString(from = TYPE_INPUT_METHOD, + to = "TYPE_INPUT_METHOD"), + @ViewDebug.IntToString(from = TYPE_INPUT_METHOD_DIALOG, + to = "TYPE_INPUT_METHOD_DIALOG"), + @ViewDebug.IntToString(from = TYPE_WALLPAPER, + to = "TYPE_WALLPAPER"), + @ViewDebug.IntToString(from = TYPE_STATUS_BAR_PANEL, + to = "TYPE_STATUS_BAR_PANEL"), + @ViewDebug.IntToString(from = TYPE_SECURE_SYSTEM_OVERLAY, + to = "TYPE_SECURE_SYSTEM_OVERLAY"), + @ViewDebug.IntToString(from = TYPE_DRAG, + to = "TYPE_DRAG"), + @ViewDebug.IntToString(from = TYPE_STATUS_BAR_SUB_PANEL, + to = "TYPE_STATUS_BAR_SUB_PANEL"), + @ViewDebug.IntToString(from = TYPE_POINTER, + to = "TYPE_POINTER"), + @ViewDebug.IntToString(from = TYPE_NAVIGATION_BAR, + to = "TYPE_NAVIGATION_BAR"), + @ViewDebug.IntToString(from = TYPE_VOLUME_OVERLAY, + to = "TYPE_VOLUME_OVERLAY"), + @ViewDebug.IntToString(from = TYPE_BOOT_PROGRESS, + to = "TYPE_BOOT_PROGRESS"), + @ViewDebug.IntToString(from = TYPE_INPUT_CONSUMER, + to = "TYPE_INPUT_CONSUMER"), + @ViewDebug.IntToString(from = TYPE_DREAM, + to = "TYPE_DREAM"), + @ViewDebug.IntToString(from = TYPE_NAVIGATION_BAR_PANEL, + to = "TYPE_NAVIGATION_BAR_PANEL"), + @ViewDebug.IntToString(from = TYPE_DISPLAY_OVERLAY, + to = "TYPE_DISPLAY_OVERLAY"), + @ViewDebug.IntToString(from = TYPE_MAGNIFICATION_OVERLAY, + to = "TYPE_MAGNIFICATION_OVERLAY"), + @ViewDebug.IntToString(from = TYPE_PRESENTATION, + to = "TYPE_PRESENTATION"), + @ViewDebug.IntToString(from = TYPE_PRIVATE_PRESENTATION, + to = "TYPE_PRIVATE_PRESENTATION"), + @ViewDebug.IntToString(from = TYPE_VOICE_INTERACTION, + to = "TYPE_VOICE_INTERACTION"), + @ViewDebug.IntToString(from = TYPE_VOICE_INTERACTION_STARTING, + to = "TYPE_VOICE_INTERACTION_STARTING"), + @ViewDebug.IntToString(from = TYPE_DOCK_DIVIDER, + to = "TYPE_DOCK_DIVIDER"), + @ViewDebug.IntToString(from = TYPE_QS_DIALOG, + to = "TYPE_QS_DIALOG"), + @ViewDebug.IntToString(from = TYPE_SCREENSHOT, + to = "TYPE_SCREENSHOT") }) public int type; @@ -651,6 +695,13 @@ public interface WindowManager extends ViewManager { public static final int TYPE_SCREENSHOT = FIRST_SYSTEM_WINDOW + 36; /** + * Window type: Window for Presentation on an external display. + * @see android.app.Presentation + * @hide + */ + public static final int TYPE_PRESENTATION = FIRST_SYSTEM_WINDOW + 37; + + /** * End of types of system windows. */ public static final int LAST_SYSTEM_WINDOW = 2999; diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index f9e1575fccb8..2ca0db43294e 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -81,6 +81,7 @@ import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR; import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL; import static android.view.WindowManager.LayoutParams.TYPE_PHONE; import static android.view.WindowManager.LayoutParams.TYPE_POINTER; +import static android.view.WindowManager.LayoutParams.TYPE_PRESENTATION; import static android.view.WindowManager.LayoutParams.TYPE_PRIORITY_PHONE; import static android.view.WindowManager.LayoutParams.TYPE_PRIVATE_PRESENTATION; import static android.view.WindowManager.LayoutParams.TYPE_QS_DIALOG; @@ -2278,6 +2279,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { case TYPE_DREAM: case TYPE_INPUT_METHOD: case TYPE_WALLPAPER: + case TYPE_PRESENTATION: case TYPE_PRIVATE_PRESENTATION: case TYPE_VOICE_INTERACTION: case TYPE_ACCESSIBILITY_OVERLAY: @@ -2382,6 +2384,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { case TYPE_STATUS_BAR_SUB_PANEL: case TYPE_SYSTEM_DIALOG: case TYPE_VOLUME_OVERLAY: + case TYPE_PRESENTATION: case TYPE_PRIVATE_PRESENTATION: case TYPE_DOCK_DIVIDER: break; @@ -2546,6 +2549,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { return 2; } switch (type) { + case TYPE_PRESENTATION: case TYPE_PRIVATE_PRESENTATION: return 2; case TYPE_WALLPAPER: diff --git a/services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java b/services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java index 3e7d2727fa8d..38a98b26d5f1 100644 --- a/services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java +++ b/services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java @@ -61,6 +61,7 @@ import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL; import static android.view.WindowManager.LayoutParams.TYPE_PHONE; import static android.view.WindowManager.LayoutParams.TYPE_POINTER; import static android.view.WindowManager.LayoutParams.TYPE_PRIORITY_PHONE; +import static android.view.WindowManager.LayoutParams.TYPE_PRESENTATION; import static android.view.WindowManager.LayoutParams.TYPE_PRIVATE_PRESENTATION; import static android.view.WindowManager.LayoutParams.TYPE_QS_DIALOG; import static android.view.WindowManager.LayoutParams.TYPE_SCREENSHOT; @@ -151,6 +152,7 @@ class TestWindowManagerPolicy implements WindowManagerPolicy { return 2; } switch (type) { + case TYPE_PRESENTATION: case TYPE_PRIVATE_PRESENTATION: return 2; case TYPE_WALLPAPER: |