diff options
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/os/IPowerManager.aidl | 4 | ||||
| -rw-r--r-- | core/java/android/os/PowerManager.java | 42 |
2 files changed, 33 insertions, 13 deletions
diff --git a/core/java/android/os/IPowerManager.aidl b/core/java/android/os/IPowerManager.aidl index ae7d94cbad79..425e797a9e0e 100644 --- a/core/java/android/os/IPowerManager.aidl +++ b/core/java/android/os/IPowerManager.aidl @@ -27,9 +27,9 @@ import android.os.WorkSource; interface IPowerManager { void acquireWakeLock(IBinder lock, int flags, String tag, String packageName, in WorkSource ws, - String historyTag); + String historyTag, int displayId); void acquireWakeLockWithUid(IBinder lock, int flags, String tag, String packageName, - int uidtoblame); + int uidtoblame, int displayId); @UnsupportedAppUsage void releaseWakeLock(IBinder lock, int flags); void updateWakeLockUids(IBinder lock, in int[] uids); diff --git a/core/java/android/os/PowerManager.java b/core/java/android/os/PowerManager.java index 2c4d130788cc..9d1fd50a4112 100644 --- a/core/java/android/os/PowerManager.java +++ b/core/java/android/os/PowerManager.java @@ -36,6 +36,7 @@ import android.sysprop.InitProperties; import android.util.ArrayMap; import android.util.Log; import android.util.proto.ProtoOutputStream; +import android.view.Display; import com.android.internal.util.Preconditions; @@ -1143,8 +1144,7 @@ public final class PowerManager { * wake lock, and {@link WakeLock#release release()} when you are done. * </p><p> * {@samplecode - * PowerManager pm = (PowerManager)mContext.getSystemService( - * Context.POWER_SERVICE); + * PowerManager pm = mContext.getSystemService(PowerManager.class); * PowerManager.WakeLock wl = pm.newWakeLock( * PowerManager.SCREEN_DIM_WAKE_LOCK * | PowerManager.ON_AFTER_RELEASE, @@ -1162,6 +1162,8 @@ public final class PowerManager { * {@link android.view.WindowManager.LayoutParams#FLAG_KEEP_SCREEN_ON} instead. * This window flag will be correctly managed by the platform * as the user moves between applications and doesn't require a special permission. + * Additionally using the flag will keep only the appropriate screen on in a + * multi-display scenario while using a wake lock will keep every screen powered on. * </p> * * <p> @@ -1179,7 +1181,7 @@ public final class PowerManager { * can be transformed by java optimizer and obfuscator tools. * <li>avoid wrapping the tag or a prefix to avoid collision with wake lock * tags from the platform (e.g. *alarm*). - * <li>never include personnally identifiable information for privacy + * <li>never include personally identifiable information for privacy * reasons. * </ul> * </p> @@ -1200,7 +1202,27 @@ public final class PowerManager { */ public WakeLock newWakeLock(int levelAndFlags, String tag) { validateWakeLockParameters(levelAndFlags, tag); - return new WakeLock(levelAndFlags, tag, mContext.getOpPackageName()); + return new WakeLock(levelAndFlags, tag, mContext.getOpPackageName(), + Display.INVALID_DISPLAY); + } + + /** + * Creates a new wake lock with the specified level and flags. + * <p> + * The wakelock will only apply to the {@link com.android.server.display.DisplayGroup} of the + * provided {@code displayId}. If {@code displayId} is {@link Display#INVALID_DISPLAY} then it + * will apply to all {@link com.android.server.display.DisplayGroup DisplayGroups}. + * + * @param levelAndFlags Combination of wake lock level and flag values defining + * the requested behavior of the WakeLock. + * @param tag Your class name (or other tag) for debugging purposes. + * @param displayId The display id to which this wake lock is tied. + * + * @hide + */ + public WakeLock newWakeLock(int levelAndFlags, String tag, int displayId) { + validateWakeLockParameters(levelAndFlags, tag); + return new WakeLock(levelAndFlags, tag, mContext.getOpPackageName(), displayId); } /** @hide */ @@ -2603,19 +2625,17 @@ public final class PowerManager { private WorkSource mWorkSource; private String mHistoryTag; private final String mTraceName; + private final int mDisplayId; - private final Runnable mReleaser = new Runnable() { - public void run() { - release(RELEASE_FLAG_TIMEOUT); - } - }; + private final Runnable mReleaser = () -> release(RELEASE_FLAG_TIMEOUT); - WakeLock(int flags, String tag, String packageName) { + WakeLock(int flags, String tag, String packageName, int displayId) { mFlags = flags; mTag = tag; mPackageName = packageName; mToken = new Binder(); mTraceName = "WakeLock (" + mTag + ")"; + mDisplayId = displayId; } @Override @@ -2696,7 +2716,7 @@ public final class PowerManager { Trace.asyncTraceBegin(Trace.TRACE_TAG_POWER, mTraceName, 0); try { mService.acquireWakeLock(mToken, mFlags, mTag, mPackageName, mWorkSource, - mHistoryTag); + mHistoryTag, mDisplayId); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } |
