Skip to content

Commit 62ffd8a

Browse files
committed
refactor: remove letter learning event
#208
1 parent cfece7e commit 62ffd8a

File tree

9 files changed

+2
-290
lines changed

9 files changed

+2
-290
lines changed

app/src/main/AndroidManifest.xml

-7
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,6 @@
2626
<activity android:name=".EventListActivity" />
2727
<activity android:name=".language.SelectLanguageActivity" />
2828

29-
<receiver android:name=".receiver.LetterLearningEventReceiver"
30-
android:enabled="true"
31-
android:exported="true">
32-
<intent-filter>
33-
<action android:name="ai.elimu.intent.action.LETTER_LEARNING_EVENT" />
34-
</intent-filter>
35-
</receiver>
3629
<receiver android:name=".receiver.LetterAssessmentEventReceiver"
3730
android:enabled="true"
3831
android:exported="true">

app/src/main/java/ai/elimu/analytics/dao/LetterLearningEventDao.java

-24
This file was deleted.

app/src/main/java/ai/elimu/analytics/entity/LetterLearningEvent.java

-42
This file was deleted.

app/src/main/java/ai/elimu/analytics/receiver/LetterLearningEventReceiver.java

-60
This file was deleted.

app/src/main/java/ai/elimu/analytics/rest/LetterLearningEventService.java

-15
This file was deleted.

app/src/main/java/ai/elimu/analytics/task/ExportEventsToCsvWorker.java

-68
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,12 @@
1717
import java.util.List;
1818

