Merge "Sensor batching APIs for review." into klp-dev
diff --git a/api/current.txt b/api/current.txt
index 1443bee..f77c3e5 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -10623,6 +10623,10 @@
     field public int width;
   }
 
+  public abstract interface FlushCompleteListener {
+    method public abstract void onFlushCompleted(android.hardware.Sensor);
+  }
+
   public class GeomagneticField {
     ctor public GeomagneticField(float, float, float, long);
     method public float getDeclination();
@@ -10635,6 +10639,8 @@
   }
 
   public final class Sensor {
+    method public int getFifoMaxEventCount();
+    method public int getFifoReservedEventCount();
     method public float getMaximumRange();
     method public int getMinDelay();
     method public java.lang.String getName();
@@ -10685,6 +10691,7 @@
 
   public abstract class SensorManager {
     method public boolean cancelTriggerSensor(android.hardware.TriggerEventListener, android.hardware.Sensor);
+    method public boolean flush(android.hardware.Sensor);
     method public static float getAltitude(float, float);
     method public static void getAngleChange(float[], float[], float[]);
     method public android.hardware.Sensor getDefaultSensor(int);
@@ -10698,7 +10705,9 @@
     method public deprecated boolean registerListener(android.hardware.SensorListener, int);
     method public deprecated boolean registerListener(android.hardware.SensorListener, int, int);
     method public boolean registerListener(android.hardware.SensorEventListener, android.hardware.Sensor, int);
+    method public boolean registerListener(android.hardware.SensorEventListener, android.hardware.Sensor, int, int, int, android.hardware.FlushCompleteListener);
     method public boolean registerListener(android.hardware.SensorEventListener, android.hardware.Sensor, int, android.os.Handler);
+    method public boolean registerListener(android.hardware.SensorEventListener, android.hardware.Sensor, int, int, int, android.os.Handler, android.hardware.FlushCompleteListener);
     method public static boolean remapCoordinateSystem(float[], int, int, float[]);
     method public boolean requestTriggerSensor(android.hardware.TriggerEventListener, android.hardware.Sensor);
     method public deprecated void unregisterListener(android.hardware.SensorListener);
diff --git a/core/java/android/hardware/FlushCompleteListener.java b/core/java/android/hardware/FlushCompleteListener.java
index cb5b9e3..fbdf4c8 100644
--- a/core/java/android/hardware/FlushCompleteListener.java
+++ b/core/java/android/hardware/FlushCompleteListener.java
@@ -18,7 +18,6 @@
 
 /**
  * Used for receiving a notification when a flush() has been successfully completed.
- * @hide
  */
 public interface FlushCompleteListener {
     /**
diff --git a/core/java/android/hardware/Sensor.java b/core/java/android/hardware/Sensor.java
index bbede57..89a5819 100644
--- a/core/java/android/hardware/Sensor.java
+++ b/core/java/android/hardware/Sensor.java
@@ -385,8 +385,7 @@
 
     /**
      * @return Number of events reserved for this sensor in the batch mode FIFO. This gives a
-     * guarantee on the minimum number of events that can be batched
-     * @hide
+     * guarantee on the minimum number of events that can be batched.
      */
     public int getFifoReservedEventCount() {
         return mFifoReservedEventCount;
@@ -397,7 +396,6 @@
      * it indicates that batch mode is not supported for this sensor. If other applications
      * registered to batched sensors, the actual number of events that can be batched might be
      * smaller because the hardware FiFo will be partially used to batch the other sensors.
-     * @hide
      */
     public int getFifoMaxEventCount() {
         return mFifoMaxEventCount;
diff --git a/core/java/android/hardware/SensorManager.java b/core/java/android/hardware/SensorManager.java
index b6ca62a..8a4aa1d 100644
--- a/core/java/android/hardware/SensorManager.java
+++ b/core/java/android/hardware/SensorManager.java
@@ -582,7 +582,7 @@
      * @param sensor
      *        The {@link android.hardware.Sensor Sensor} to register to.
      *
-     * @param rate
+     * @param rateUs
      *        The rate {@link android.hardware.SensorEvent sensor events} are
      *        delivered at. This is only a hint to the system. Events may be
      *        received faster or slower than the specified rate. Usually events
@@ -603,14 +603,14 @@
      *
      * @throws IllegalArgumentException when sensor is null or a trigger sensor
      */
-    public boolean registerListener(SensorEventListener listener, Sensor sensor, int rate) {
-        return registerListener(listener, sensor, rate, null);
+    public boolean registerListener(SensorEventListener listener, Sensor sensor, int rateUs) {
+        return registerListener(listener, sensor, rateUs, null);
     }
 
     /**
      * Enables batch mode for a sensor with the given rate and maxBatchReportLatency. If the
      * underlying hardware does not support batch mode, this defaults to
-     * {@link #registerListener(SensorEventListener, Sensor, int)} and other parameters are are
+     * {@link #registerListener(SensorEventListener, Sensor, int)} and other parameters are
      * ignored. In non-batch mode, all sensor events must be reported as soon as they are detected.
      * While in batch mode, sensor events do not need to be reported as soon as they are detected.
      * They can be temporarily stored in batches and reported in batches, as long as no event is
@@ -640,13 +640,13 @@
      * @param listener A {@link android.hardware.SensorEventListener SensorEventListener} object
      *            that will receive the sensor events.
      * @param sensor The {@link android.hardware.Sensor Sensor} to register to.
-     * @param rate The desired delay between two consecutive events in microseconds. This is only a
-     *            hint to the system. Events may be received faster or slower than the specified
+     * @param rateUs The desired delay between two consecutive events in microseconds. This is only
+     *            a hint to the system. Events may be received faster or slower than the specified
      *            rate. Usually events are received faster. Can be one of
      *            {@link #SENSOR_DELAY_NORMAL}, {@link #SENSOR_DELAY_UI},
      *            {@link #SENSOR_DELAY_GAME}, {@link #SENSOR_DELAY_FASTEST} or the delay in
      *            microseconds.
-     * @param maxBatchReportLatency An event in the batch can be delayed by at most
+     * @param maxBatchReportLatencyUs An event in the batch can be delayed by at most
      *            maxBatchReportLatency microseconds. More events can be batched if this value is
      *            large. If this is set to zero, batch mode is disabled and events are delivered in
      *            continuous mode as soon as they are available which is equivalent to calling
@@ -661,7 +661,6 @@
      * @see #unregisterListener(SensorEventListener)
      * @see #flush(Sensor)
      * @throws IllegalArgumentException when sensor or listener is null or a trigger sensor.
-     * @hide
      */
     public boolean registerListener(SensorEventListener listener, Sensor sensor, int rateUs,
             int maxBatchReportLatencyUs, int reservedFlags,
@@ -673,7 +672,9 @@
 
     /**
      * Registers a {@link android.hardware.SensorEventListener SensorEventListener} for the given
-     * sensor. Events are delivered in continuous mode as soon as they are available.
+     * sensor. Events are delivered in continuous mode as soon as they are available. To reduce the
+     * battery usage, use {@link #registerListener(SensorEventListener, Sensor, int, int, int,
+     * FlushCompleteListener)} which enables batch mode for the sensor.
      *
      * <p class="note"></p>
      * Note: Don't use this method with a one shot trigger sensor such as
@@ -688,7 +689,7 @@
      * @param sensor
      *        The {@link android.hardware.Sensor Sensor} to register to.
      *
-     * @param rate
+     * @param rateUs
      *        The rate {@link android.hardware.SensorEvent sensor events} are
      *        delivered at. This is only a hint to the system. Events may be
      *        received faster or slower than the specified rate. Usually events
@@ -713,13 +714,13 @@
      *
      * @throws IllegalArgumentException when sensor is null or a trigger sensor
      */
-    public boolean registerListener(SensorEventListener listener, Sensor sensor, int rate,
+    public boolean registerListener(SensorEventListener listener, Sensor sensor, int rateUs,
             Handler handler) {
         if (listener == null || sensor == null) {
             return false;
         }
 
-        int delay = getDelay(rate);
+        int delay = getDelay(rateUs);
         return registerListenerImpl(listener, sensor, delay, handler, 0, 0, null);
     }
 
@@ -731,7 +732,6 @@
      *        delivered to.
      *
      * @see #registerListener(SensorEventListener, Sensor, int, int, int, FlushCompleteListener)
-     * @hide
      */
     public boolean registerListener(SensorEventListener listener, Sensor sensor, int rateUs,
             int maxBatchReportLatencyUs, int reservedFlags, Handler handler,
@@ -760,7 +760,6 @@
      *         i.e no application is registered for updates from this sensor.
      * @see #registerListener(SensorEventListener, Sensor, int, int, int, FlushCompleteListener)
      * @throws IllegalArgumentException when sensor is null or a trigger sensor.
-     * @hide
      */
     public boolean flush(Sensor sensor) {
         return flushImpl(sensor);