Skip to content

Commit 913515e

Browse files
authored
Merge pull request #378 from elimu-ai/375-receiver
feat(receiver): add number assessment event
2 parents 85e20c6 + fb9dd80 commit 913515e

File tree

5 files changed

+108
-2
lines changed

5 files changed

+108
-2
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,13 @@
4040
<action android:name="ai.elimu.intent.action.ANALYTICS_EVENT" />
4141
</intent-filter>
4242
</receiver>
43+
<receiver android:name=".receiver.NumberAssessmentEventReceiver"
44+
android:enabled="true"
45+
android:exported="true">
46+
<intent-filter>
47+
<action android:name="ai.elimu.intent.action.NUMBER_ASSESSMENT_EVENT" />
48+
</intent-filter>
49+
</receiver>
4350

4451
<provider
4552
android:name=".provider.LetterSoundAssessmentEventProvider"
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
package ai.elimu.analytics.dao
22

3+
import ai.elimu.analytics.entity.NumberAssessmentEvent
34
import androidx.room.Dao
5+
import androidx.room.Insert
46
import androidx.room.Query
57

68
@Dao
79
interface NumberAssessmentEventDao {
10+
@Insert
11+
fun insert(numberAssessmentEvent: NumberAssessmentEvent)
12+
813
@Query("SELECT COUNT(*) FROM NumberAssessmentEvent")
914
fun getCount(): Int
1015
}

app/src/main/java/ai/elimu/analytics/enum/EventType.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ enum class EventType(val type: String) {
3535
WORD_ASSESSMENT("word-assessment-events"),
3636
WORD_LEARNING("word-learning-events"),
3737

38-
NUMBER_LEARNING("number-learning-events"),
3938
// TODO: number assessment
39+
NUMBER_LEARNING("number-learning-events"),
4040

4141
STORY_BOOK_LEARNING("storybook-learning-events"),
4242

app/src/main/java/ai/elimu/analytics/receiver/AnalyticsEventReceiver.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,13 @@ class AnalyticsEventReceiver : BroadcastReceiver() {
1414
Timber.i("onReceive")
1515

1616
Timber.i("intent.action: ${intent.action}")
17+
1718
val bundle = intent.extras
1819
bundle?.let {
19-
Timber.i("bundle.keySet(): ${bundle.keySet().joinToString()}")
20+
for (key in bundle.keySet()) {
21+
val value = bundle.get(key)
22+
Timber.i("${key}: ${value}")
23+
}
2024
}
2125

2226
intent.getStringExtra("intent_action")?.let { action ->
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
package ai.elimu.analytics.receiver
2+
3+
import ai.elimu.analytics.db.RoomDb
4+
import ai.elimu.analytics.entity.NumberAssessmentEvent
5+
import ai.elimu.analytics.utils.BundleKeys
6+
import ai.elimu.analytics.utils.research.ExperimentAssignmentHelper
7+
import android.content.BroadcastReceiver
8+
import android.content.Context
9+
import android.content.Intent
10+
import android.provider.Settings
11+
import android.text.TextUtils
12+
import timber.log.Timber
13+
import java.util.Calendar
14+
15+
class NumberAssessmentEventReceiver : BroadcastReceiver() {
16+
17+
override fun onReceive(context: Context, intent: Intent) {
18+
Timber.i("onReceive")
19+
20+
val bundle = intent.extras
21+
bundle?.let {
22+
for (key in bundle.keySet()) {
23+
val value = bundle.get(key)
24+
Timber.i("${key}: ${value}")
25+
}
26+
}
27+
28+
val event = NumberAssessmentEvent()
29+
30+
val androidId: String = Settings.Secure.getString(context.contentResolver, Settings.Secure.ANDROID_ID)
31+
Timber.i("androidId: \"${androidId}\"")
32+
event.androidId = androidId
33+
34+
val packageName: String = intent.getStringExtra(BundleKeys.KEY_PACKAGE_NAME) ?: ""
35+
Timber.i("packageName: \"${packageName}\"")
36+
if (TextUtils.isEmpty(packageName)) {
37+
throw IllegalArgumentException("Missing packageName")
38+
}
39+
event.packageName = packageName
40+
41+
val timestamp: Calendar = Calendar.getInstance()
42+
Timber.i("timestamp.time: ${timestamp.time}")
43+
event.time = timestamp
44+
45+
val additionalData: String? = intent.getStringExtra(BundleKeys.KEY_ADDITIONAL_DATA)
46+
Timber.i("additionalData: ${additionalData}")
47+
event.additionalData = additionalData
48+
49+
val researchExperiment = ExperimentAssignmentHelper.CURRENT_EXPERIMENT
50+
Timber.i("researchExperiment: ${researchExperiment}")
51+
event.researchExperiment = researchExperiment
52+
53+
val experimentGroup = ExperimentAssignmentHelper.getExperimentGroup(context)
54+
Timber.i("experimentGroup: ${experimentGroup}")
55+
event.experimentGroup = experimentGroup
56+
57+
val masteryScore: Float = intent.getFloatExtra(BundleKeys.KEY_MASTERY_SCORE, -1f)
58+
Timber.i("masteryScore: ${masteryScore}")
59+
if ((masteryScore < 0) || (masteryScore > 1)) {
60+
throw IllegalArgumentException("Invalid masteryScore. Must be in the range [0.0, 1.0]")
61+
}
62+
event.masteryScore = masteryScore
63+
64+
val timeSpentMs: Long = intent.getLongExtra(BundleKeys.KEY_TIME_SPENT_MS, 0)
65+
Timber.i("timeSpentMs: ${timeSpentMs}")
66+
if (timeSpentMs <= 0) {
67+
throw IllegalArgumentException("Invalid timeSpentMs. Must be larger than 0")
68+
}
69+
event.timeSpentMs = timeSpentMs
70+
71+
val numberValue: Int = intent.getIntExtra(BundleKeys.KEY_NUMBER_VALUE, Int.MIN_VALUE)
72+
Timber.i("numberValue: ${numberValue}")
73+
if (numberValue == Int.MIN_VALUE) {
74+
throw IllegalArgumentException("Missing numberValue")
75+
}
76+
event.numberValue = numberValue
77+
78+
val numberId: Long = intent.getLongExtra(BundleKeys.KEY_NUMBER_ID, 0)
79+
Timber.i("numberId: ${numberId}")
80+
if (numberId > 0) {
81+
event.numberId = numberId
82+
}
83+
84+
// Store the event in the database
85+
val roomDb = RoomDb.getDatabase(context)
86+
RoomDb.databaseWriteExecutor.execute {
87+
roomDb.numberAssessmentEventDao().insert(event)
88+
}
89+
}
90+
}

0 commit comments

Comments
 (0)