Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.ui.display; | 5 package org.chromium.ui.display; |
| 6 | 6 |
| 7 import android.annotation.SuppressLint; | 7 import android.annotation.SuppressLint; |
| 8 import android.content.ComponentCallbacks; | 8 import android.content.ComponentCallbacks; |
| 9 import android.content.Context; | 9 import android.content.Context; |
| 10 import android.content.res.Configuration; | 10 import android.content.res.Configuration; |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 105 public void stopAccurateListening() { | 105 public void stopAccurateListening() { |
| 106 --mAccurateCount; | 106 --mAccurateCount; |
| 107 assert mAccurateCount >= 0; | 107 assert mAccurateCount >= 0; |
| 108 } | 108 } |
| 109 | 109 |
| 110 // ComponentCallbacks implementation: | 110 // ComponentCallbacks implementation: |
| 111 | 111 |
| 112 @Override | 112 @Override |
| 113 public void onConfigurationChanged(Configuration newConfig) { | 113 public void onConfigurationChanged(Configuration newConfig) { |
| 114 updateDeviceDisplayInfo(); | 114 updateDeviceDisplayInfo(); |
| 115 mIdMap.get(mMainSdkDisplayId).updateFromDisplay( | 115 ((DisplayAndroidImpl) mIdMap.get(mMainSdkDisplayId)).updateFromDispl ay( |
| 116 getDefaultDisplayForContext(getContext())); | 116 getDefaultDisplayForContext(getContext())); |
| 117 } | 117 } |
| 118 | 118 |
| 119 @Override | 119 @Override |
| 120 public void onLowMemory() { | 120 public void onLowMemory() { |
| 121 } | 121 } |
| 122 } | 122 } |
| 123 | 123 |
| 124 /** | 124 /** |
| 125 * DisplayListenerBackendImpl implements DisplayListenerBackend | 125 * DisplayListenerBackendImpl implements DisplayListenerBackend |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 164 DisplayAndroid displayAndroid = mIdMap.get(sdkDisplayId); | 164 DisplayAndroid displayAndroid = mIdMap.get(sdkDisplayId); |
| 165 if (displayAndroid == null) return; | 165 if (displayAndroid == null) return; |
| 166 | 166 |
| 167 if (mNativePointer != 0) nativeRemoveDisplay(mNativePointer, sdkDisp layId); | 167 if (mNativePointer != 0) nativeRemoveDisplay(mNativePointer, sdkDisp layId); |
| 168 mIdMap.remove(sdkDisplayId); | 168 mIdMap.remove(sdkDisplayId); |
| 169 } | 169 } |
| 170 | 170 |
| 171 @Override | 171 @Override |
| 172 public void onDisplayChanged(int sdkDisplayId) { | 172 public void onDisplayChanged(int sdkDisplayId) { |
| 173 updateDeviceDisplayInfo(); | 173 updateDeviceDisplayInfo(); |
| 174 DisplayAndroid displayAndroid = mIdMap.get(sdkDisplayId); | 174 DisplayAndroidImpl displayAndroid = (DisplayAndroidImpl) mIdMap.get( sdkDisplayId); |
| 175 if (displayAndroid != null) { | 175 if (displayAndroid != null) { |
| 176 displayAndroid.updateFromDisplay(getDisplayManager().getDisplay( sdkDisplayId)); | 176 displayAndroid.updateFromDisplay(getDisplayManager().getDisplay( sdkDisplayId)); |
| 177 } | 177 } |
| 178 } | 178 } |
| 179 } | 179 } |
| 180 | 180 |
| 181 private static DisplayAndroidManager sDisplayAndroidManager; | 181 private static DisplayAndroidManager sDisplayAndroidManager; |
| 182 | 182 |
| 183 // Real displays on Android start at ID 0, so to avoid any overlap, start vi rtual displays at | |
| 184 // a much higher number. | |
| 185 private static final int VIRTUAL_DISPLAY_ID_BEGIN = 1000; | |
|
boliu
2016/11/28 15:53:31
I need we need to double check how android generat
mthiesse
2016/11/28 19:16:42
Android effectively does what I'm doing here, but
| |
| 186 | |
| 183 private long mNativePointer; | 187 private long mNativePointer; |
| 184 private int mMainSdkDisplayId; | 188 private int mMainSdkDisplayId; |
| 185 private SparseArray<DisplayAndroid> mIdMap; | 189 private SparseArray<DisplayAndroid> mIdMap; |
| 186 private DisplayListenerBackend mBackend; | 190 private DisplayListenerBackend mBackend; |
| 191 private int mNextVirtualDisplayId = VIRTUAL_DISPLAY_ID_BEGIN; | |
| 187 | 192 |
| 188 @SuppressFBWarnings("LI_LAZY_INIT_UPDATE_STATIC") | 193 @SuppressFBWarnings("LI_LAZY_INIT_UPDATE_STATIC") |
| 189 /* package */ static DisplayAndroidManager getInstance() { | 194 /* package */ static DisplayAndroidManager getInstance() { |
| 190 if (sDisplayAndroidManager == null) { | 195 if (sDisplayAndroidManager == null) { |
| 191 // Split between creation and initialization to allow for calls | 196 // Split between creation and initialization to allow for calls |
| 192 // from DisplayAndroid to DisplayAndroidManager during initialize(). | 197 // from DisplayAndroid to DisplayAndroidManager during initialize(). |
| 193 sDisplayAndroidManager = new DisplayAndroidManager(); | 198 sDisplayAndroidManager = new DisplayAndroidManager(); |
| 194 sDisplayAndroidManager.initialize(); | 199 sDisplayAndroidManager.initialize(); |
| 195 } | 200 } |
| 196 return sDisplayAndroidManager; | 201 return sDisplayAndroidManager; |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 271 /* package */ void startAccurateListening() { | 276 /* package */ void startAccurateListening() { |
| 272 mBackend.startAccurateListening(); | 277 mBackend.startAccurateListening(); |
| 273 } | 278 } |
| 274 | 279 |
| 275 /* package */ void stopAccurateListening() { | 280 /* package */ void stopAccurateListening() { |
| 276 mBackend.stopAccurateListening(); | 281 mBackend.stopAccurateListening(); |
| 277 } | 282 } |
| 278 | 283 |
| 279 private DisplayAndroid addDisplay(Display display) { | 284 private DisplayAndroid addDisplay(Display display) { |
| 280 int sdkDisplayId = display.getDisplayId(); | 285 int sdkDisplayId = display.getDisplayId(); |
| 281 DisplayAndroid displayAndroid = new DisplayAndroid(display); | 286 DisplayAndroidImpl displayAndroid = new DisplayAndroidImpl(display); |
| 282 mIdMap.put(sdkDisplayId, displayAndroid); | 287 mIdMap.put(sdkDisplayId, displayAndroid); |
| 283 | 288 |
| 284 displayAndroid.updateFromDisplay(display); | 289 displayAndroid.updateFromDisplay(display); |
| 285 return displayAndroid; | 290 return displayAndroid; |
| 286 } | 291 } |
| 287 | 292 |
| 293 /* package */ int getNextVirtualDisplayId() { | |
|
boliu
2016/11/28 15:53:31
nit: maybe generating this ID can happen in addVir
mthiesse
2016/11/28 19:16:42
Done.
| |
| 294 return mNextVirtualDisplayId++; | |
| 295 } | |
| 296 | |
| 297 /* package */ void addVirtualDisplay(VirtualDisplayAndroid display) { | |
| 298 mIdMap.put(display.getDisplayId(), display); | |
|
boliu
2016/11/28 15:53:31
should this immediately create the native side dis
mthiesse
2016/11/28 19:16:42
Done.
| |
| 299 } | |
| 300 | |
| 301 /* package */ void removeVirtualDisplay(VirtualDisplayAndroid display) { | |
| 302 DisplayAndroid displayAndroid = mIdMap.get(display.getDisplayId()); | |
| 303 assert displayAndroid == display; | |
| 304 | |
| 305 if (mNativePointer != 0) nativeRemoveDisplay(mNativePointer, display.get DisplayId()); | |
| 306 mIdMap.remove(display.getDisplayId()); | |
| 307 } | |
| 308 | |
| 288 /* package */ void updateDisplayOnNativeSide(DisplayAndroid displayAndroid) { | 309 /* package */ void updateDisplayOnNativeSide(DisplayAndroid displayAndroid) { |
| 289 if (mNativePointer == 0) return; | 310 if (mNativePointer == 0) return; |
| 290 nativeUpdateDisplay(mNativePointer, displayAndroid.getSdkDisplayId(), | 311 nativeUpdateDisplay(mNativePointer, displayAndroid.getDisplayId(), |
| 291 displayAndroid.getPhysicalDisplayWidth(), displayAndroid.getPhys icalDisplayHeight(), | 312 displayAndroid.getPhysicalDisplayWidth(), displayAndroid.getPhys icalDisplayHeight(), |
| 292 displayAndroid.getDisplayWidth(), displayAndroid.getDisplayHeigh t(), | 313 displayAndroid.getDisplayWidth(), displayAndroid.getDisplayHeigh t(), |
| 293 displayAndroid.getDipScale(), displayAndroid.getRotationDegrees( ), | 314 displayAndroid.getDipScale(), displayAndroid.getRotationDegrees( ), |
| 294 displayAndroid.getBitsPerPixel(), displayAndroid.getBitsPerCompo nent()); | 315 displayAndroid.getBitsPerPixel(), displayAndroid.getBitsPerCompo nent()); |
| 295 } | 316 } |
| 296 | 317 |
| 297 private native void nativeUpdateDisplay(long nativeDisplayAndroidManager, in t sdkDisplayId, | 318 private native void nativeUpdateDisplay(long nativeDisplayAndroidManager, in t sdkDisplayId, |
| 298 int physicalWidth, int physicalHeight, int width, int height, float dipScale, | 319 int physicalWidth, int physicalHeight, int width, int height, float dipScale, |
| 299 int rotationDegrees, int bitsPerPixel, int bitsPerComponent); | 320 int rotationDegrees, int bitsPerPixel, int bitsPerComponent); |
| 300 private native void nativeRemoveDisplay(long nativeDisplayAndroidManager, in t sdkDisplayId); | 321 private native void nativeRemoveDisplay(long nativeDisplayAndroidManager, in t sdkDisplayId); |
| 301 private native void nativeSetPrimaryDisplayId( | 322 private native void nativeSetPrimaryDisplayId( |
| 302 long nativeDisplayAndroidManager, int sdkDisplayId); | 323 long nativeDisplayAndroidManager, int sdkDisplayId); |
| 303 } | 324 } |
| OLD | NEW |