1 package com.xtremelabs.robolectric.shadows; 2 3 import android.os.PowerManager; 4 import com.xtremelabs.robolectric.Robolectric; 5 import com.xtremelabs.robolectric.internal.Implementation; 6 import com.xtremelabs.robolectric.internal.Implements; 7 8 /** 9 * Shadows the {@code android.os.PowerManager} class. 10 */ 11 @Implements(PowerManager.class) 12 public class ShadowPowerManager { 13 14 private boolean isScreenOn = true; 15 16 @Implementation newWakeLock(int flags, String tag)17 public PowerManager.WakeLock newWakeLock(int flags, String tag) { 18 return Robolectric.newInstanceOf(PowerManager.WakeLock.class); 19 } 20 21 @Implementation isScreenOn()22 public boolean isScreenOn() { 23 return isScreenOn; 24 } 25 setIsScreenOn(boolean screenOn)26 public void setIsScreenOn(boolean screenOn) { 27 isScreenOn = screenOn; 28 } 29 30 @Implements(PowerManager.WakeLock.class) 31 public static class ShadowWakeLock { 32 private boolean refCounted = true; 33 private int refCount; 34 private boolean locked; 35 36 @Implementation acquire()37 public void acquire() { 38 acquire(0); 39 40 } 41 42 @Implementation acquire(long timeout)43 public synchronized void acquire(long timeout) { 44 if (refCounted) { 45 refCount++; 46 } else { 47 locked = true; 48 } 49 } 50 51 @Implementation release()52 public synchronized void release() { 53 if (refCounted) { 54 if (--refCount < 0) throw new RuntimeException("WakeLock under-locked"); 55 } else { 56 locked = false; 57 } 58 } 59 60 @Implementation isHeld()61 public synchronized boolean isHeld() { 62 return refCounted ? refCount > 0 : locked; 63 } 64 65 @Implementation setReferenceCounted(boolean value)66 public void setReferenceCounted(boolean value) { 67 refCounted = value; 68 } 69 } 70 } 71