1b613c76c40bffb15fbde84df32365bde3ffdb4c5Christian Williamspackage com.xtremelabs.robolectric.shadows; 2b613c76c40bffb15fbde84df32365bde3ffdb4c5Christian Williams 3b613c76c40bffb15fbde84df32365bde3ffdb4c5Christian Williamsimport android.os.PowerManager; 4b613c76c40bffb15fbde84df32365bde3ffdb4c5Christian Williamsimport com.xtremelabs.robolectric.Robolectric; 5b613c76c40bffb15fbde84df32365bde3ffdb4c5Christian Williamsimport com.xtremelabs.robolectric.internal.Implementation; 6b613c76c40bffb15fbde84df32365bde3ffdb4c5Christian Williamsimport com.xtremelabs.robolectric.internal.Implements; 7b613c76c40bffb15fbde84df32365bde3ffdb4c5Christian Williams 8b613c76c40bffb15fbde84df32365bde3ffdb4c5Christian Williams/** 9b613c76c40bffb15fbde84df32365bde3ffdb4c5Christian Williams * Shadows the {@code android.os.PowerManager} class. 10b613c76c40bffb15fbde84df32365bde3ffdb4c5Christian Williams */ 11b613c76c40bffb15fbde84df32365bde3ffdb4c5Christian Williams@Implements(PowerManager.class) 12b613c76c40bffb15fbde84df32365bde3ffdb4c5Christian Williamspublic class ShadowPowerManager { 13786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel 1408fb8f8709b227d9c12f5197c1884f22137075a5adriancowham private boolean isScreenOn = true; 15786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel 16b613c76c40bffb15fbde84df32365bde3ffdb4c5Christian Williams @Implementation 17b613c76c40bffb15fbde84df32365bde3ffdb4c5Christian Williams public PowerManager.WakeLock newWakeLock(int flags, String tag) { 18b613c76c40bffb15fbde84df32365bde3ffdb4c5Christian Williams return Robolectric.newInstanceOf(PowerManager.WakeLock.class); 19b613c76c40bffb15fbde84df32365bde3ffdb4c5Christian Williams } 20786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel 2108fb8f8709b227d9c12f5197c1884f22137075a5adriancowham @Implementation 2208fb8f8709b227d9c12f5197c1884f22137075a5adriancowham public boolean isScreenOn() { 2308fb8f8709b227d9c12f5197c1884f22137075a5adriancowham return isScreenOn; 2408fb8f8709b227d9c12f5197c1884f22137075a5adriancowham } 25786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel 267598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz public void setIsScreenOn(boolean screenOn) { 2708fb8f8709b227d9c12f5197c1884f22137075a5adriancowham isScreenOn = screenOn; 2808fb8f8709b227d9c12f5197c1884f22137075a5adriancowham } 29786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel 30786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel @Implements(PowerManager.WakeLock.class) 31786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel public static class ShadowWakeLock { 32786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel private boolean refCounted = true; 33786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel private int refCount; 34786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel private boolean locked; 35786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel 36786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel @Implementation 37786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel public void acquire() { 38786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel acquire(0); 39786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel 40786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel } 41786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel 42786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel @Implementation 43786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel public synchronized void acquire(long timeout) { 44786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel if (refCounted) { 45786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel refCount++; 46786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel } else { 47786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel locked = true; 48786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel } 49786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel } 50786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel 51786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel @Implementation 52786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel public synchronized void release() { 53786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel if (refCounted) { 54786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel if (--refCount < 0) throw new RuntimeException("WakeLock under-locked"); 55786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel } else { 56786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel locked = false; 57786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel } 58786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel } 59786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel 60786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel @Implementation 61786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel public synchronized boolean isHeld() { 62786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel return refCounted ? refCount > 0 : locked; 63786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel } 64786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel 65786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel @Implementation 66786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel public void setReferenceCounted(boolean value) { 67786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel refCounted = value; 68786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel } 69786803310d968784c78de4e2c2d1ff0c5c4592b8Jan Berkel } 70b613c76c40bffb15fbde84df32365bde3ffdb4c5Christian Williams} 71