Skip to content

Commit 39071f7

Browse files
committed
Clean up shake detection trigger example
1 parent cc09fdb commit 39071f7

File tree

4 files changed

+82
-75
lines changed

4 files changed

+82
-75
lines changed

firebase-appdistribution/test-app/src/main/java/com/googletest/firebase/appdistribution/testapp/AppDistroTestApplication.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ class AppDistroTestApplication : Application() {
1111
CustomNotificationFeedbackTrigger.initialize(this);
1212

1313
// Default feedback triggers can optionally be enabled application-wide here
14-
// ShakeForFeedback.enable(this)
14+
// ShakeDetectionFeedbackTrigger.enable(this)
1515
// ScreenshotDetectionFeedbackTrigger.enable()
1616
// NotificationFeedbackTrigger.enable()
1717
}

firebase-appdistribution/test-app/src/main/java/com/googletest/firebase/appdistribution/testapp/MainActivity.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ class MainActivity : AppCompatActivity() {
103103
FeedbackTrigger.SHAKE.label -> {
104104
disableAllFeedbackTriggers()
105105
Log.i(TAG, "Enabling shake for feedback trigger")
106-
ShakeForFeedback.enable(application, this)
106+
ShakeDetectionFeedbackTrigger.enable(application, this)
107107
}
108108
FeedbackTrigger.SCREENSHOT.label -> {
109109
disableAllFeedbackTriggers()
@@ -123,7 +123,7 @@ class MainActivity : AppCompatActivity() {
123123
Log.i(TAG, "Disabling all feedback triggers")
124124
firebaseAppDistribution.cancelFeedbackNotification()
125125
CustomNotificationFeedbackTrigger.disable()
126-
ShakeForFeedback.disable(application)
126+
ShakeDetectionFeedbackTrigger.disable(application)
127127
ScreenshotDetectionFeedbackTrigger.disable()
128128
}
129129

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
package com.googletest.firebase.appdistribution.testapp
2+
3+
import android.app.Activity
4+
import android.app.Application
5+
import android.hardware.SensorManager
6+
import android.os.Bundle
7+
import android.util.Log
8+
import com.google.firebase.appdistribution.ktx.appDistribution
9+
import com.google.firebase.ktx.Firebase
10+
import com.squareup.seismic.ShakeDetector
11+
12+
/**
13+
* Listens to the device accelerometer, and starts App Distribution in-app feedback when the user
14+
* shakes their device.
15+
*/
16+
object ShakeDetectionFeedbackTrigger : ShakeDetector.Listener, Application.ActivityLifecycleCallbacks {
17+
private const val TAG: String = "ShakeDetectionFeedbackTrigger"
18+
19+
private val shakeDetector =
20+
ShakeDetector(this).also { it.setSensitivity(ShakeDetector.SENSITIVITY_LIGHT) }
21+
private var isEnabled = false
22+
23+
/** Start listening for device shakes. */
24+
fun enable(application: Application, currentActivity: Activity? = null) {
25+
synchronized(this) {
26+
if (!isEnabled) {
27+
application.registerActivityLifecycleCallbacks(this)
28+
Log.i(TAG, "Shake detector registered")
29+
if (currentActivity != null) {
30+
listenForShakes(currentActivity)
31+
}
32+
isEnabled = true
33+
}
34+
}
35+
}
36+
37+
/** Stop listening for device shakes. */
38+
fun disable(application: Application) {
39+
synchronized(this) {
40+
if (isEnabled) {
41+
stopListeningForShakes()
42+
application.unregisterActivityLifecycleCallbacks(this)
43+
Log.i(TAG, "Shake detector unregistered")
44+
isEnabled = false
45+
}
46+
}
47+
}
48+
49+
private fun listenForShakes(activity: Activity) {
50+
val sensorManager = activity.getSystemService(Activity.SENSOR_SERVICE) as SensorManager
51+
shakeDetector.start(sensorManager, SensorManager.SENSOR_DELAY_NORMAL)
52+
}
53+
54+
private fun stopListeningForShakes() {
55+
shakeDetector.stop()
56+
}
57+
58+
override fun hearShake() {
59+
Log.i(TAG, "Shake detected")
60+
Firebase.appDistribution.startFeedback(R.string.termsAndConditions)
61+
}
62+
63+
override fun onActivityResumed(activity: Activity) {
64+
Log.i(TAG, "Shake detection started")
65+
listenForShakes(activity)
66+
}
67+
68+
override fun onActivityPaused(activity: Activity) {
69+
Log.i(TAG, "Shake detection stopped")
70+
stopListeningForShakes()
71+
}
72+
73+
// Other lifecycle methods
74+
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {}
75+
override fun onActivityStarted(activity: Activity) {}
76+
override fun onActivityStopped(activity: Activity) {}
77+
override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {}
78+
override fun onActivityDestroyed(activity: Activity) {}
79+
}

firebase-appdistribution/test-app/src/main/java/com/googletest/firebase/appdistribution/testapp/ShakeForFeedback.kt

Lines changed: 0 additions & 72 deletions
This file was deleted.

0 commit comments

Comments
 (0)