summaryrefslogtreecommitdiffstats
path: root/services/java/com/android/server/display
diff options
context:
space:
mode:
authorJeff Brown <jeffbrown@google.com>2013-08-02 18:14:46 -0700
committerJeff Brown <jeffbrown@google.com>2013-08-02 19:44:19 -0700
commit040f44d0ebdd3a50c59ba0cbc0b023fd2d71039d (patch)
tree9dccd7d594c5854c25581f5ee669c73b2b3b50e4 /services/java/com/android/server/display
parent1e01943fe1876144f0c180163b5b39ee0a9a91ee (diff)
downloadframeworks_base-040f44d0ebdd3a50c59ba0cbc0b023fd2d71039d.zip
frameworks_base-040f44d0ebdd3a50c59ba0cbc0b023fd2d71039d.tar.gz
frameworks_base-040f44d0ebdd3a50c59ba0cbc0b023fd2d71039d.tar.bz2
Add support for secure overlay displays for development.
Change-Id: I426115ec5a3fbda52a481097731abc8b3d9013a4
Diffstat (limited to 'services/java/com/android/server/display')
-rw-r--r--services/java/com/android/server/display/OverlayDisplayAdapter.java26
-rw-r--r--services/java/com/android/server/display/OverlayDisplayWindow.java14
2 files changed, 30 insertions, 10 deletions
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;
}