summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Wale Ogunwale <ogunwale@google.com> 2016-11-01 20:54:46 -0700
committer Wale Ogunwale <ogunwale@google.com> 2016-11-02 18:25:34 +0000
commit5b6714c2fa3cdd87642766e3fb0a1478d2422ec2 (patch)
treeb7a4837f846b4c9d219c4711d32c9da72e30334e
parentac2561e8206ac42921bb6ddbb0a5972fb360e394 (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
-rw-r--r--core/java/android/app/Presentation.java22
-rw-r--r--core/java/android/view/WindowManager.java135
-rw-r--r--services/core/java/com/android/server/policy/PhoneWindowManager.java4
-rw-r--r--services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java2
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: