1 // Copyright 2015-present 650 Industries. All rights reserved.
2 
3 package versioned.host.exp.exponent.modules.api;
4 
5 import android.content.Context;
6 import android.hardware.SensorManager;
7 
8 import com.facebook.react.bridge.ReactApplicationContext;
9 import com.facebook.react.bridge.ReactContextBaseJavaModule;
10 import com.facebook.react.common.ShakeDetector;
11 import com.facebook.react.modules.core.DeviceEventManagerModule;
12 
13 import host.exp.exponent.analytics.EXL;
14 
15 public class ShakeModule extends ReactContextBaseJavaModule {
16   private static final String TAG = ShakeModule.class.getSimpleName();
17 
18   private ShakeDetector mShakeDetector;
19 
ShakeModule(ReactApplicationContext reactContext)20   public ShakeModule(ReactApplicationContext reactContext) {
21     super(reactContext);
22 
23     mShakeDetector = new ShakeDetector(new ShakeDetector.ShakeListener() {
24       @Override
25       public void onShake() {
26         ShakeModule.this.onShake();
27       }
28     });
29     mShakeDetector.start((SensorManager) reactContext.getSystemService(Context.SENSOR_SERVICE));
30   }
31 
32   @Override
getName()33   public String getName() {
34     return "ExponentShake";
35   }
36 
onShake()37   private void onShake() {
38     try {
39       getReactApplicationContext()
40           .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
41           .emit("Exponent.shake", null);
42     } catch (Throwable e) {
43       EXL.e(TAG, e);
44     }
45   }
46 
47   @Override
onCatalystInstanceDestroy()48   public void onCatalystInstanceDestroy() {
49     super.onCatalystInstanceDestroy();
50     mShakeDetector.stop();
51   }
52 }
53