1919
import ai.elimu.analytics.dao.LetterAssessmentEventDao;
20-
import ai.elimu.analytics.dao.LetterLearningEventDao;
2120
import ai.elimu.analytics.dao.LetterSoundLearningEventDao;
2221
import ai.elimu.analytics.dao.StoryBookLearningEventDao;
2322
import ai.elimu.analytics.dao.WordAssessmentEventDao;
2423
import ai.elimu.analytics.dao.WordLearningEventDao;
2524
import ai.elimu.analytics.db.RoomDb;
2625
import ai.elimu.analytics.entity.LetterAssessmentEvent;
27-
import ai.elimu.analytics.entity.LetterLearningEvent;
2826
import ai.elimu.analytics.entity.LetterSoundLearningEvent;
2927
import ai.elimu.analytics.entity.StoryBookLearningEvent;
3028
import ai.elimu.analytics.entity.WordAssessmentEvent;
@@ -47,7 +45,6 @@ public ExportEventsToCsvWorker(@NonNull Context context, @NonNull WorkerParamete
4745
public Result doWork() {
4846
Timber.i("doWork");
4947

50-
exportLetterLearningEventsToCsv();
5148
exportLetterAssessmentEventsToCsv();
5249
exportLetterSoundLearningEventsToCsv();
5350
exportWordLearningEventsToCsv();
@@ -57,71 +54,6 @@ public Result doWork() {
5754
return Result.success();
5855
}
5956

60-
private void exportLetterLearningEventsToCsv() {
61-
Timber.i("exportLetterLearningEventsToCsv");
62-
63-
// Extract LetterLearningEvents from the database that have not yet been exported to CSV.
64-
RoomDb roomDb = RoomDb.getDatabase(getApplicationContext());
65-
LetterLearningEventDao letterLearningEventDao = roomDb.letterLearningEventDao();
66-
List<LetterLearningEvent> letterLearningEvents = letterLearningEventDao.loadAllOrderedByTimeDesc();
67-
Timber.i("letterLearningEvents.size(): " + letterLearningEvents.size());
68-
69-
CSVFormat csvFormat = CSVFormat.DEFAULT
70-
.withHeader(
71-
"id",
72-
"time",
73-
"android_id",
74-
"package_name",
75-
"letter_id",
76-
"letter_text",
77-
"learning_event_type"
78-
);
79-
StringWriter stringWriter = new StringWriter();
80-
try {
81-
CSVPrinter csvPrinter = new CSVPrinter(stringWriter, csvFormat);
82-
83-
// Generate one CSV file per day of events
84-
String dateOfPreviousEvent = null;
85-
for (LetterLearningEvent letterLearningEvent : letterLearningEvents) {
86-
// Export event to CSV file. Example format:
87-
// files/version-code-3001012/letter-learning-events/7161a85a0e4751cd_3001012_letter-learning-events_2020-03-21.csv
88-
Integer versionCode = VersionHelper.getAppVersionCode(getApplicationContext());
89-
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
90-
String date = simpleDateFormat.format(letterLearningEvent.time.getTime());
91-
if (!date.equals(dateOfPreviousEvent)) {
92-
// Reset file content
93-
stringWriter = new StringWriter();
94-
csvPrinter = new CSVPrinter(stringWriter, csvFormat);
95-
}
96-
dateOfPreviousEvent = date;
97-
String csvFilename = letterLearningEvent.androidId + "_" + versionCode + "_letter-learning-events_" + date + ".csv";
98-
Timber.i("csvFilename: " + csvFilename);
99-
100-
csvPrinter.printRecord(
101-
letterLearningEvent.getId(),
102-
letterLearningEvent.time.getTimeInMillis(),
103-
letterLearningEvent.androidId,
104-
letterLearningEvent.packageName,
105-
letterLearningEvent.getLetterId(),
106-
letterLearningEvent.getLetterText(),
107-
letterLearningEvent.getLearningEventType()
108-
);
109-
csvPrinter.flush();
110-
111-
String csvFileContent = stringWriter.toString();
112-
113-
// Write the content to the CSV file
114-
File filesDir = getApplicationContext().getFilesDir();
115-
File versionCodeDir = new File(filesDir, "version-code-" + versionCode);
116-
File letterLearningEventsDir = new File(versionCodeDir, "letter-learning-events");
117-
File csvFile = new File(letterLearningEventsDir, csvFilename);
118-
FileUtils.writeStringToFile(csvFile, csvFileContent, "UTF-8");
119-
}
120-
} catch (IOException e) {
121-
Timber.e(e);
122-
}
123-
}
124-
12557
private void exportLetterAssessmentEventsToCsv() {
12658
Timber.i("exportLetterAssessmentEventsToCsv");
12759

app/src/main/java/ai/elimu/analytics/task/UploadEventsWorker.kt

-54
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package ai.elimu.analytics.task
22

33
import ai.elimu.analytics.BaseApplication
44
import ai.elimu.analytics.rest.LetterAssessmentEventService
5-
import ai.elimu.analytics.rest.LetterLearningEventService
65
import ai.elimu.analytics.rest.LetterSoundLearningEventService
76
import ai.elimu.analytics.rest.StoryBookLearningEventService
87
import ai.elimu.analytics.rest.WordAssessmentEventService
@@ -26,7 +25,6 @@ class UploadEventsWorker(context: Context, workerParams: WorkerParameters) :
2625
override fun doWork(): Result {
2726
Timber.i("doWork")
2827

29-
uploadLetterLearningEvents()
3028
uploadLetterAssessmentEvents()
3129
uploadLetterSoundLearningEvents()
3230
uploadWordLearningEvents()
@@ -36,58 +34,6 @@ class UploadEventsWorker(context: Context, workerParams: WorkerParameters) :
3634
return Result.success()
3735
}
3836

39-
private fun uploadLetterLearningEvents() {
40-
Timber.i("uploadLetterLearningEvents")
41-
42-
// Upload CSV files to the server
43-
// Example format:
44-
// files/version-code-3001012/letter-learning-events/7161a85a0e4751cd_3001012_letter-learning-events_2020-03-21.csv
45-
val filesDir = applicationContext.filesDir
46-
for (versionCodeDir in (filesDir.listFiles() ?: emptyArray())) {
47-
Timber.i("versionCodeDir: $versionCodeDir")
48-
if (versionCodeDir.name.startsWith("version-code-")) {
49-
val letterLearningEventsDir = File(versionCodeDir, "letter-learning-events")
50-
Timber.i("Uploading CSV files from $letterLearningEventsDir")
51-
val files = letterLearningEventsDir.listFiles()
52-
if (files != null) {
53-
Timber.i("files.length: " + files.size)
54-
Arrays.sort(files)
55-
for (i in files.indices) {
56-
val file = files[i]
57-
Timber.i("file.getAbsoluteFile(): " + file.absoluteFile)
58-
Timber.i("file.getName(): " + file.name)
59-
60-
val baseApplication = applicationContext as BaseApplication
61-
val retrofit = baseApplication.retrofit
62-
val letterLearningEventService = retrofit.create(
63-
LetterLearningEventService::class.java
64-
)
65-
val requestBody =
66-
RequestBody.create(MediaType.parse("multipart/form-data"), file)
67-
val part = MultipartBody.Part.createFormData("file", file.name, requestBody)
68-
val call = letterLearningEventService.uploadCsvFile(part)
69-
Timber.i("call.request(): " + call.request())
70-
try {
71-
val response = call.execute()
72-
Timber.i("response: $response")
73-
Timber.i("response.isSuccessful(): " + response.isSuccessful)
74-
if (response.isSuccessful) {
75-
val bodyString = response.body()!!.string()
76-
Timber.i("bodyString: $bodyString")
77-
} else {
78-
val errorBodyString = response.errorBody()!!.string()
79-
Timber.e("errorBodyString: $errorBodyString")
80-
// TODO: Handle error
81-
}
82-
} catch (e: IOException) {
83-
Timber.e(e)
84-
}
85-
}
86-
}
87-
}
88-
}
89-
}
90-
9137
private fun uploadLetterAssessmentEvents() {
9238
Timber.i("uploadLetterAssessmentEvents")
9339

app/src/main/java/ai/elimu/analytics/util/VersionHelper.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -124,9 +124,10 @@ object VersionHelper {
124124
}
125125
}
126126

127-
// if (oldVersionCode < ???) {
127+
// if (oldVersionCode < ???) {
128128
// ...
129129
// }
130+
130131
SharedPreferencesHelper.storeAppVersionCode(context, newVersionCode)
131132
}
132133
}

utils/src/main/java/ai/elimu/analytics/utils/LearningEventUtil.java

-19
Original file line numberDiff line numberDiff line change
@@ -19,25 +19,6 @@
1919
*/
2020
public class LearningEventUtil {
2121

22-
/**
23-
* @param letterGson The letter that the student is learning.
24-
* @param learningEventType The type of learning (i.e. the learning format) that is presented to the student in the application ({@code packageName}).
25-
* @param context Needed to fetch the {@code packageName} of the application where the learning event occurred.
26-
* @param analyticsApplicationId The package name of the analytics application that will receive the Intent and store the event.
27-
*/
28-
public static void reportLetterLearningEvent(LetterGson letterGson, LearningEventType learningEventType, Context context, String analyticsApplicationId) {
29-
Log.i(LearningEventUtil.class.getName(),"reportLetterLearningEvent");
30-
31-
Intent broadcastIntent = new Intent();
32-
broadcastIntent.setAction("ai.elimu.intent.action.LETTER_LEARNING_EVENT");
33-
broadcastIntent.putExtra("packageName", context.getPackageName());
34-
broadcastIntent.putExtra("letterId", letterGson.getId());
35-
broadcastIntent.putExtra("letterText", letterGson.getText());
36-
broadcastIntent.putExtra("learningEventType", learningEventType.toString());
37-
broadcastIntent.setPackage(analyticsApplicationId);
38-
context.sendBroadcast(broadcastIntent);
39-
}
40-
4122
/**
4223
* @param letterSoundGson The letter-sound correspondence that the student is learning.
4324
* @param context Needed to fetch the {@code packageName} of the application where the learning event occurred.

0 commit comments

Comments
 (0)