diff options
author | Jeff Brown <jeffbrown@google.com> | 2013-08-02 18:14:46 -0700 |
---|---|---|
committer | Jeff Brown <jeffbrown@google.com> | 2013-08-02 19:44:19 -0700 |
commit | 040f44d0ebdd3a50c59ba0cbc0b023fd2d71039d (patch) | |
tree | 9dccd7d594c5854c25581f5ee669c73b2b3b50e4 | |
parent | 1e01943fe1876144f0c180163b5b39ee0a9a91ee (diff) | |
download | frameworks_base-040f44d0ebdd3a50c59ba0cbc0b023fd2d71039d.zip frameworks_base-040f44d0ebdd3a50c59ba0cbc0b023fd2d71039d.tar.gz frameworks_base-040f44d0ebdd3a50c59ba0cbc0b023fd2d71039d.tar.bz2 |
Add support for secure overlay displays for development.
Change-Id: I426115ec5a3fbda52a481097731abc8b3d9013a4
-rw-r--r-- | core/res/res/values/strings.xml | 3 | ||||
-rwxr-xr-x | core/res/res/values/symbols.xml | 1 | ||||
-rw-r--r-- | services/java/com/android/server/display/OverlayDisplayAdapter.java | 26 | ||||
-rw-r--r-- | services/java/com/android/server/display/OverlayDisplayWindow.java | 14 |
4 files changed, 34 insertions, 10 deletions
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index eb9941a..a9d1c86 100644 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -4036,6 +4036,9 @@ <!-- Title text to show within the overlay. [CHAR LIMIT=50] --> <string name="display_manager_overlay_display_title"><xliff:g id="name">%1$s</xliff:g>: <xliff:g id="width">%2$d</xliff:g>x<xliff:g id="height">%3$d</xliff:g>, <xliff:g id="dpi">%4$d</xliff:g> dpi</string> + <!-- Title text to append when the display is secure. [CHAR LIMIT=30] --> + <string name="display_manager_overlay_display_secure_suffix">, secure</string> + <!-- Title of the notification to indicate an active wifi display connection. [CHAR LIMIT=50] --> <string name="wifi_display_notification_title">Wireless display is connected</string> <!-- Message of the notification to indicate an active wifi display connection. [CHAR LIMIT=80] --> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 3e29221..932d607 100755 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -484,6 +484,7 @@ <java-symbol type="string" name="display_manager_built_in_display_name" /> <java-symbol type="string" name="display_manager_hdmi_display_name" /> <java-symbol type="string" name="display_manager_overlay_display_name" /> + <java-symbol type="string" name="display_manager_overlay_display_secure_suffix" /> <java-symbol type="string" name="display_manager_overlay_display_title" /> <java-symbol type="string" name="double_tap_toast" /> <java-symbol type="string" name="elapsed_time_short_format_h_mm_ss" /> diff --git a/services/java/com/android/server/display/OverlayDisplayAdapter.java b/services/java/com/android/server/display/OverlayDisplayAdapter.java index a18352c..3152897 100644 --- a/services/java/com/android/server/display/OverlayDisplayAdapter.java +++ b/services/java/com/android/server/display/OverlayDisplayAdapter.java @@ -59,7 +59,7 @@ final class OverlayDisplayAdapter extends DisplayAdapter { private static final int MAX_HEIGHT = 4096; private static final Pattern SETTING_PATTERN = - Pattern.compile("(\\d+)x(\\d+)/(\\d+)"); + Pattern.compile("(\\d+)x(\\d+)/(\\d+)(,[a-z]+)*"); private final Handler mUiHandler; private final ArrayList<OverlayDisplayHandle> mOverlays = @@ -143,6 +143,7 @@ final class OverlayDisplayAdapter extends DisplayAdapter { int width = Integer.parseInt(matcher.group(1), 10); int height = Integer.parseInt(matcher.group(2), 10); int densityDpi = Integer.parseInt(matcher.group(3), 10); + String flagString = matcher.group(4); if (width >= MIN_WIDTH && width <= MAX_WIDTH && height >= MIN_HEIGHT && height <= MAX_HEIGHT && densityDpi >= DisplayMetrics.DENSITY_LOW @@ -152,13 +153,14 @@ final class OverlayDisplayAdapter extends DisplayAdapter { com.android.internal.R.string.display_manager_overlay_display_name, number); int gravity = chooseOverlayGravity(number); + boolean secure = flagString != null && flagString.contains(",secure"); Slog.i(TAG, "Showing overlay display device #" + number + ": name=" + name + ", width=" + width + ", height=" + height - + ", densityDpi=" + densityDpi); + + ", densityDpi=" + densityDpi + ", secure=" + secure); mOverlays.add(new OverlayDisplayHandle(name, - width, height, densityDpi, gravity)); + width, height, densityDpi, gravity, secure)); continue; } } catch (NumberFormatException ex) { @@ -190,13 +192,14 @@ final class OverlayDisplayAdapter extends DisplayAdapter { private final int mHeight; private final float mRefreshRate; private final int mDensityDpi; + private final boolean mSecure; private Surface mSurface; private SurfaceTexture mSurfaceTexture; private DisplayDeviceInfo mInfo; public OverlayDisplayDevice(IBinder displayToken, String name, - int width, int height, float refreshRate, int densityDpi, + int width, int height, float refreshRate, int densityDpi, boolean secure, SurfaceTexture surfaceTexture) { super(OverlayDisplayAdapter.this, displayToken); mName = name; @@ -204,6 +207,7 @@ final class OverlayDisplayAdapter extends DisplayAdapter { mHeight = height; mRefreshRate = refreshRate; mDensityDpi = densityDpi; + mSecure = secure; mSurfaceTexture = surfaceTexture; } @@ -242,6 +246,9 @@ final class OverlayDisplayAdapter extends DisplayAdapter { mInfo.xDpi = mDensityDpi; mInfo.yDpi = mDensityDpi; mInfo.flags = 0; + if (mSecure) { + mInfo.flags |= DisplayDeviceInfo.FLAG_SECURE; + } mInfo.type = Display.TYPE_OVERLAY; mInfo.touch = DisplayDeviceInfo.TOUCH_NONE; } @@ -261,17 +268,19 @@ final class OverlayDisplayAdapter extends DisplayAdapter { private final int mHeight; private final int mDensityDpi; private final int mGravity; + private final boolean mSecure; private OverlayDisplayWindow mWindow; private OverlayDisplayDevice mDevice; public OverlayDisplayHandle(String name, - int width, int height, int densityDpi, int gravity) { + int width, int height, int densityDpi, int gravity, boolean secure) { mName = name; mWidth = width; mHeight = height; mDensityDpi = densityDpi; mGravity = gravity; + mSecure = secure; mUiHandler.post(mShowRunnable); } @@ -285,9 +294,9 @@ final class OverlayDisplayAdapter extends DisplayAdapter { @Override public void onWindowCreated(SurfaceTexture surfaceTexture, float refreshRate) { synchronized (getSyncRoot()) { - IBinder displayToken = SurfaceControl.createDisplay(mName, false); + IBinder displayToken = SurfaceControl.createDisplay(mName, mSecure); mDevice = new OverlayDisplayDevice(displayToken, mName, - mWidth, mHeight, refreshRate, mDensityDpi, surfaceTexture); + mWidth, mHeight, refreshRate, mDensityDpi, mSecure, surfaceTexture); sendDisplayDeviceEventLocked(mDevice, DISPLAY_DEVICE_EVENT_ADDED); } @@ -310,6 +319,7 @@ final class OverlayDisplayAdapter extends DisplayAdapter { pw.println(" mHeight=" + mHeight); pw.println(" mDensityDpi=" + mDensityDpi); pw.println(" mGravity=" + mGravity); + pw.println(" mSecure=" + mSecure); // Try to dump the window state. if (mWindow != null) { @@ -324,7 +334,7 @@ final class OverlayDisplayAdapter extends DisplayAdapter { @Override public void run() { OverlayDisplayWindow window = new OverlayDisplayWindow(getContext(), - mName, mWidth, mHeight, mDensityDpi, mGravity, + mName, mWidth, mHeight, mDensityDpi, mGravity, mSecure, OverlayDisplayHandle.this); window.show(); diff --git a/services/java/com/android/server/display/OverlayDisplayWindow.java b/services/java/com/android/server/display/OverlayDisplayWindow.java index a0edced..f1dd60a 100644 --- a/services/java/com/android/server/display/OverlayDisplayWindow.java +++ b/services/java/com/android/server/display/OverlayDisplayWindow.java @@ -64,8 +64,9 @@ final class OverlayDisplayWindow implements DumpUtils.Dump { private final int mHeight; private final int mDensityDpi; private final int mGravity; + private final boolean mSecure; private final Listener mListener; - private final String mTitle; + private String mTitle; private final DisplayManager mDisplayManager; private final WindowManager mWindowManager; @@ -92,17 +93,23 @@ final class OverlayDisplayWindow implements DumpUtils.Dump { private float mLiveScale = 1.0f; public OverlayDisplayWindow(Context context, String name, - int width, int height, int densityDpi, int gravity, Listener listener) { + int width, int height, int densityDpi, int gravity, boolean secure, + Listener listener) { mContext = context; mName = name; mWidth = width; mHeight = height; mDensityDpi = densityDpi; mGravity = gravity; + mSecure = secure; mListener = listener; mTitle = context.getResources().getString( com.android.internal.R.string.display_manager_overlay_display_title, mName, mWidth, mHeight, mDensityDpi); + if (secure) { + mTitle += context.getResources().getString( + com.android.internal.R.string.display_manager_overlay_display_secure_suffix); + } mDisplayManager = (DisplayManager)context.getSystemService( Context.DISPLAY_SERVICE); @@ -197,6 +204,9 @@ final class OverlayDisplayWindow implements DumpUtils.Dump { | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED; + if (mSecure) { + mWindowParams.flags |= WindowManager.LayoutParams.FLAG_SECURE; + } if (DISABLE_MOVE_AND_RESIZE) { mWindowParams.flags |= WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE; } |