Finish server integration for activity level blocking

This commit is contained in:
Jonas L 2019-04-15 00:00:00 +00:00
parent f4a21b600e
commit 36e684e253
5 changed files with 41 additions and 3 deletions

View file

@ -25,4 +25,7 @@ interface AppActivityDao {
@Query("DELETE FROM app_activity WHERE device_id = :deviceId AND app_package_name = :packageName AND activity_class_name IN (:activities)")
fun deleteAppActivitiesSync(deviceId: String, packageName: String, activities: List<String>)
@Query("DELETE FROM app_activity WHERE device_id = :deviceId")
fun deleteAppActivitiesByDeviceId(deviceId: String)
}

View file

@ -0,0 +1,15 @@
package io.timelimit.android.extensions
import android.util.JsonReader
fun <T> JsonReader.parseList(parseItem: (JsonReader) -> T): List<T> {
val result = mutableListOf<T>()
this.beginArray()
while (this.hasNext()) {
result.add(parseItem(this))
}
this.endArray()
return result
}

View file

@ -233,6 +233,19 @@ object ApplyServerDataStatus {
})
}
run {
// apply activities
database.appActivity().deleteAppActivitiesByDeviceId(item.deviceId)
database.appActivity().addAppActivitiesSync(item.activities.map {
AppActivity(
deviceId = item.deviceId,
appPackageName = it.packageName,
activityClassName = it.className,
title = it.title
)
})
}
run {
// apply changed version number
database.device().updateAppsVersion(

View file

@ -320,7 +320,7 @@ data class UpdateAppActivitiesAction(
companion object {
const val TYPE_VALUE = "UPDATE_APP_ACTIVITIES"
private const val REMOVED = "removed"
private const val UPDATED_OR_ADDED = "UPDATED_OR_ADDED"
private const val UPDATED_OR_ADDED = "updatedOrAdded"
fun parse(data: JSONObject) = UpdateAppActivitiesAction(
removedActivities = data.getJSONArray(REMOVED).toJsonArrayArray().map { item ->

View file

@ -19,7 +19,9 @@ import android.util.JsonReader
import io.timelimit.android.data.customtypes.ImmutableBitmask
import io.timelimit.android.data.customtypes.ImmutableBitmaskJson
import io.timelimit.android.data.model.*
import io.timelimit.android.extensions.parseList
import io.timelimit.android.integration.platform.*
import io.timelimit.android.sync.actions.AppActivityItem
import io.timelimit.android.sync.actions.InstalledApp
import io.timelimit.android.util.parseJsonArray
import io.timelimit.android.util.parseJsonStringArray
@ -610,17 +612,20 @@ data class ServerTimeLimitRule(
data class ServerInstalledAppsData(
val deviceId: String,
val version: String,
val apps: List<InstalledApp>
val apps: List<InstalledApp>,
val activities: List<AppActivityItem>
) {
companion object {
private const val DEVICE_ID = "deviceId"
private const val VERSION = "version"
private const val APPS = "apps"
private const val ACTIVITIES = "activities"
fun parse(reader: JsonReader): ServerInstalledAppsData {
var deviceId: String? = null
var version: String? = null
var apps: List<InstalledApp>? = null
var activities: List<AppActivityItem>? = null
reader.beginObject()
while (reader.hasNext()) {
@ -628,6 +633,7 @@ data class ServerInstalledAppsData(
DEVICE_ID -> deviceId = reader.nextString()
VERSION -> version = reader.nextString()
APPS -> apps = InstalledApp.parseList(reader)
ACTIVITIES -> activities = reader.parseList { AppActivityItem.parse(it) }
else -> reader.skipValue()
}
}
@ -636,7 +642,8 @@ data class ServerInstalledAppsData(
return ServerInstalledAppsData(
deviceId = deviceId!!,
version = version!!,
apps = apps!!
apps = apps!!,
activities = activities!!
)
}