Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(108)

Unified Diff: ui/android/java/src/org/chromium/ui/display/DisplayAndroidManager.java

Issue 2523273002: Implement Virtual Display class for Android. (Closed)
Patch Set: getObservers() to private Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ui/android/java/src/org/chromium/ui/display/DisplayAndroidManager.java
diff --git a/ui/android/java/src/org/chromium/ui/display/DisplayAndroidManager.java b/ui/android/java/src/org/chromium/ui/display/DisplayAndroidManager.java
index 6175f940303e80ee9df4afbc5c65cb358a2d988d..abd34b444c4e96641188b30b0f797ff6d41d2377 100644
--- a/ui/android/java/src/org/chromium/ui/display/DisplayAndroidManager.java
+++ b/ui/android/java/src/org/chromium/ui/display/DisplayAndroidManager.java
@@ -112,7 +112,7 @@ import org.chromium.ui.gfx.DeviceDisplayInfo;
@Override
public void onConfigurationChanged(Configuration newConfig) {
updateDeviceDisplayInfo();
- mIdMap.get(mMainSdkDisplayId).updateFromDisplay(
+ ((PhysicalDisplayAndroid) mIdMap.get(mMainSdkDisplayId)).updateFromDisplay(
getDefaultDisplayForContext(getContext()));
}
@@ -171,7 +171,8 @@ import org.chromium.ui.gfx.DeviceDisplayInfo;
@Override
public void onDisplayChanged(int sdkDisplayId) {
updateDeviceDisplayInfo();
- DisplayAndroid displayAndroid = mIdMap.get(sdkDisplayId);
+ PhysicalDisplayAndroid displayAndroid =
+ (PhysicalDisplayAndroid) mIdMap.get(sdkDisplayId);
if (displayAndroid != null) {
displayAndroid.updateFromDisplay(getDisplayManager().getDisplay(sdkDisplayId));
}
@@ -180,10 +181,17 @@ import org.chromium.ui.gfx.DeviceDisplayInfo;
private static DisplayAndroidManager sDisplayAndroidManager;
+ // Real displays (as in, displays backed by an Android Display and recognized by the OS, though
+ // not necessarily physical displays) on Android start at ID 0, and increment indefinitely as
+ // displays are added. Display IDs are never reused until reboot. To avoid any overlap, start
+ // virtual display ids at a much higher number, and increment them in the same way.
+ private static final int VIRTUAL_DISPLAY_ID_BEGIN = Integer.MAX_VALUE / 2;
+
private long mNativePointer;
private int mMainSdkDisplayId;
private SparseArray<DisplayAndroid> mIdMap;
private DisplayListenerBackend mBackend;
+ private int mNextVirtualDisplayId = VIRTUAL_DISPLAY_ID_BEGIN;
@SuppressFBWarnings("LI_LAZY_INIT_UPDATE_STATIC")
/* package */ static DisplayAndroidManager getInstance() {
@@ -278,16 +286,36 @@ import org.chromium.ui.gfx.DeviceDisplayInfo;
private DisplayAndroid addDisplay(Display display) {
int sdkDisplayId = display.getDisplayId();
- DisplayAndroid displayAndroid = new DisplayAndroid(display);
+ PhysicalDisplayAndroid displayAndroid = new PhysicalDisplayAndroid(display);
+ assert mIdMap.get(sdkDisplayId) == null;
mIdMap.put(sdkDisplayId, displayAndroid);
-
displayAndroid.updateFromDisplay(display);
return displayAndroid;
}
+ private int getNextVirtualDisplayId() {
+ return mNextVirtualDisplayId++;
+ }
+
+ /* package */ VirtualDisplayAndroid addVirtualDisplay() {
+ VirtualDisplayAndroid display = new VirtualDisplayAndroid(getNextVirtualDisplayId());
+ assert mIdMap.get(display.getDisplayId()) == null;
+ mIdMap.put(display.getDisplayId(), display);
+ updateDisplayOnNativeSide(display);
+ return display;
+ }
+
+ /* package */ void removeVirtualDisplay(VirtualDisplayAndroid display) {
+ DisplayAndroid displayAndroid = mIdMap.get(display.getDisplayId());
+ assert displayAndroid == display;
+
+ if (mNativePointer != 0) nativeRemoveDisplay(mNativePointer, display.getDisplayId());
+ mIdMap.remove(display.getDisplayId());
+ }
+
/* package */ void updateDisplayOnNativeSide(DisplayAndroid displayAndroid) {
if (mNativePointer == 0) return;
- nativeUpdateDisplay(mNativePointer, displayAndroid.getSdkDisplayId(),
+ nativeUpdateDisplay(mNativePointer, displayAndroid.getDisplayId(),
displayAndroid.getPhysicalDisplayWidth(), displayAndroid.getPhysicalDisplayHeight(),
displayAndroid.getDisplayWidth(), displayAndroid.getDisplayHeight(),
displayAndroid.getDipScale(), displayAndroid.getRotationDegrees(),

Powered by Google App Engine
This is Rietveld 408576698