Add reporting if running Android Q or later

This commit is contained in:
Jonas L 2019-06-03 00:00:00 +00:00
parent fe1e5962c5
commit f08dae25b6
4 changed files with 46 additions and 2 deletions

View file

@ -37,6 +37,7 @@ import io.timelimit.android.integration.platform.android.AndroidIntegrationApps
import io.timelimit.android.livedata.*
import io.timelimit.android.sync.actions.UpdateDeviceStatusAction
import io.timelimit.android.sync.actions.apply.ApplyActionUtil
import io.timelimit.android.util.AndroidVersion
import io.timelimit.android.util.TimeTextUtil
import io.timelimit.android.work.PeriodicSyncInBackgroundWorker
import kotlinx.coroutines.delay
@ -595,6 +596,7 @@ class BackgroundTaskLogic(val appLogic: AppLogic) {
val notificationAccess = appLogic.platformIntegration.getNotificationAccessPermissionStatus()
val overlayPermission = appLogic.platformIntegration.getOverlayPermissionStatus()
val accessibilityService = appLogic.platformIntegration.isAccessibilityServiceEnabled()
val qOrLater = AndroidVersion.qOrLater
var changes = UpdateDeviceStatusAction.empty
@ -632,6 +634,10 @@ class BackgroundTaskLogic(val appLogic: AppLogic) {
)
}
if (qOrLater && !deviceEntry.qOrLater) {
changes = changes.copy(isQOrLaterNow = true)
}
if (changes != UpdateDeviceStatusAction.empty) {
ApplyActionUtil.applyAppLogicAction(
action = changes,

View file

@ -658,7 +658,8 @@ data class UpdateDeviceStatusAction(
val newOverlayPermission: RuntimePermissionStatus?,
val newAccessibilityServiceEnabled: Boolean?,
val newAppVersion: Int?,
val didReboot: Boolean
val didReboot: Boolean,
val isQOrLaterNow: Boolean
): AppLogicAction() {
companion object {
const val TYPE_VALUE = "UPDATE_DEVICE_STATUS"
@ -669,6 +670,7 @@ data class UpdateDeviceStatusAction(
private const val NEW_ACCESSIBILITY_SERVICE_ENABLED = "accessibilityServiceEnabled"
private const val NEW_APP_VERSION = "appVersion"
private const val DID_REBOOT = "didReboot"
private const val IS_Q_OR_LATER_NOW = "isQOrLaterNow"
val empty = UpdateDeviceStatusAction(
newProtectionLevel = null,
@ -677,7 +679,34 @@ data class UpdateDeviceStatusAction(
newOverlayPermission = null,
newAccessibilityServiceEnabled = null,
newAppVersion = null,
didReboot = false
didReboot = false,
isQOrLaterNow = false
)
fun parse(value: JSONObject) = UpdateDeviceStatusAction(
newProtectionLevel = if (value.has(NEW_PROTECTION_LEVEL))
ProtectionLevelUtil.parse(value.getString(NEW_PROTECTION_LEVEL))
else
null,
newUsageStatsPermissionStatus = if (value.has(NEW_USAGE_STATS_PERMISSION_STATUS))
RuntimePermissionStatusUtil.parse(value.getString(NEW_USAGE_STATS_PERMISSION_STATUS))
else
null,
newNotificationAccessPermission = if (value.has(NEW_NOTIFICATION_ACCESS_PERMISSION))
NewPermissionStatusUtil.parse(value.getString(NEW_NOTIFICATION_ACCESS_PERMISSION))
else
null,
newOverlayPermission = if (value.has(NEW_OVERLAY_PERMISSION))
RuntimePermissionStatusUtil.parse(value.getString(NEW_OVERLAY_PERMISSION))
else
null,
newAccessibilityServiceEnabled = if (value.has(NEW_ACCESSIBILITY_SERVICE_ENABLED))
value.getBoolean(NEW_ACCESSIBILITY_SERVICE_ENABLED)
else
null,
newAppVersion = if (value.has(NEW_APP_VERSION)) value.getInt(NEW_APP_VERSION) else null,
didReboot = if (value.has(DID_REBOOT)) value.getBoolean(DID_REBOOT) else false,
isQOrLaterNow = if (value.has(IS_Q_OR_LATER_NOW)) value.getBoolean(IS_Q_OR_LATER_NOW) else false
)
}
@ -730,6 +759,10 @@ data class UpdateDeviceStatusAction(
writer.name(DID_REBOOT).value(true)
}
if (isQOrLaterNow) {
writer.name(IS_Q_OR_LATER_NOW).value(true)
}
writer.endObject()
}
}

View file

@ -25,6 +25,7 @@ object ActionParser {
TriedDisablingDeviceAdminAction.TYPE_VALUE -> TriedDisablingDeviceAdminAction
SignOutAtDeviceAction.TYPE_VALUE -> SignOutAtDeviceAction
UpdateAppActivitiesAction.TYPE_VALUE -> UpdateAppActivitiesAction.parse(action)
UpdateDeviceStatusAction.TYPE_VALUE -> UpdateDeviceStatusAction.parse(action)
else -> throw IllegalStateException()
}

View file

@ -206,6 +206,10 @@ object LocalDatabaseAppLogicActionDispatcher {
)
}
if (action.isQOrLaterNow && !device.qOrLater) {
device = device.copy(qOrLater = true)
}
database.device().updateDeviceEntry(device)
if (device.hasActiveManipulationWarning) {