diff options
author | Craig Mautner <cmautner@google.com> | 2012-08-02 14:30:30 -0700 |
---|---|---|
committer | Craig Mautner <cmautner@google.com> | 2012-08-02 14:30:30 -0700 |
commit | 9de4936c99b979f6010440b043edc6d6142d1980 (patch) | |
tree | d8a17234255275c282eb3cf6cd9be3018e1c8816 /services/java/com/android/server/display/DisplayManagerService.java | |
parent | 2a642a450a07dfdb94d897ef06d2348855dcc431 (diff) |
Add features to DisplayManager.
Added Surface.setDisplayId().
Added callbacks to DisplayManagerService.
Change-Id: Idd3f85f8ca1f1208962f1196efd6a3ab51c8c259
Diffstat (limited to 'services/java/com/android/server/display/DisplayManagerService.java')
-rw-r--r-- | services/java/com/android/server/display/DisplayManagerService.java | 45 |
1 files changed, 42 insertions, 3 deletions
diff --git a/services/java/com/android/server/display/DisplayManagerService.java b/services/java/com/android/server/display/DisplayManagerService.java index b9c9ffde91aa..468bf21f8fd7 100644 --- a/services/java/com/android/server/display/DisplayManagerService.java +++ b/services/java/com/android/server/display/DisplayManagerService.java @@ -62,6 +62,9 @@ public final class DisplayManagerService extends IDisplayManager.Stub { /** All the DisplayInfos in the system indexed by deviceId */ private final SparseArray<DisplayInfo> mDisplayInfos = new SparseArray<DisplayInfo>(); + private final ArrayList<DisplayCallback> mCallbacks = + new ArrayList<DisplayManagerService.DisplayCallback>(); + public DisplayManagerService() { mHeadless = SystemProperties.get(SYSTEM_HEADLESS).equals("1"); registerDefaultDisplayAdapter(); @@ -131,8 +134,20 @@ public final class DisplayManagerService extends IDisplayManager.Stub { * @param adapter The wrapper for information associated with the physical display. */ public void registerDisplayAdapter(DisplayAdapter adapter) { + + int displayId; + DisplayCallback[] callbacks; + synchronized (mLock) { - int displayId = mDisplayIdSeq++; + displayId = mDisplayIdSeq; + do { + // Find the next unused displayId. (Pretend like it might ever wrap around). + mDisplayIdSeq++; + if (mDisplayIdSeq < 0) { + mDisplayIdSeq = Display.DEFAULT_DISPLAY + 1; + } + } while (mDisplayInfos.get(mDisplayIdSeq) != null); + adapter.setDisplayId(displayId); createDisplayInfoLocked(displayId, adapter); @@ -142,6 +157,11 @@ public final class DisplayManagerService extends IDisplayManager.Stub { mLogicalToPhysicals.put(displayId, list); mDisplayAdapters.add(adapter); + callbacks = mCallbacks.toArray(new DisplayCallback[mCallbacks.size()]); + } + + for (int i = callbacks.length - 1; i >= 0; i--) { + callbacks[i].displayAdded(displayId); } // TODO: Notify SurfaceFlinger of new addition. @@ -188,7 +208,6 @@ public final class DisplayManagerService extends IDisplayManager.Stub { list = new ArrayList<DisplayAdapter>(); mLogicalToPhysicals.put(displayId, list); } - list.add(adapter); adapter.setDisplayId(displayId); } @@ -219,6 +238,20 @@ public final class DisplayManagerService extends IDisplayManager.Stub { // TODO: Notify SurfaceFlinger of removal. } + public void registerDisplayCallback(final DisplayCallback callback) { + synchronized (mLock) { + if (!mCallbacks.contains(callback)) { + mCallbacks.add(callback); + } + } + } + + public void unregisterDisplayCallback(final DisplayCallback callback) { + synchronized (mLock) { + mCallbacks.remove(callback); + } + } + /** * Create a new logical DisplayInfo and fill it in with information from the physical display. * @param displayId The logical identifier. @@ -288,11 +321,17 @@ public final class DisplayManagerService extends IDisplayManager.Stub { DisplayDeviceInfo info = new DisplayDeviceInfo(); for (DisplayAdapter adapter : mDisplayAdapters) { - pw.println("Display for adapter " + adapter.getName()); + pw.println("Display for adapter " + adapter.getName() + + " assigned to Display " + adapter.getDisplayId()); DisplayDevice device = adapter.getDisplayDevice(); pw.print(" "); device.getInfo(info); pw.println(info); } } + + public interface DisplayCallback { + public void displayAdded(int displayId); + public void displayRemoved(int displayId); + } } |