Loading core/java/android/os/PowerManagerInternal.java +11 −0 Original line number Diff line number Diff line Loading @@ -53,6 +53,15 @@ public abstract class PowerManagerInternal { */ public static final int WAKEFULNESS_DOZING = 3; /** * Power hint: The user is interacting with the device. The corresponding data field must be * the expected duration of the fling, or 0 if unknown. * * This must be kept in sync with the values in hardware/libhardware/include/hardware/power.h */ public static final int POWER_HINT_INTERACTION = 2; public static String wakefulnessToString(int wakefulness) { switch (wakefulness) { case WAKEFULNESS_ASLEEP: Loading Loading @@ -148,4 +157,6 @@ public abstract class PowerManagerInternal { public abstract void updateUidProcState(int uid, int procState); public abstract void uidGone(int uid); public abstract void powerHint(int hintId, int data); } services/core/java/com/android/server/policy/PhoneWindowManager.java +10 −0 Original line number Diff line number Diff line Loading @@ -269,6 +269,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { PowerManagerInternal mPowerManagerInternal; ActivityManagerInternal mActivityManagerInternal; DreamManagerInternal mDreamManagerInternal; PowerManagerInternal mPowerManagerInternal; IStatusBarService mStatusBarService; boolean mPreloadedRecentApps; final Object mServiceAquireLock = new Object(); Loading Loading @@ -1343,6 +1344,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { mWindowManagerInternal = LocalServices.getService(WindowManagerInternal.class); mActivityManagerInternal = LocalServices.getService(ActivityManagerInternal.class); mDreamManagerInternal = LocalServices.getService(DreamManagerInternal.class); mPowerManagerInternal = LocalServices.getService(PowerManagerInternal.class); mAppOpsManager = (AppOpsManager) mContext.getSystemService(Context.APP_OPS_SERVICE); mPowerManagerInternal = LocalServices.getService(PowerManagerInternal.class); Loading Loading @@ -1520,6 +1522,13 @@ public class PhoneWindowManager implements WindowManagerPolicy { } } @Override public void onFling(int duration) { if (mPowerManagerInternal != null) { mPowerManagerInternal.powerHint( PowerManagerInternal.POWER_HINT_INTERACTION, duration); } } @Override public void onDebug() { // no-op } Loading Loading @@ -6114,6 +6123,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { mKeyguardDelegate.bindService(mContext); mKeyguardDelegate.onBootCompleted(); } mSystemGestures.systemReady(); } /** {@inheritDoc} */ Loading services/core/java/com/android/server/policy/SystemGesturesPointerEventListener.java +51 −0 Original line number Diff line number Diff line Loading @@ -17,9 +17,14 @@ package com.android.server.policy; import android.content.Context; import android.os.Handler; import android.os.Looper; import android.os.SystemClock; import android.util.Slog; import android.view.GestureDetector; import android.view.MotionEvent; import android.view.WindowManagerPolicy.PointerEventListener; import android.widget.OverScroller; /* * Listens for system-wide input gestures, firing callbacks when detected. Loading @@ -31,12 +36,14 @@ public class SystemGesturesPointerEventListener implements PointerEventListener private static final long SWIPE_TIMEOUT_MS = 500; private static final int MAX_TRACKED_POINTERS = 32; // max per input system private static final int UNTRACKED_POINTER = -1; private static final int MAX_FLING_TIME_MILLIS = 5000; private static final int SWIPE_NONE = 0; private static final int SWIPE_FROM_TOP = 1; private static final int SWIPE_FROM_BOTTOM = 2; private static final int SWIPE_FROM_RIGHT = 3; private final Context mContext; private final int mSwipeStartThreshold; private final int mSwipeDistanceThreshold; private final Callbacks mCallbacks; Loading @@ -45,14 +52,19 @@ public class SystemGesturesPointerEventListener implements PointerEventListener private final float[] mDownY = new float[MAX_TRACKED_POINTERS]; private final long[] mDownTime = new long[MAX_TRACKED_POINTERS]; private GestureDetector mGestureDetector; private OverScroller mOverscroller; int screenHeight; int screenWidth; private int mDownPointers; private boolean mSwipeFireable; private boolean mDebugFireable; private boolean mMouseHoveringAtEdge; private long mLastFlingTime; public SystemGesturesPointerEventListener(Context context, Callbacks callbacks) { mContext = context; mCallbacks = checkNull("callbacks", callbacks); mSwipeStartThreshold = checkNull("context", context).getResources() .getDimensionPixelSize(com.android.internal.R.dimen.status_bar_height); Loading @@ -68,8 +80,17 @@ public class SystemGesturesPointerEventListener implements PointerEventListener return arg; } public void systemReady() { Handler h = new Handler(Looper.myLooper()); mGestureDetector = new GestureDetector(mContext, new FlingGestureDetector(), h); mOverscroller = new OverScroller(mContext); } @Override public void onPointerEvent(MotionEvent event) { if (mGestureDetector != null) { mGestureDetector.onTouchEvent(event); } switch (event.getActionMasked()) { case MotionEvent.ACTION_DOWN: mSwipeFireable = true; Loading Loading @@ -211,10 +232,40 @@ public class SystemGesturesPointerEventListener implements PointerEventListener return SWIPE_NONE; } private final class FlingGestureDetector extends GestureDetector.SimpleOnGestureListener { @Override public boolean onSingleTapUp(MotionEvent e) { if (!mOverscroller.isFinished()) { mOverscroller.forceFinished(true); } return true; } @Override public boolean onFling(MotionEvent down, MotionEvent up, float velocityX, float velocityY) { mOverscroller.computeScrollOffset(); long now = SystemClock.uptimeMillis(); if (mLastFlingTime != 0 && now > mLastFlingTime + MAX_FLING_TIME_MILLIS) { mOverscroller.forceFinished(true); } mOverscroller.fling(0, 0, (int)velocityX, (int)velocityY, Integer.MIN_VALUE, Integer.MAX_VALUE, Integer.MIN_VALUE, Integer.MAX_VALUE); int duration = mOverscroller.getDuration(); if (duration > MAX_FLING_TIME_MILLIS) { duration = MAX_FLING_TIME_MILLIS; } mLastFlingTime = now; mCallbacks.onFling(duration); return true; } } interface Callbacks { void onSwipeFromTop(); void onSwipeFromBottom(); void onSwipeFromRight(); void onFling(int durationMs); void onDown(); void onUpOrCancel(); void onMouseHoverAtTop(); Loading services/core/java/com/android/server/power/PowerManagerService.java +6 −1 Original line number Diff line number Diff line Loading @@ -76,6 +76,7 @@ import java.util.Arrays; import libcore.util.Objects; import static android.os.PowerManagerInternal.POWER_HINT_INTERACTION; import static android.os.PowerManagerInternal.WAKEFULNESS_ASLEEP; import static android.os.PowerManagerInternal.WAKEFULNESS_AWAKE; import static android.os.PowerManagerInternal.WAKEFULNESS_DREAMING; Loading Loading @@ -150,7 +151,6 @@ public final class PowerManagerService extends SystemService private static final int SCREEN_BRIGHTNESS_BOOST_TIMEOUT = 5 * 1000; // Power hints defined in hardware/libhardware/include/hardware/power.h. private static final int POWER_HINT_INTERACTION = 2; private static final int POWER_HINT_LOW_POWER = 5; // Power features defined in hardware/libhardware/include/hardware/power.h. Loading Loading @@ -3570,5 +3570,10 @@ public final class PowerManagerService extends SystemService public void uidGone(int uid) { uidGoneInternal(uid); } @Override public void powerHint(int hintId, int data) { powerHintInternal(hintId, data); } } } Loading
core/java/android/os/PowerManagerInternal.java +11 −0 Original line number Diff line number Diff line Loading @@ -53,6 +53,15 @@ public abstract class PowerManagerInternal { */ public static final int WAKEFULNESS_DOZING = 3; /** * Power hint: The user is interacting with the device. The corresponding data field must be * the expected duration of the fling, or 0 if unknown. * * This must be kept in sync with the values in hardware/libhardware/include/hardware/power.h */ public static final int POWER_HINT_INTERACTION = 2; public static String wakefulnessToString(int wakefulness) { switch (wakefulness) { case WAKEFULNESS_ASLEEP: Loading Loading @@ -148,4 +157,6 @@ public abstract class PowerManagerInternal { public abstract void updateUidProcState(int uid, int procState); public abstract void uidGone(int uid); public abstract void powerHint(int hintId, int data); }
services/core/java/com/android/server/policy/PhoneWindowManager.java +10 −0 Original line number Diff line number Diff line Loading @@ -269,6 +269,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { PowerManagerInternal mPowerManagerInternal; ActivityManagerInternal mActivityManagerInternal; DreamManagerInternal mDreamManagerInternal; PowerManagerInternal mPowerManagerInternal; IStatusBarService mStatusBarService; boolean mPreloadedRecentApps; final Object mServiceAquireLock = new Object(); Loading Loading @@ -1343,6 +1344,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { mWindowManagerInternal = LocalServices.getService(WindowManagerInternal.class); mActivityManagerInternal = LocalServices.getService(ActivityManagerInternal.class); mDreamManagerInternal = LocalServices.getService(DreamManagerInternal.class); mPowerManagerInternal = LocalServices.getService(PowerManagerInternal.class); mAppOpsManager = (AppOpsManager) mContext.getSystemService(Context.APP_OPS_SERVICE); mPowerManagerInternal = LocalServices.getService(PowerManagerInternal.class); Loading Loading @@ -1520,6 +1522,13 @@ public class PhoneWindowManager implements WindowManagerPolicy { } } @Override public void onFling(int duration) { if (mPowerManagerInternal != null) { mPowerManagerInternal.powerHint( PowerManagerInternal.POWER_HINT_INTERACTION, duration); } } @Override public void onDebug() { // no-op } Loading Loading @@ -6114,6 +6123,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { mKeyguardDelegate.bindService(mContext); mKeyguardDelegate.onBootCompleted(); } mSystemGestures.systemReady(); } /** {@inheritDoc} */ Loading
services/core/java/com/android/server/policy/SystemGesturesPointerEventListener.java +51 −0 Original line number Diff line number Diff line Loading @@ -17,9 +17,14 @@ package com.android.server.policy; import android.content.Context; import android.os.Handler; import android.os.Looper; import android.os.SystemClock; import android.util.Slog; import android.view.GestureDetector; import android.view.MotionEvent; import android.view.WindowManagerPolicy.PointerEventListener; import android.widget.OverScroller; /* * Listens for system-wide input gestures, firing callbacks when detected. Loading @@ -31,12 +36,14 @@ public class SystemGesturesPointerEventListener implements PointerEventListener private static final long SWIPE_TIMEOUT_MS = 500; private static final int MAX_TRACKED_POINTERS = 32; // max per input system private static final int UNTRACKED_POINTER = -1; private static final int MAX_FLING_TIME_MILLIS = 5000; private static final int SWIPE_NONE = 0; private static final int SWIPE_FROM_TOP = 1; private static final int SWIPE_FROM_BOTTOM = 2; private static final int SWIPE_FROM_RIGHT = 3; private final Context mContext; private final int mSwipeStartThreshold; private final int mSwipeDistanceThreshold; private final Callbacks mCallbacks; Loading @@ -45,14 +52,19 @@ public class SystemGesturesPointerEventListener implements PointerEventListener private final float[] mDownY = new float[MAX_TRACKED_POINTERS]; private final long[] mDownTime = new long[MAX_TRACKED_POINTERS]; private GestureDetector mGestureDetector; private OverScroller mOverscroller; int screenHeight; int screenWidth; private int mDownPointers; private boolean mSwipeFireable; private boolean mDebugFireable; private boolean mMouseHoveringAtEdge; private long mLastFlingTime; public SystemGesturesPointerEventListener(Context context, Callbacks callbacks) { mContext = context; mCallbacks = checkNull("callbacks", callbacks); mSwipeStartThreshold = checkNull("context", context).getResources() .getDimensionPixelSize(com.android.internal.R.dimen.status_bar_height); Loading @@ -68,8 +80,17 @@ public class SystemGesturesPointerEventListener implements PointerEventListener return arg; } public void systemReady() { Handler h = new Handler(Looper.myLooper()); mGestureDetector = new GestureDetector(mContext, new FlingGestureDetector(), h); mOverscroller = new OverScroller(mContext); } @Override public void onPointerEvent(MotionEvent event) { if (mGestureDetector != null) { mGestureDetector.onTouchEvent(event); } switch (event.getActionMasked()) { case MotionEvent.ACTION_DOWN: mSwipeFireable = true; Loading Loading @@ -211,10 +232,40 @@ public class SystemGesturesPointerEventListener implements PointerEventListener return SWIPE_NONE; } private final class FlingGestureDetector extends GestureDetector.SimpleOnGestureListener { @Override public boolean onSingleTapUp(MotionEvent e) { if (!mOverscroller.isFinished()) { mOverscroller.forceFinished(true); } return true; } @Override public boolean onFling(MotionEvent down, MotionEvent up, float velocityX, float velocityY) { mOverscroller.computeScrollOffset(); long now = SystemClock.uptimeMillis(); if (mLastFlingTime != 0 && now > mLastFlingTime + MAX_FLING_TIME_MILLIS) { mOverscroller.forceFinished(true); } mOverscroller.fling(0, 0, (int)velocityX, (int)velocityY, Integer.MIN_VALUE, Integer.MAX_VALUE, Integer.MIN_VALUE, Integer.MAX_VALUE); int duration = mOverscroller.getDuration(); if (duration > MAX_FLING_TIME_MILLIS) { duration = MAX_FLING_TIME_MILLIS; } mLastFlingTime = now; mCallbacks.onFling(duration); return true; } } interface Callbacks { void onSwipeFromTop(); void onSwipeFromBottom(); void onSwipeFromRight(); void onFling(int durationMs); void onDown(); void onUpOrCancel(); void onMouseHoverAtTop(); Loading
services/core/java/com/android/server/power/PowerManagerService.java +6 −1 Original line number Diff line number Diff line Loading @@ -76,6 +76,7 @@ import java.util.Arrays; import libcore.util.Objects; import static android.os.PowerManagerInternal.POWER_HINT_INTERACTION; import static android.os.PowerManagerInternal.WAKEFULNESS_ASLEEP; import static android.os.PowerManagerInternal.WAKEFULNESS_AWAKE; import static android.os.PowerManagerInternal.WAKEFULNESS_DREAMING; Loading Loading @@ -150,7 +151,6 @@ public final class PowerManagerService extends SystemService private static final int SCREEN_BRIGHTNESS_BOOST_TIMEOUT = 5 * 1000; // Power hints defined in hardware/libhardware/include/hardware/power.h. private static final int POWER_HINT_INTERACTION = 2; private static final int POWER_HINT_LOW_POWER = 5; // Power features defined in hardware/libhardware/include/hardware/power.h. Loading Loading @@ -3570,5 +3570,10 @@ public final class PowerManagerService extends SystemService public void uidGone(int uid) { uidGoneInternal(uid); } @Override public void powerHint(int hintId, int data) { powerHintInternal(hintId, data); } } }