Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e1fe0d2

Browse files
committed
added min time between movement detection so you get multiple movement callbacks when the user does something like a shake
1 parent 9028353 commit e1fe0d2

File tree

2 files changed

+50
-5
lines changed

2 files changed

+50
-5
lines changed

library/src/root/gast/speech/movement/AccelerationEventListener.java

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,21 +40,37 @@ public class AccelerationEventListener implements SensorEventListener
4040
private boolean useHighPassFilter;
4141

4242
private MovementDetectionListener callback;
43+
44+
private long lastDetectedMovement = Long.MAX_VALUE;
45+
46+
private final static long DEFAULT_MIN_TIME_BETWEEN_MOVEMENT = 300;
47+
48+
public final static long DEFAULT_MIN_TIME_BETWEEN_MOVEMENT_DISABLED = -1;
49+
50+
private long minTimeBetweenMovement = DEFAULT_MIN_TIME_BETWEEN_MOVEMENT_DISABLED;
4351

4452
public AccelerationEventListener(boolean useHighPassFilter,
4553
MovementDetectionListener callback)
4654
{
47-
this(useHighPassFilter, callback, THRESHOLD_LOW);
55+
this(useHighPassFilter, callback, THRESHOLD_LOW, DEFAULT_MIN_TIME_BETWEEN_MOVEMENT_DISABLED);
4856
}
4957

5058
public AccelerationEventListener(boolean useHighPassFilter,
51-
MovementDetectionListener callback, int threshold)
59+
MovementDetectionListener callback, int threshold, long minTimeBetweenMovement)
5260
{
5361
this.useHighPassFilter = useHighPassFilter;
5462
gravity = new float[3];
5563
highPassCount = 0;
5664
this.callback = callback;
5765
this.threshold = threshold;
66+
this.minTimeBetweenMovement = minTimeBetweenMovement;
67+
68+
lastDetectedMovement = System.currentTimeMillis();
69+
}
70+
71+
public void setMinTimeBetweenMovement(long minTimeBetweenMovement)
72+
{
73+
this.minTimeBetweenMovement = minTimeBetweenMovement;
5874
}
5975

6076
@Override
@@ -83,7 +99,7 @@ public void onSensorChanged(SensorEvent event)
8399
if (acceleration > threshold)
84100
{
85101
Log.i(TAG, "Movement detected:" + acceleration);
86-
callback.movementDetected(true);
102+
possiblyReportMovement();
87103
}
88104
}
89105
}
@@ -113,6 +129,21 @@ private float[] highPass(float x, float y, float z)
113129

114130
return filteredValues;
115131
}
132+
133+
private void possiblyReportMovement()
134+
{
135+
long currentTime = System.currentTimeMillis();
136+
long timeDiff = currentTime - lastDetectedMovement;
137+
if (timeDiff < minTimeBetweenMovement)
138+
{
139+
Log.d(TAG, "movement detected too soon " + timeDiff);
140+
}
141+
else
142+
{
143+
lastDetectedMovement = currentTime;
144+
callback.movementDetected(true);
145+
}
146+
}
116147

117148
/**
118149
* TODO

library/src/root/gast/speech/movement/MovementDetector.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public class MovementDetector
3838
private boolean useHighPassFilter;
3939
private boolean useAccelerometer;
4040
private int threshold;
41+
private long minTimeBetweenMovementDetections;
4142

4243
public MovementDetector(Context context)
4344
{
@@ -48,6 +49,17 @@ public MovementDetector(Context context, boolean useAccelerometer)
4849
{
4950
this(context, false, useAccelerometer, AccelerationEventListener.THRESHOLD_LOW);
5051
}
52+
53+
public void setMinTimeBetweenMovementDetections(
54+
long minTimeBetweenMovementDetections)
55+
{
56+
this.minTimeBetweenMovementDetections = minTimeBetweenMovementDetections;
57+
}
58+
59+
public void setMinTimeBetweenShakes(long minTimeBetweenMovementDetections)
60+
{
61+
this.minTimeBetweenMovementDetections = minTimeBetweenMovementDetections;
62+
}
5163

5264
/**
5365
* @param useAccelerometer otherwise use linear acceleration
@@ -61,6 +73,7 @@ public MovementDetector(Context context, boolean useHighPassFilter, boolean useA
6173
this.useAccelerometer = useAccelerometer;
6274
this.useHighPassFilter = useHighPassFilter;
6375
this.threshold = threshold;
76+
this.minTimeBetweenMovementDetections = AccelerationEventListener.DEFAULT_MIN_TIME_BETWEEN_MOVEMENT_DISABLED;
6477
}
6578

6679
public void startReadingAccelerationData(MovementDetectionListener resultCallback)
@@ -75,15 +88,16 @@ public void startReadingAccelerationData(MovementDetectionListener resultCallbac
7588
if (useAccelerometer)
7689
{
7790
sensorListener =
78-
new AccelerationEventListener(useHighPassFilter, resultCallback, threshold);
91+
new AccelerationEventListener(
92+
useHighPassFilter, resultCallback, threshold, minTimeBetweenMovementDetections);
7993
sensorManager.registerListener(sensorListener,
8094
sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
8195
RATE);
8296
}
8397
else
8498
{
8599
sensorListener =
86-
new AccelerationEventListener(useHighPassFilter, resultCallback, threshold);
100+
new AccelerationEventListener(useHighPassFilter, resultCallback, threshold, minTimeBetweenMovementDetections);
87101
sensorManager.registerListener(sensorListener,
88102
sensorManager
89103
.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION),

0 commit comments

Comments
 (0)