Merge branch 'dev' into pumpsync
This commit is contained in:
commit
175926527c
|
@ -3,7 +3,6 @@ package info.nightscout.androidaps.plugins.general.nsclient.services
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.pm.ResolveInfo
|
|
||||||
import android.os.*
|
import android.os.*
|
||||||
import androidx.work.OneTimeWorkRequest
|
import androidx.work.OneTimeWorkRequest
|
||||||
import com.google.common.base.Charsets
|
import com.google.common.base.Charsets
|
||||||
|
@ -17,7 +16,6 @@ import info.nightscout.androidaps.events.EventConfigBuilderChange
|
||||||
import info.nightscout.androidaps.events.EventPreferenceChange
|
import info.nightscout.androidaps.events.EventPreferenceChange
|
||||||
import info.nightscout.androidaps.interfaces.Config
|
import info.nightscout.androidaps.interfaces.Config
|
||||||
import info.nightscout.androidaps.interfaces.DataSyncSelector
|
import info.nightscout.androidaps.interfaces.DataSyncSelector
|
||||||
import info.nightscout.androidaps.interfaces.PluginType
|
|
||||||
import info.nightscout.androidaps.logging.AAPSLogger
|
import info.nightscout.androidaps.logging.AAPSLogger
|
||||||
import info.nightscout.androidaps.logging.LTag
|
import info.nightscout.androidaps.logging.LTag
|
||||||
import info.nightscout.androidaps.plugins.bus.RxBus
|
import info.nightscout.androidaps.plugins.bus.RxBus
|
||||||
|
@ -41,12 +39,12 @@ import info.nightscout.androidaps.plugins.general.overview.notifications.Notific
|
||||||
import info.nightscout.androidaps.plugins.profile.local.LocalProfilePlugin
|
import info.nightscout.androidaps.plugins.profile.local.LocalProfilePlugin
|
||||||
import info.nightscout.androidaps.plugins.source.NSClientSourcePlugin.NSClientSourceWorker
|
import info.nightscout.androidaps.plugins.source.NSClientSourcePlugin.NSClientSourceWorker
|
||||||
import info.nightscout.androidaps.receivers.DataWorker
|
import info.nightscout.androidaps.receivers.DataWorker
|
||||||
import info.nightscout.androidaps.services.Intents
|
|
||||||
import info.nightscout.androidaps.utils.DateUtil
|
import info.nightscout.androidaps.utils.DateUtil
|
||||||
import info.nightscout.androidaps.utils.FabricPrivacy
|
import info.nightscout.androidaps.utils.FabricPrivacy
|
||||||
import info.nightscout.androidaps.utils.JsonHelper.safeGetString
|
import info.nightscout.androidaps.utils.JsonHelper.safeGetString
|
||||||
import info.nightscout.androidaps.utils.JsonHelper.safeGetStringAllowNull
|
import info.nightscout.androidaps.utils.JsonHelper.safeGetStringAllowNull
|
||||||
import info.nightscout.androidaps.utils.T.Companion.mins
|
import info.nightscout.androidaps.utils.T.Companion.mins
|
||||||
|
import info.nightscout.androidaps.utils.XDripBroadcast
|
||||||
import info.nightscout.androidaps.utils.buildHelper.BuildHelper
|
import info.nightscout.androidaps.utils.buildHelper.BuildHelper
|
||||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||||
import info.nightscout.androidaps.utils.rx.AapsSchedulers
|
import info.nightscout.androidaps.utils.rx.AapsSchedulers
|
||||||
|
@ -80,6 +78,7 @@ class NSClientService : DaggerService() {
|
||||||
@Inject lateinit var dataWorker: DataWorker
|
@Inject lateinit var dataWorker: DataWorker
|
||||||
@Inject lateinit var dataSyncSelector: DataSyncSelector
|
@Inject lateinit var dataSyncSelector: DataSyncSelector
|
||||||
@Inject lateinit var repository: AppRepository
|
@Inject lateinit var repository: AppRepository
|
||||||
|
@Inject lateinit var xDripBroadcast: XDripBroadcast
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
||||||
|
@ -476,15 +475,7 @@ class NSClientService : DaggerService() {
|
||||||
OneTimeWorkRequest.Builder(LocalProfilePlugin.NSProfileWorker::class.java)
|
OneTimeWorkRequest.Builder(LocalProfilePlugin.NSProfileWorker::class.java)
|
||||||
.setInputData(dataWorker.storeInputData(profileStoreJson, null))
|
.setInputData(dataWorker.storeInputData(profileStoreJson, null))
|
||||||
.build())
|
.build())
|
||||||
if (sp.getBoolean(R.string.key_nsclient_localbroadcasts, false)) {
|
xDripBroadcast.sendProfile(profileStoreJson)
|
||||||
val bundle = Bundle()
|
|
||||||
bundle.putString("profile", profileStoreJson.toString())
|
|
||||||
bundle.putBoolean("delta", isDelta)
|
|
||||||
val intent = Intent(Intents.ACTION_NEW_PROFILE)
|
|
||||||
intent.putExtras(bundle)
|
|
||||||
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES)
|
|
||||||
broadcast(intent)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (data.has("treatments")) {
|
if (data.has("treatments")) {
|
||||||
|
@ -502,18 +493,7 @@ class NSClientService : DaggerService() {
|
||||||
OneTimeWorkRequest.Builder(NSClientAddUpdateWorker::class.java)
|
OneTimeWorkRequest.Builder(NSClientAddUpdateWorker::class.java)
|
||||||
.setInputData(dataWorker.storeInputData(addedOrUpdatedTreatments, null))
|
.setInputData(dataWorker.storeInputData(addedOrUpdatedTreatments, null))
|
||||||
.build())
|
.build())
|
||||||
if (sp.getBoolean(R.string.key_nsclient_localbroadcasts, false)) {
|
xDripBroadcast.sendTreatments(addedOrUpdatedTreatments)
|
||||||
val splitted = splitArray(addedOrUpdatedTreatments)
|
|
||||||
for (part in splitted) {
|
|
||||||
val bundle = Bundle()
|
|
||||||
bundle.putString("treatments", part.toString())
|
|
||||||
bundle.putBoolean("delta", isDelta)
|
|
||||||
val intent = Intent(Intents.ACTION_CHANGED_TREATMENT)
|
|
||||||
intent.putExtras(bundle)
|
|
||||||
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES)
|
|
||||||
broadcast(intent)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (data.has("devicestatus")) {
|
if (data.has("devicestatus")) {
|
||||||
|
@ -550,18 +530,7 @@ class NSClientService : DaggerService() {
|
||||||
dataWorker.enqueue(OneTimeWorkRequest.Builder(NSClientSourceWorker::class.java)
|
dataWorker.enqueue(OneTimeWorkRequest.Builder(NSClientSourceWorker::class.java)
|
||||||
.setInputData(dataWorker.storeInputData(sgvs, null))
|
.setInputData(dataWorker.storeInputData(sgvs, null))
|
||||||
.build())
|
.build())
|
||||||
val splitted = splitArray(sgvs)
|
xDripBroadcast.sendSgvs(sgvs)
|
||||||
if (sp.getBoolean(R.string.key_nsclient_localbroadcasts, false)) {
|
|
||||||
for (part in splitted) {
|
|
||||||
val bundle = Bundle()
|
|
||||||
bundle.putString("sgvs", part.toString())
|
|
||||||
bundle.putBoolean("delta", isDelta)
|
|
||||||
val intent = Intent(Intents.ACTION_NEW_SGV)
|
|
||||||
intent.putExtras(bundle)
|
|
||||||
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES)
|
|
||||||
broadcast(intent)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
rxBus.send(EventNSClientNewLog("LAST", dateUtil.dateAndTimeString(latestDateInReceivedData)))
|
rxBus.send(EventNSClientNewLog("LAST", dateUtil.dateAndTimeString(latestDateInReceivedData)))
|
||||||
} catch (e: JSONException) {
|
} catch (e: JSONException) {
|
||||||
|
@ -675,40 +644,6 @@ class NSClientService : DaggerService() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun splitArray(array: JSONArray): List<JSONArray> {
|
|
||||||
var ret: MutableList<JSONArray> = ArrayList()
|
|
||||||
try {
|
|
||||||
val size = array.length()
|
|
||||||
var count = 0
|
|
||||||
var newarr: JSONArray? = null
|
|
||||||
for (i in 0 until size) {
|
|
||||||
if (count == 0) {
|
|
||||||
if (newarr != null) ret.add(newarr)
|
|
||||||
newarr = JSONArray()
|
|
||||||
count = 20
|
|
||||||
}
|
|
||||||
newarr?.put(array[i])
|
|
||||||
--count
|
|
||||||
}
|
|
||||||
if (newarr != null && newarr.length() > 0) ret.add(newarr)
|
|
||||||
} catch (e: JSONException) {
|
|
||||||
aapsLogger.error("Unhandled exception", e)
|
|
||||||
ret = ArrayList()
|
|
||||||
ret.add(array)
|
|
||||||
}
|
|
||||||
return ret
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun broadcast(intent: Intent) {
|
|
||||||
val receivers: List<ResolveInfo> = packageManager.queryBroadcastReceivers(intent, 0)
|
|
||||||
for (resolveInfo in receivers)
|
|
||||||
resolveInfo.activityInfo.packageName?.let {
|
|
||||||
intent.setPackage(it)
|
|
||||||
sendBroadcast(intent)
|
|
||||||
aapsLogger.debug(LTag.CORE, "Sending broadcast " + intent.action + " to: " + it)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
init {
|
init {
|
||||||
if (handler == null) {
|
if (handler == null) {
|
||||||
val handlerThread = HandlerThread(NSClientService::class.java.simpleName + "Handler")
|
val handlerThread = HandlerThread(NSClientService::class.java.simpleName + "Handler")
|
||||||
|
|
|
@ -7,12 +7,11 @@ interface Intents {
|
||||||
|
|
||||||
// AAPS -> Xdrip
|
// AAPS -> Xdrip
|
||||||
const val ACTION_NEW_TREATMENT = "info.nightscout.client.NEW_TREATMENT"
|
const val ACTION_NEW_TREATMENT = "info.nightscout.client.NEW_TREATMENT"
|
||||||
const val ACTION_CHANGED_TREATMENT = "info.nightscout.client.CHANGED_TREATMENT"
|
|
||||||
const val ACTION_REMOVED_TREATMENT = "info.nightscout.client.REMOVED_TREATMENT"
|
|
||||||
const val ACTION_NEW_PROFILE = "info.nightscout.client.NEW_PROFILE"
|
const val ACTION_NEW_PROFILE = "info.nightscout.client.NEW_PROFILE"
|
||||||
const val ACTION_NEW_SGV = "info.nightscout.client.NEW_SGV"
|
const val ACTION_NEW_SGV = "info.nightscout.client.NEW_SGV"
|
||||||
const val ACTION_NEW_MBG = "info.nightscout.client.NEW_MBG"
|
|
||||||
const val ACTION_NEW_CAL = "info.nightscout.client.NEW_CAL"
|
// AAPS -> xDrip 640G mode
|
||||||
|
const val XDRIP_PLUS_NS_EMULATOR = "com.eveningoutpost.dexdrip.NS_EMULATOR"
|
||||||
|
|
||||||
// xDrip -> AAPS
|
// xDrip -> AAPS
|
||||||
const val ACTION_NEW_BG_ESTIMATE = "com.eveningoutpost.dexdrip.BgEstimate"
|
const val ACTION_NEW_BG_ESTIMATE = "com.eveningoutpost.dexdrip.BgEstimate"
|
||||||
|
|
|
@ -7,6 +7,7 @@ import info.nightscout.androidaps.R
|
||||||
import info.nightscout.androidaps.database.entities.GlucoseValue
|
import info.nightscout.androidaps.database.entities.GlucoseValue
|
||||||
import info.nightscout.androidaps.logging.AAPSLogger
|
import info.nightscout.androidaps.logging.AAPSLogger
|
||||||
import info.nightscout.androidaps.logging.LTag
|
import info.nightscout.androidaps.logging.LTag
|
||||||
|
import info.nightscout.androidaps.services.Intents
|
||||||
import info.nightscout.androidaps.utils.sharedPreferences.SP
|
import info.nightscout.androidaps.utils.sharedPreferences.SP
|
||||||
import org.json.JSONArray
|
import org.json.JSONArray
|
||||||
import org.json.JSONException
|
import org.json.JSONException
|
||||||
|
@ -24,6 +25,7 @@ class XDripBroadcast @Inject constructor(
|
||||||
private val sp: SP
|
private val sp: SP
|
||||||
) {
|
) {
|
||||||
|
|
||||||
|
// sent in 640G mode
|
||||||
fun send(glucoseValue: GlucoseValue) {
|
fun send(glucoseValue: GlucoseValue) {
|
||||||
if (sp.getBoolean(R.string.key_dexcomg5_xdripupload, false)) {
|
if (sp.getBoolean(R.string.key_dexcomg5_xdripupload, false)) {
|
||||||
val format = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ", Locale.US)
|
val format = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ", Locale.US)
|
||||||
|
@ -41,7 +43,7 @@ class XDripBroadcast @Inject constructor(
|
||||||
bundle.putString("action", "add")
|
bundle.putString("action", "add")
|
||||||
bundle.putString("collection", "entries")
|
bundle.putString("collection", "entries")
|
||||||
bundle.putString("data", entriesBody.toString())
|
bundle.putString("data", entriesBody.toString())
|
||||||
val intent = Intent(XDRIP_PLUS_NS_EMULATOR)
|
val intent = Intent(Intents.XDRIP_PLUS_NS_EMULATOR)
|
||||||
intent.putExtras(bundle).addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES)
|
intent.putExtras(bundle).addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES)
|
||||||
context.sendBroadcast(intent)
|
context.sendBroadcast(intent)
|
||||||
val receivers = context.packageManager.queryBroadcastReceivers(intent, 0)
|
val receivers = context.packageManager.queryBroadcastReceivers(intent, 0)
|
||||||
|
@ -57,7 +59,75 @@ class XDripBroadcast @Inject constructor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
// sent in NSClient dbaccess mode
|
||||||
const val XDRIP_PLUS_NS_EMULATOR = "com.eveningoutpost.dexdrip.NS_EMULATOR"
|
fun sendProfile(profileStoreJson: JSONObject) {
|
||||||
|
if (sp.getBoolean(R.string.key_nsclient_localbroadcasts, false))
|
||||||
|
broadcast(
|
||||||
|
Intent(Intents.ACTION_NEW_PROFILE).apply {
|
||||||
|
addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES)
|
||||||
|
putExtras(Bundle().apply { putString("profile", profileStoreJson.toString()) })
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// sent in NSClient dbaccess mode
|
||||||
|
fun sendTreatments(addedOrUpdatedTreatments: JSONArray) {
|
||||||
|
if (sp.getBoolean(R.string.key_nsclient_localbroadcasts, false))
|
||||||
|
splitArray(addedOrUpdatedTreatments).forEach { part ->
|
||||||
|
broadcast(
|
||||||
|
Intent(Intents.ACTION_NEW_TREATMENT).apply {
|
||||||
|
addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES)
|
||||||
|
putExtras(Bundle().apply { putString("treatments", part.toString()) })
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// sent in NSClient dbaccess mode
|
||||||
|
fun sendSgvs(sgvs: JSONArray) {
|
||||||
|
if (sp.getBoolean(R.string.key_nsclient_localbroadcasts, false))
|
||||||
|
splitArray(sgvs).forEach { part ->
|
||||||
|
broadcast(
|
||||||
|
Intent(Intents.ACTION_NEW_SGV).apply {
|
||||||
|
addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES)
|
||||||
|
putExtras(Bundle().apply { putString("sgvs", part.toString()) })
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun splitArray(array: JSONArray): List<JSONArray> {
|
||||||
|
var ret: MutableList<JSONArray> = ArrayList()
|
||||||
|
try {
|
||||||
|
val size = array.length()
|
||||||
|
var count = 0
|
||||||
|
var newarr: JSONArray? = null
|
||||||
|
for (i in 0 until size) {
|
||||||
|
if (count == 0) {
|
||||||
|
if (newarr != null) ret.add(newarr)
|
||||||
|
newarr = JSONArray()
|
||||||
|
count = 20
|
||||||
|
}
|
||||||
|
newarr?.put(array[i])
|
||||||
|
--count
|
||||||
|
}
|
||||||
|
if (newarr != null && newarr.length() > 0) ret.add(newarr)
|
||||||
|
} catch (e: JSONException) {
|
||||||
|
aapsLogger.error("Unhandled exception", e)
|
||||||
|
ret = ArrayList()
|
||||||
|
ret.add(array)
|
||||||
|
}
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun broadcast(intent: Intent) {
|
||||||
|
context.packageManager.queryBroadcastReceivers(intent, 0).forEach { resolveInfo ->
|
||||||
|
resolveInfo.activityInfo.packageName?.let {
|
||||||
|
intent.setPackage(it)
|
||||||
|
context.sendBroadcast(intent)
|
||||||
|
aapsLogger.debug(LTag.CORE, "Sending broadcast " + intent.action + " to: " + it)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in a new issue