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

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

Issue 2420453002: android: Register Display lazily (Closed)
Patch Set: fix typo Created 4 years, 2 months 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 unified diff | Download patch
« no previous file with comments | « ui/android/java/src/org/chromium/ui/display/DisplayAndroid.java ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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 }
OLDNEW
« no previous file with comments | « ui/android/java/src/org/chromium/ui/display/DisplayAndroid.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698