VirtualDisplay.java revision 92207df753c27b094e9e0ca80d41bc0d54dc6bd5
1a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown/* 2a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * Copyright (C) 2013 The Android Open Source Project 3a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * 4a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * Licensed under the Apache License, Version 2.0 (the "License"); 5a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * you may not use this file except in compliance with the License. 6a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * You may obtain a copy of the License at 7a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * 8a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * http://www.apache.org/licenses/LICENSE-2.0 9a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * 10a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * Unless required by applicable law or agreed to in writing, software 11a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * distributed under the License is distributed on an "AS IS" BASIS, 12a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * See the License for the specific language governing permissions and 14a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * limitations under the License. 15a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown */ 16a506a6ec94863a35acca9feb165db76ddac3892cJeff Brownpackage android.hardware.display; 17a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown 18a506a6ec94863a35acca9feb165db76ddac3892cJeff Brownimport android.os.IBinder; 19a506a6ec94863a35acca9feb165db76ddac3892cJeff Brownimport android.view.Display; 2092207df753c27b094e9e0ca80d41bc0d54dc6bd5Jeff Brownimport android.view.Surface; 21a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown 22a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown/** 23cc2195bb560cc155bf3e7d3a7f27fe619a497124Scott Main * Represents a virtual display. The content of a virtual display is rendered to a 24cc2195bb560cc155bf3e7d3a7f27fe619a497124Scott Main * {@link android.view.Surface} that you must provide to {@link DisplayManager#createVirtualDisplay 25cc2195bb560cc155bf3e7d3a7f27fe619a497124Scott Main * createVirtualDisplay()}. 2692207df753c27b094e9e0ca80d41bc0d54dc6bd5Jeff Brown * <p> 2792207df753c27b094e9e0ca80d41bc0d54dc6bd5Jeff Brown * Because a virtual display renders to a surface provided by the application, it will be 28cc2195bb560cc155bf3e7d3a7f27fe619a497124Scott Main * released automatically when the process terminates and all remaining windows on it will 2992207df753c27b094e9e0ca80d41bc0d54dc6bd5Jeff Brown * be forcibly removed. However, you should also explicitly call {@link #release} when 3092207df753c27b094e9e0ca80d41bc0d54dc6bd5Jeff Brown * you're done with it. 3192207df753c27b094e9e0ca80d41bc0d54dc6bd5Jeff Brown * </p> 32a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * 337d00affce6e25b22fd8fc135933b3bf6b547a0dcJeff Brown * @see DisplayManager#createVirtualDisplay 34a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown */ 35a506a6ec94863a35acca9feb165db76ddac3892cJeff Brownpublic final class VirtualDisplay { 36a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown private final DisplayManagerGlobal mGlobal; 37a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown private final Display mDisplay; 38a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown private IBinder mToken; 3992207df753c27b094e9e0ca80d41bc0d54dc6bd5Jeff Brown private Surface mSurface; 40a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown 4192207df753c27b094e9e0ca80d41bc0d54dc6bd5Jeff Brown VirtualDisplay(DisplayManagerGlobal global, Display display, IBinder token, 4292207df753c27b094e9e0ca80d41bc0d54dc6bd5Jeff Brown Surface surface) { 43a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown mGlobal = global; 44a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown mDisplay = display; 45a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown mToken = token; 4692207df753c27b094e9e0ca80d41bc0d54dc6bd5Jeff Brown mSurface = surface; 47a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown } 48a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown 49a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown /** 50a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * Gets the virtual display. 51a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown */ 52a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown public Display getDisplay() { 53a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown return mDisplay; 54a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown } 55a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown 56a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown /** 5792207df753c27b094e9e0ca80d41bc0d54dc6bd5Jeff Brown * Gets the surface that backs the virtual display. 5892207df753c27b094e9e0ca80d41bc0d54dc6bd5Jeff Brown */ 5992207df753c27b094e9e0ca80d41bc0d54dc6bd5Jeff Brown public Surface getSurface() { 6092207df753c27b094e9e0ca80d41bc0d54dc6bd5Jeff Brown return mSurface; 6192207df753c27b094e9e0ca80d41bc0d54dc6bd5Jeff Brown } 6292207df753c27b094e9e0ca80d41bc0d54dc6bd5Jeff Brown 6392207df753c27b094e9e0ca80d41bc0d54dc6bd5Jeff Brown /** 6492207df753c27b094e9e0ca80d41bc0d54dc6bd5Jeff Brown * Sets the surface that backs the virtual display. 6592207df753c27b094e9e0ca80d41bc0d54dc6bd5Jeff Brown * <p> 6692207df753c27b094e9e0ca80d41bc0d54dc6bd5Jeff Brown * Detaching the surface that backs a virtual display has a similar effect to 6792207df753c27b094e9e0ca80d41bc0d54dc6bd5Jeff Brown * turning off the screen. 6892207df753c27b094e9e0ca80d41bc0d54dc6bd5Jeff Brown * </p><p> 6992207df753c27b094e9e0ca80d41bc0d54dc6bd5Jeff Brown * It is still the caller's responsibility to destroy the surface after it has 7092207df753c27b094e9e0ca80d41bc0d54dc6bd5Jeff Brown * been detached. 7192207df753c27b094e9e0ca80d41bc0d54dc6bd5Jeff Brown * </p> 7292207df753c27b094e9e0ca80d41bc0d54dc6bd5Jeff Brown * 7392207df753c27b094e9e0ca80d41bc0d54dc6bd5Jeff Brown * @param surface The surface to set, or null to detach the surface from the virtual display. 7492207df753c27b094e9e0ca80d41bc0d54dc6bd5Jeff Brown */ 7592207df753c27b094e9e0ca80d41bc0d54dc6bd5Jeff Brown public void setSurface(Surface surface) { 7692207df753c27b094e9e0ca80d41bc0d54dc6bd5Jeff Brown if (mSurface != surface) { 7792207df753c27b094e9e0ca80d41bc0d54dc6bd5Jeff Brown mGlobal.setVirtualDisplaySurface(mToken, surface); 7892207df753c27b094e9e0ca80d41bc0d54dc6bd5Jeff Brown mSurface = surface; 7992207df753c27b094e9e0ca80d41bc0d54dc6bd5Jeff Brown } 8092207df753c27b094e9e0ca80d41bc0d54dc6bd5Jeff Brown } 8192207df753c27b094e9e0ca80d41bc0d54dc6bd5Jeff Brown 8292207df753c27b094e9e0ca80d41bc0d54dc6bd5Jeff Brown /** 83a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * Releases the virtual display and destroys its underlying surface. 84a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * <p> 85a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * All remaining windows on the virtual display will be forcibly removed 86a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * as part of releasing the virtual display. 87a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown * </p> 88a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown */ 89a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown public void release() { 90a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown if (mToken != null) { 91a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown mGlobal.releaseVirtualDisplay(mToken); 92a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown mToken = null; 93a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown } 94a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown } 95a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown 96a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown @Override 97a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown public String toString() { 9892207df753c27b094e9e0ca80d41bc0d54dc6bd5Jeff Brown return "VirtualDisplay{display=" + mDisplay + ", token=" + mToken 9992207df753c27b094e9e0ca80d41bc0d54dc6bd5Jeff Brown + ", surface=" + mSurface + "}"; 100a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown } 101a506a6ec94863a35acca9feb165db76ddac3892cJeff Brown} 102