<script>
import 'dart:sky';
import 'package:sky/framework/shell.dart' as shell;
import 'package:sky/services/sensors/sensors.mojom.dart';

// TODO(abarth): We should factor this out into a kinematics library.
class _ShakeDetector extends SensorListener {
  _ShakeDetector() {
    SensorServiceProxy sensorService = new SensorServiceProxy.unbound();
    shell.requestService(sensorService);

    _stub = new SensorListenerStub.unbound()..impl = this;
    sensorService.ptr.addListener(SensorType_ACCELEROMETER, _stub);
  }

  void onAccuracyChanged(int accuracy) {
  }

  void onSensorChanged(SensorData data) {
    double value = data.values[0] + data.values[1] + data.values[2];
    if (isShaking && value < 15.0)
      didCompleteShake();
    else if (value > 40.0)
      isShaking = true;
  }

  void didCompleteShake() {
    window.location.assign(document.URL);
    _stub.close();
  }

  bool isShaking = false;
  SensorListenerStub _stub;
}

_ShakeDetector _detector;

void _init(_) {
  _detector = new _ShakeDetector();
}
</script>
