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 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
145 | 145 |
146 @Override | 146 @Override |
147 public void stopAccurateListening() { | 147 public void stopAccurateListening() { |
148 // Always accurate. Do nothing. | 148 // Always accurate. Do nothing. |
149 } | 149 } |
150 | 150 |
151 // DisplayListener implementation: | 151 // DisplayListener implementation: |
152 | 152 |
153 @Override | 153 @Override |
154 public void onDisplayAdded(int sdkDisplayId) { | 154 public void onDisplayAdded(int sdkDisplayId) { |
155 addDisplay(getDisplayManager().getDisplay(sdkDisplayId)); | 155 // DisplayAndroid is added lazily on first use. This is to workaroun
d corner case |
| 156 // bug where DisplayManager.getDisplay(sdkDisplayId) returning null
here. |
156 } | 157 } |
157 | 158 |
158 @Override | 159 @Override |
159 public void onDisplayRemoved(int sdkDisplayId) { | 160 public void onDisplayRemoved(int sdkDisplayId) { |
160 mIdMap.remove(sdkDisplayId); | 161 mIdMap.remove(sdkDisplayId); |
161 } | 162 } |
162 | 163 |
163 @Override | 164 @Override |
164 public void onDisplayChanged(int sdkDisplayId) { | 165 public void onDisplayChanged(int sdkDisplayId) { |
165 updateDeviceDisplayInfo(); | 166 updateDeviceDisplayInfo(); |
166 mIdMap.get(sdkDisplayId) | 167 DisplayAndroid displayAndroid = mIdMap.get(sdkDisplayId); |
167 .updateFromDisplay(getDisplayManager().getDisplay(sdkDisplay
Id)); | 168 if (displayAndroid != null) { |
| 169 displayAndroid.updateFromDisplay(getDisplayManager().getDisplay(
sdkDisplayId)); |
| 170 } |
168 } | 171 } |
169 } | 172 } |
170 | 173 |
171 private static DisplayAndroidManager sDisplayAndroidManager; | 174 private static DisplayAndroidManager sDisplayAndroidManager; |
172 | 175 |
173 private SparseArray<DisplayAndroid> mIdMap; | 176 private SparseArray<DisplayAndroid> mIdMap; |
174 private final DisplayListenerBackend mBackend; | 177 private final DisplayListenerBackend mBackend; |
175 | 178 |
176 /* package */ static DisplayAndroidManager getInstance() { | 179 /* package */ static DisplayAndroidManager getInstance() { |
177 if (sDisplayAndroidManager == null) { | 180 if (sDisplayAndroidManager == null) { |
(...skipping 19 matching lines...) Expand all Loading... |
197 private static DisplayManager getDisplayManager() { | 200 private static DisplayManager getDisplayManager() { |
198 return (DisplayManager) getContext().getSystemService(Context.DISPLAY_SE
RVICE); | 201 return (DisplayManager) getContext().getSystemService(Context.DISPLAY_SE
RVICE); |
199 } | 202 } |
200 | 203 |
201 private static void updateDeviceDisplayInfo() { | 204 private static void updateDeviceDisplayInfo() { |
202 DeviceDisplayInfo.create(getContext()).updateNativeSharedDisplayInfo(); | 205 DeviceDisplayInfo.create(getContext()).updateNativeSharedDisplayInfo(); |
203 } | 206 } |
204 | 207 |
205 private DisplayAndroidManager() { | 208 private DisplayAndroidManager() { |
206 mIdMap = new SparseArray<>(); | 209 mIdMap = new SparseArray<>(); |
207 | |
208 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { | 210 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { |
209 mBackend = new DisplayListenerBackendImpl(); | 211 mBackend = new DisplayListenerBackendImpl(); |
210 for (Display display : getDisplayManager().getDisplays()) { | |
211 addDisplay(display); | |
212 } | |
213 } else { | 212 } else { |
214 Display display = getDisplayFromContext(getContext()); | 213 Display display = getDisplayFromContext(getContext()); |
215 mBackend = new DisplayListenerAPI16(display.getDisplayId()); | 214 mBackend = new DisplayListenerAPI16(display.getDisplayId()); |
216 addDisplay(display); // Note this display is never removed. | 215 addDisplay(display); // Note this display is never removed. |
217 } | 216 } |
218 mBackend.startListening(); | 217 mBackend.startListening(); |
219 } | 218 } |
220 | 219 |
221 /* package */ DisplayAndroid getDisplayAndroid(int sdkDisplayId) { | 220 /* package */ DisplayAndroid getDisplayAndroid(Display display) { |
222 return mIdMap.get(sdkDisplayId); | 221 int sdkDisplayId = display.getDisplayId(); |
| 222 DisplayAndroid displayAndroid = mIdMap.get(sdkDisplayId); |
| 223 if (displayAndroid == null) { |
| 224 displayAndroid = addDisplay(display); |
| 225 } |
| 226 return displayAndroid; |
223 } | 227 } |
224 | 228 |
225 /* package */ void startAccurateListening() { | 229 /* package */ void startAccurateListening() { |
226 mBackend.startAccurateListening(); | 230 mBackend.startAccurateListening(); |
227 } | 231 } |
228 | 232 |
229 /* package */ void stopAccurateListening() { | 233 /* package */ void stopAccurateListening() { |
230 mBackend.stopAccurateListening(); | 234 mBackend.stopAccurateListening(); |
231 } | 235 } |
232 | 236 |
233 private void addDisplay(Display display) { | 237 private DisplayAndroid addDisplay(Display display) { |
234 int sdkDisplayId = display.getDisplayId(); | 238 int sdkDisplayId = display.getDisplayId(); |
235 mIdMap.put(sdkDisplayId, new DisplayAndroid(display)); | 239 DisplayAndroid displayAndroid = new DisplayAndroid(display); |
| 240 mIdMap.put(sdkDisplayId, displayAndroid); |
| 241 return displayAndroid; |
236 } | 242 } |
237 } | 243 } |
OLD | NEW |