正在查看: xDrip+ v04633772025.07.16 应用的 WatchUpdaterService.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
正在查看: xDrip+ v04633772025.07.16 应用的 WatchUpdaterService.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
package com.eveningoutpost.dexdrip.wearintegration;
import android.annotation.SuppressLint;
import android.app.ActivityManager;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.PowerManager;
import android.preference.PreferenceManager;
import android.util.Log;
import androidx.appcompat.R$styleable;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import com.eveningoutpost.dexdrip.BestGlucose;
import com.eveningoutpost.dexdrip.Home;
import com.eveningoutpost.dexdrip.cgm.carelinkfollow.message.Marker;
import com.eveningoutpost.dexdrip.g5model.CalibrationState;
import com.eveningoutpost.dexdrip.g5model.Ob1G5StateMachine;
import com.eveningoutpost.dexdrip.importedlibraries.usbserial.driver.UsbId;
import com.eveningoutpost.dexdrip.models.ActiveBluetoothDevice;
import com.eveningoutpost.dexdrip.models.AlertType;
import com.eveningoutpost.dexdrip.models.BgReading;
import com.eveningoutpost.dexdrip.models.BloodTest;
import com.eveningoutpost.dexdrip.models.Calibration;
import com.eveningoutpost.dexdrip.models.HeartRate;
import com.eveningoutpost.dexdrip.models.JoH;
import com.eveningoutpost.dexdrip.models.Sensor;
import com.eveningoutpost.dexdrip.models.StepCounter;
import com.eveningoutpost.dexdrip.models.TransmitterData;
import com.eveningoutpost.dexdrip.models.Treatments;
import com.eveningoutpost.dexdrip.models.UserError;
import com.eveningoutpost.dexdrip.services.G5BaseService;
import com.eveningoutpost.dexdrip.services.G5CollectionService;
import com.eveningoutpost.dexdrip.services.Ob1G5CollectionService;
import com.eveningoutpost.dexdrip.utilitymodels.AlertPlayer;
import com.eveningoutpost.dexdrip.utilitymodels.BgGraphBuilder;
import com.eveningoutpost.dexdrip.utilitymodels.BgSendQueue;
import com.eveningoutpost.dexdrip.utilitymodels.CollectionServiceStarter;
import com.eveningoutpost.dexdrip.utilitymodels.Inevitable;
import com.eveningoutpost.dexdrip.utilitymodels.LowPriorityThread;
import com.eveningoutpost.dexdrip.utilitymodels.PersistentStore;
import com.eveningoutpost.dexdrip.utilitymodels.Pref;
import com.eveningoutpost.dexdrip.utilitymodels.StatusLine;
import com.eveningoutpost.dexdrip.utilitymodels.WearSyncBooleans;
import com.eveningoutpost.dexdrip.utilitymodels.WearSyncPersistentStrings;
import com.eveningoutpost.dexdrip.utils.DexCollectionType;
import com.eveningoutpost.dexdrip.utils.GetWearApk;
import com.eveningoutpost.dexdrip.utils.PowerStateReceiver;
import com.eveningoutpost.dexdrip.wearintegration.WatchUpdaterService;
import com.eveningoutpost.dexdrip.xdrip;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.ResultCallback;
import com.google.android.gms.wearable.CapabilityApi;
import com.google.android.gms.wearable.CapabilityInfo;
import com.google.android.gms.wearable.Channel;
import com.google.android.gms.wearable.DataEvent;
import com.google.android.gms.wearable.DataEventBuffer;
import com.google.android.gms.wearable.DataMap;
import com.google.android.gms.wearable.DataMapItem;
import com.google.android.gms.wearable.MessageEvent;
import com.google.android.gms.wearable.Node;
import com.google.android.gms.wearable.PutDataMapRequest;
import com.google.android.gms.wearable.Wearable;
import com.google.android.gms.wearable.WearableListenerService;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.internal.bind.DateTypeAdapter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Set;
import java.util.concurrent.TimeUnit;
@SuppressLint({"LogNotTimber"})
public class WatchUpdaterService extends WearableListenerService implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {
private static byte[] apkBytes;
private static GoogleApiClient googleApiClient;
private SharedPreferences.OnSharedPreferenceChangeListener mPreferencesListener;
private SharedPreferences mPrefs;
public static final String ACTION_RESEND = WatchUpdaterService.class.getName().concat(".Resend");
public static final String ACTION_OPEN_SETTINGS = WatchUpdaterService.class.getName().concat(".OpenSettings");
public static final String ACTION_SYNC_DB = WatchUpdaterService.class.getName().concat(".SyncDB");
public static final String ACTION_RESET_DB = WatchUpdaterService.class.getName().concat(".ResetDB");
public static final String ACTION_SYNC_LOGS = WatchUpdaterService.class.getName().concat(".SyncLogs");
public static final String ACTION_CLEAR_LOGS = WatchUpdaterService.class.getName().concat(".ClearLogs");
public static final String ACTION_STATUS_COLLECTOR = WatchUpdaterService.class.getName().concat(".StatusCollector");
public static final String ACTION_START_COLLECTOR = WatchUpdaterService.class.getName().concat(".StartCollector");
public static final String ACTION_SYNC_SENSOR = WatchUpdaterService.class.getName().concat(".SyncSensor");
public static final String ACTION_SYNC_CALIBRATION = WatchUpdaterService.class.getName().concat(".SyncCalibration");
public static final String ACTION_SEND_TOAST = WatchUpdaterService.class.getName().concat(".SendWearLocalToast");
public static final String ACTION_SEND_STATUS = WatchUpdaterService.class.getName().concat(".SendStatus");
public static final String ACTION_SYNC_ACTIVEBTDEVICE = WatchUpdaterService.class.getName().concat(".SyncActiveBtDevice");
public static final String ACTION_SYNC_ALERTTYPE = WatchUpdaterService.class.getName().concat(".SyncAlertType");
private static final String ACTION_SEND_G5_QUEUE = WatchUpdaterService.class.getName().concat(".SendG5Queue");
public static final String ACTION_DISABLE_FORCE_WEAR = WatchUpdaterService.class.getName().concat(".DisableForceWear");
public static final String ACTION_SNOOZE_ALERT = WatchUpdaterService.class.getName().concat(".SnoozeAlert");
private static String localnode = "";
private static long lastRequest = 0;
private static final Integer sendTreatmentsCount = 60;
private static final Integer sendCalibrationCount = 3;
private static final Integer sendBgCount = 4;
private static long syncLogsRequested = 0;
private volatile String mWearNodeId = null;
private boolean wear_integration = false;
private boolean pebble_integration = false;
private boolean is_using_bt = false;
private static String getVersionID() {
return "0463377-2025.07.16";
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
}
@Override
public void onConnectionSuspended(int i) {
}
public static synchronized void receivedText(Context context, String str) {
synchronized (WatchUpdaterService.class) {
if (str.equals(PersistentStore.getString("watch-last-received-text"))) {
Log.e("jamorham watchupdater", "Received text is same as previous, ignoring: " + str);
return;
}
PersistentStore.setString("watch-last-received-text", str);
startHomeWithExtra(context, "/xdrip_plus_voice_payload", str);
}
}
private static void approveTreatment(Context context, String str) {
startHomeWithExtra(context, "/xdrip_plus_approve_treatment", str);
}
private static void cancelTreatment(Context context, String str) {
startHomeWithExtra(context, "/xdrip_plus_cancel_treatment", str);
}
private static void startHomeWithExtra(Context context, String str, String str2) {
Intent intent = new Intent(context, (Class<?>) Home.class);
intent.setFlags(268435456);
intent.putExtra(str, str2);
context.startActivity(intent);
}
private void sendDataReceived(String str, String str2, long j, String str3, long j2) {
Log.d("jamorham watchupdater", "sendDataReceived timeOfLastEntry=" + JoH.dateTimeText(j) + " Path=" + str);
forceGoogleApiConnect();
if (googleApiClient.isConnected()) {
PutDataMapRequest create = PutDataMapRequest.create(str);
create.setUrgent();
create.getDataMap().putDouble("timestamp", System.currentTimeMillis());
create.getDataMap().putLong("timeOfLastEntry", j);
create.getDataMap().putLong("syncLogsRequested", j2);
create.getDataMap().putString("type", str3);
create.getDataMap().putString("msg", str2);
Wearable.DataApi.putDataItem(googleApiClient, create.asPutDataRequest());
return;
}
Log.e("jamorham watchupdater", "sendDataReceived No connection to wearable available!");
}
private void syncFieldData(DataMap dataMap) {
String string = dataMap.getString("dex_txid", "");
byte[] byteArray = dataMap.getByteArray("g5-battery-");
byte[] byteArray2 = dataMap.getByteArray("g5-firmware-");
if (string == null || !string.equals(this.mPrefs.getString("dex_txid", "default"))) {
return;
}
if (byteArray != null) {
long j = dataMap.getLong("g5-battery-from");
if (j > PersistentStore.getLong("g5-battery-from" + string)) {
G5CollectionService.setStoredBatteryBytes(string, byteArray);
PersistentStore.setLong("g5-battery-from" + string, j);
G5BaseService.getBatteryStatusNow = false;
G5BaseService.getBatteryStatusNow = false;
}
}
if (byteArray2 != null) {
G5CollectionService.setStoredFirmwareBytes(string, byteArray2);
}
}
public static void checkOb1Queue() {
String extractQueueJson;
if (Pref.getBoolean("enable_wearG5", false) && Ob1G5CollectionService.usingNativeMode() && (extractQueueJson = Ob1G5StateMachine.extractQueueJson()) != null) {
xdrip.getAppContext().startService(new Intent(xdrip.getAppContext(), (Class<?>) WatchUpdaterService.class).setAction(ACTION_SEND_G5_QUEUE).putExtra("queueData", extractQueueJson));
}
}
private void syncPrefData(com.google.android.gms.wearable.DataMap r31) {
throw new UnsupportedOperationException("Method not decompiled: com.eveningoutpost.dexdrip.wearintegration.WatchUpdaterService.syncPrefData(com.google.android.gms.wearable.DataMap):void");
}
public void processConnect() {
Log.d("jamorham watchupdater", "processConnect enter");
this.wear_integration = this.mPrefs.getBoolean("wear_sync", false);
boolean z = this.mPrefs.getBoolean("enable_wearG5", false);
boolean z2 = this.mPrefs.getBoolean("force_wearG5", false);
if (this.wear_integration) {
initWearData();
if (!z) {
Log.d("jamorham watchupdater", "processConnect enable_wearG5=false - startBtService");
startBtService();
if (this.mPrefs.getBoolean("show_wear_treatments", false)) {
initWearTreatments();
return;
}
return;
}
if (z2) {
Log.d("jamorham watchupdater", "processConnect force_wearG5=true - stopBtService");
stopBtService();
return;
} else {
Log.d("jamorham watchupdater", "processConnect force_wearG5=false - startBtService");
startBtService();
return;
}
}
Log.d("jamorham watchupdater", "processConnect wear_integration=false - startBtService");
startBtService();
}
private synchronized void syncBgReadingsData(DataMap dataMap) {
Log.d("jamorham watchupdater", "sync-precalculated-bg-readings-Data");
Ob1G5CollectionService.processCalibrationState(CalibrationState.parse(dataMap.getInt("native_calibration_state", 0)));
Ob1G5StateMachine.injectDexTime(dataMap.getString("dextime", null));
if (dataMap.getBoolean("OB1-QUEUE-DRAINED")) {
Ob1G5StateMachine.emptyQueue();
}
ArrayList<DataMap> dataMapArrayList = dataMap.getDataMapArrayList("entries");
if (dataMapArrayList != null) {
Gson create = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().registerTypeAdapter(Date.class, new DateTypeAdapter()).serializeSpecialFloatingPointValues().create();
int size = dataMapArrayList.size();
if (size > 0) {
Sensor currentSensor = Sensor.currentSensor();
if (currentSensor == null) {
UserError.Log.e("jamorham watchupdater", "Cannot sync wear BG readings because sensor is marked stopped on phone");
return;
}
Log.d("jamorham watchupdater", "syncTransmitterData add BgReading Table entries count=" + size);
Iterator<DataMap> it = dataMapArrayList.iterator();
long j = 0;
int i = 0;
while (it.hasNext()) {
DataMap next = it.next();
if (next != null) {
i++;
String string = next.getString("bgs");
if (string != null) {
BgReading bgReading = (BgReading) create.fromJson(string, BgReading.class);
if (BgReading.findByUuid(bgReading.uuid) == null) {
if (BgReading.getForTimestamp(bgReading.timestamp) == null) {
StringBuilder sb = new StringBuilder();
sb.append("Saving new synced pre-calculated bg-reading: ");
sb.append(JoH.dateTimeText(bgReading.timestamp));
sb.append(" last entry: ");
boolean z = true;
sb.append(i == size);
sb.append(" ");
sb.append(BgGraphBuilder.unitized_string_static(bgReading.calculated_value));
Log.d("jamorham watchupdater", sb.toString());
bgReading.sensor = currentSensor;
bgReading.save();
Context appContext = xdrip.getAppContext();
boolean z2 = Home.get_follower();
if (i == size) {
z = false;
}
BgSendQueue.handleNewBgReading(bgReading, "create", appContext, z2, z);
} else {
Log.d("jamorham watchupdater", "BgReading for timestamp already exists: " + JoH.dateTimeText(bgReading.timestamp));
}
} else {
Log.d("jamorham watchupdater", "BgReading with uuid: " + bgReading.uuid + " already exists: " + JoH.dateTimeText(bgReading.timestamp));
}
j = Math.max(bgReading.timestamp + 1, j);
}
}
}
sendDataReceived("/xdrip_plus_data-item-received", "DATA_RECEIVED_BGS count=" + dataMapArrayList.size(), j, Marker.MARKER_TYPE_BG, -1L);
} else {
UserError.Log.e("jamorham watchupdater", "Not acknowledging wear BG readings as count was 0");
}
} else {
UserError.Log.d("jamorham watchupdater", "Null entries list - should only happen with native status update only");
}
}
private synchronized void syncTransmitterData(DataMap dataMap, boolean z) {
BgReading create;
Log.d("jamorham watchupdater", "syncTransmitterData");
ArrayList<DataMap> dataMapArrayList = dataMap.getDataMapArrayList("entries");
Log.d("jamorham watchupdater", "syncTransmitterData add BgReading Table");
if (dataMapArrayList != null) {
Gson create2 = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().registerTypeAdapter(Date.class, new DateTypeAdapter()).serializeSpecialFloatingPointValues().create();
int size = dataMapArrayList.size();
Log.d("jamorham watchupdater", "syncTransmitterData add BgReading Table entries count=" + size);
Iterator<DataMap> it = dataMapArrayList.iterator();
int i = 0;
long j = 0L;
while (it.hasNext()) {
DataMap next = it.next();
if (next != null) {
int i2 = i + 1;
String string = next.getString("bgs");
if (string != null) {
TransmitterData transmitterData = (TransmitterData) create2.fromJson(string, TransmitterData.class);
TransmitterData forTimestamp = TransmitterData.getForTimestamp(transmitterData.timestamp);
TransmitterData findByUuid = TransmitterData.findByUuid(transmitterData.uuid);
long j2 = transmitterData.timestamp + 1;
if (forTimestamp == null && findByUuid == null) {
Log.d("jamorham watchupdater", "syncTransmitterData add BG; does NOT exist for uuid=" + transmitterData.uuid + " timestamp=" + transmitterData.timestamp + " timeString=" + JoH.dateTimeText(transmitterData.timestamp) + " raw_data=" + transmitterData.raw_data);
if (!z) {
transmitterData.save();
if (TransmitterData.findByUuid(transmitterData.uuid) != null) {
Log.d("jamorham watchupdater", "syncTransmitterData: TransmitterData was saved for uuid:" + transmitterData.uuid);
Sensor currentSensor = Sensor.currentSensor();
if (currentSensor == null) {
Log.e("jamorham watchupdater", "syncTransmitterData: No Active Sensor, Data only stored in Transmitter Data");
return;
}
Sensor.updateBatteryLevel(currentSensor, transmitterData.sensor_battery_level);
Log.i("jamorham watchupdater", "syncTransmitterData: BG timestamp create " + Long.toString(transmitterData.timestamp));
if (size > 1 && i2 < size) {
create = BgReading.create(transmitterData.raw_data, transmitterData.filtered_data, this, Long.valueOf(transmitterData.timestamp), true);
} else {
create = BgReading.create(transmitterData.raw_data, transmitterData.filtered_data, this, Long.valueOf(transmitterData.timestamp));
}
if (create != null) {
Log.d("jamorham watchupdater", "syncTransmitterData BG GSON saved BG: " + create.toS());
} else {
Log.e("jamorham watchupdater", "syncTransmitterData BG GSON NOT saved");
}
} else {
Log.e("jamorham watchupdater", "syncTransmitterData: TransmitterData was NOT saved for uuid:" + transmitterData.uuid);
return;
}
}
i = i2;
j = j2;
}
Log.d("jamorham watchupdater", "syncTransmitterData BG already exists for uuid=" + transmitterData.uuid + " timestamp=" + transmitterData.timestamp + " timeString=" + JoH.dateTimeText(transmitterData.timestamp) + " raw_data=" + transmitterData.raw_data);
i = i2;
j = j2;
} else {
i = i2;
}
}
}
sendDataReceived("/xdrip_plus_data-item-received", "DATA_RECEIVED_BGS count=" + dataMapArrayList.size(), j, z ? "BM" : Marker.MARKER_TYPE_BG, -1L);
}
}
private synchronized void syncLogData(DataMap dataMap, boolean z) {
String string;
UserError userError;
Log.d("jamorham watchupdater", "syncLogData");
long j = dataMap.getLong("syncLogsRequested", -1L);
ArrayList<DataMap> dataMapArrayList = dataMap.getDataMapArrayList("entries");
if (dataMapArrayList != null) {
Gson create = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().registerTypeAdapter(Date.class, new DateTypeAdapter()).serializeSpecialFloatingPointValues().create();
Log.d("jamorham watchupdater", "syncLogData add Table entries count=" + dataMapArrayList.size() + " watch_syncLogsRequested=" + j);
Iterator<DataMap> it = dataMapArrayList.iterator();
int i = 0;
long j2 = 0L;
while (it.hasNext()) {
DataMap next = it.next();
if (next != null && (string = next.getString("entry")) != null && (userError = (UserError) create.fromJson(string, UserError.class)) != null) {
j2 = userError.timestamp + 1;
String str = userError.shortError;
if (str != null && !str.isEmpty() && !userError.shortError.startsWith("wear")) {
userError.shortError = this.mPrefs.getString("wear_logs_prefix", "wear") + userError.shortError;
}
if (UserError.getForTimestamp(userError) == null && !z) {
userError.save();
i++;
}
}
}
if (i > 0) {
Log.d("jamorham watchupdater", "syncLogData Saved timeOfLastEntry=" + JoH.dateTimeText(j2) + " saved=" + i);
} else {
Log.d("jamorham watchupdater", "syncLogData No records saved due to being duplicates! timeOfLastEntry=" + JoH.dateTimeText(j2) + " count=" + dataMapArrayList.size());
}
sendDataReceived("/xdrip_plus_data-item-received", "DATA_RECEIVED_LOGS count=" + dataMapArrayList.size(), j2, z ? "BM" : "LOG", j);
}
}
private synchronized void syncStepSensorData(DataMap dataMap, boolean z) {
Log.d("jamorham watchupdater", "syncStepSensorData");
ArrayList<DataMap> dataMapArrayList = dataMap.getDataMapArrayList("entries");
Log.d("jamorham watchupdater", "syncStepSensorData add to Table");
if (dataMapArrayList != null) {
Gson create = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().registerTypeAdapter(Date.class, new DateTypeAdapter()).serializeSpecialFloatingPointValues().create();
StepCounter.last();
Log.d("jamorham watchupdater", "syncStepSensorData add Table entries count=" + dataMapArrayList.size());
Iterator<DataMap> it = dataMapArrayList.iterator();
long j = 0L;
while (it.hasNext()) {
DataMap next = it.next();
if (next != null) {
Log.d("jamorham watchupdater", "syncStepSensorData add Table entry=" + next);
String string = next.getString("entry");
if (string != null) {
Log.d("jamorham watchupdater", "syncStepSensorData add Table record=" + string);
StepCounter stepCounter = (StepCounter) create.fromJson(string, StepCounter.class);
if (stepCounter != null) {
long j2 = stepCounter.timestamp + 1;
Log.d("jamorham watchupdater", "syncStepSensorData add Entry Wear=" + stepCounter.toString());
Log.d("jamorham watchupdater", "syncStepSensorData WATCH data.metric=" + stepCounter.metric + " timestamp=" + JoH.dateTimeText(stepCounter.timestamp));
if (!z) {
stepCounter.saveit();
}
j = j2;
}
}
}
}
sendDataReceived("/xdrip_plus_data-item-received", "DATA_RECEIVED_LOGS count=" + dataMapArrayList.size(), j, z ? "BM" : "STEP", -1L);
}
}
private synchronized void syncHeartSensorData(DataMap dataMap, boolean z) {
Log.d("jamorham watchupdater", "syncHeartSensorData");
ArrayList<DataMap> dataMapArrayList = dataMap.getDataMapArrayList("entries");
Log.d("jamorham watchupdater", "syncHeartSensorData add to Table");
if (dataMapArrayList != null) {
Gson defaultGsonInstance = JoH.defaultGsonInstance();
Log.d("jamorham watchupdater", "syncHeartSensorData add Table entries count=" + dataMapArrayList.size());
Iterator<DataMap> it = dataMapArrayList.iterator();
long j = 0L;
while (it.hasNext()) {
DataMap next = it.next();
if (next != null) {
Log.d("jamorham watchupdater", "syncHeartSensorData add Table entry=" + next);
String string = next.getString("entry");
if (string != null) {
Log.d("jamorham watchupdater", "syncHeartSensorData add Table record=" + string);
HeartRate heartRate = (HeartRate) defaultGsonInstance.fromJson(string, HeartRate.class);
if (heartRate != null) {
long j2 = heartRate.timestamp + 1;
Log.d("jamorham watchupdater", "syncHeartSensorData add Entry Wear=" + heartRate.toString() + " " + string);
Log.d("jamorham watchupdater", "syncHeartSensorData WATCH data.metric=" + heartRate.bpm + " timestamp=" + JoH.dateTimeText(heartRate.timestamp));
if (!z) {
heartRate.saveit();
}
j = j2;
}
}
}
}
sendDataReceived("/xdrip_plus_data-item-received", "DATA_RECEIVED_LOGS count=" + dataMapArrayList.size(), j, z ? "BM" : "HEART", -1L);
}
}
private synchronized void syncTreatmentsData(DataMap dataMap, boolean z) {
long j;
Log.d("jamorham watchupdater", "syncTreatmentsData");
ArrayList<DataMap> dataMapArrayList = dataMap.getDataMapArrayList("entries");
if (dataMapArrayList != null) {
Log.d("jamorham watchupdater", "syncTreatmentsData count=" + dataMapArrayList.size());
Iterator<DataMap> it = dataMapArrayList.iterator();
long j2 = 0;
loop0: while (true) {
j = j2;
while (it.hasNext()) {
DataMap next = it.next();
if (next != null) {
Log.d("jamorham watchupdater", "syncTreatmentsData entry=" + next);
String string = next.getString("entry");
if (string != null && string.length() > 1) {
Log.d("jamorham watchupdater", "Received wearable 2: voice payload: " + string);
long j3 = next.getLong("timestamp");
if (j3 <= PersistentStore.getLong("wear-sync-last-treatment-record-ts")) {
Log.e("jamorham watchupdater", "Ignoring repeated or older sync timestamp");
} else {
long msSince = JoH.msSince(j3);
if (msSince >= -5000 && msSince <= 259200000) {
if (string.contains("uuid null")) {
Log.e("jamorham watchupdater", "Skipping xx uuid null record!");
} else {
receivedText(getApplicationContext(), string);
PersistentStore.setLong("wear-sync-last-treatment-record-ts", j3);
Log.d("jamorham watchupdater", "syncTreatmentsData add Table record=" + string);
j2 = 1 + j3;
Log.d("jamorham watchupdater", "syncTreatmentsData WATCH treatments timestamp=" + JoH.dateTimeText(j3));
}
}
JoH.static_toast_long("Rejecting wear treatment as time out of range!");
UserError.Log.e("jamorham watchupdater", "Rejecting wear treatment due to time: " + string + " since: " + msSince);
Log.d("jamorham watchupdater", "syncTreatmentsData add Table record=" + string);
j2 = 1 + j3;
Log.d("jamorham watchupdater", "syncTreatmentsData WATCH treatments timestamp=" + JoH.dateTimeText(j3));
}
}
}
}
break loop0;
}
sendDataReceived("/xdrip_plus_data-item-received", "DATA_RECEIVED_LOGS count=" + dataMapArrayList.size(), j, z ? "BM" : "TREATMENTS", -1L);
}
}
public static void sendWearToast(String str, int i) {
GoogleApiClient googleApiClient2 = googleApiClient;
if (googleApiClient2 != null && googleApiClient2.isConnected()) {
PutDataMapRequest create = PutDataMapRequest.create("/xdrip_plus_toast");
create.setUrgent();
create.getDataMap().putDouble("timestamp", System.currentTimeMillis());
create.getDataMap().putInt("length", i);
create.getDataMap().putString("msg", str);
Wearable.DataApi.putDataItem(googleApiClient, create.asPutDataRequest());
return;
}
Log.e("jamorham watchupdater", "No connection to wearable available for toast! " + str);
}
public static void sendWearLocalToast(String str, int i) {
GoogleApiClient googleApiClient2 = googleApiClient;
if (googleApiClient2 != null && googleApiClient2.isConnected()) {
PutDataMapRequest create = PutDataMapRequest.create("/xdrip_plus_local_toast");
create.setUrgent();
create.getDataMap().putDouble("timestamp", System.currentTimeMillis());
create.getDataMap().putInt("length", i);
create.getDataMap().putString("msg", str);
Wearable.DataApi.putDataItem(googleApiClient, create.asPutDataRequest());
return;
}
Log.e("jamorham watchupdater", "No connection to wearable available for toast! " + str);
}
public static void sendTreatment(double d, double d2, double d3, String str, double d4, String str2) {
GoogleApiClient googleApiClient2 = googleApiClient;
if (googleApiClient2 != null && googleApiClient2.isConnected()) {
PutDataMapRequest create = PutDataMapRequest.create("/xdrip_plus_treatment_payload");
create.setUrgent();
create.getDataMap().putDouble("timestamp", System.currentTimeMillis());
create.getDataMap().putDouble("carbs", d);
create.getDataMap().putDouble("insulin", d2);
create.getDataMap().putDouble("bloodtest", d3);
create.getDataMap().putDouble("timeoffset", d4);
create.getDataMap().putString("timestring", str2);
create.getDataMap().putString("injectionJSON", str);
create.getDataMap().putBoolean("ismgdl", doMgdl(PreferenceManager.getDefaultSharedPreferences(xdrip.getAppContext())));
Wearable.DataApi.putDataItem(googleApiClient, create.asPutDataRequest());
return;
}
Log.e("jamorham watchupdater", "No connection to wearable available for send treatment!");
}
private static boolean doMgdl(SharedPreferences sharedPreferences) {
return sharedPreferences.getString("units", "mgdl").compareTo("mgdl") == 0;
}
@Override
public void onCreate() {
SharedPreferences defaultSharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
this.mPrefs = defaultSharedPreferences;
this.wear_integration = defaultSharedPreferences.getBoolean("wear_sync", false);
this.is_using_bt = DexCollectionType.hasBluetooth();
if (this.wear_integration) {
googleApiConnect();
}
setSettings();
listenForChangeInSettings();
}
class AnonymousClass1 implements SharedPreferences.OnSharedPreferenceChangeListener {
AnonymousClass1() {
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String str) {
WatchUpdaterService watchUpdaterService = WatchUpdaterService.this;
watchUpdaterService.pebble_integration = watchUpdaterService.mPrefs.getBoolean("pebble_sync", false);
if (str.compareTo("bridge_battery") == 0 || str.compareTo("nfc_sensor_age") == 0 || str.compareTo("bg_notifications_watch") == 0 || str.compareTo("persistent_high_alert_enabled_watch") == 0) {
return;
}
Log.d("jamorham watchupdater", "Triggering Wear Settings Update due to key=" + str);
Inevitable.task("wear-update-settings", 2000L, new Runnable() {
@Override
public final void run() {
WatchUpdaterService.AnonymousClass1.this.lambda$onSharedPreferenceChanged$0();
}
});
}
public void lambda$onSharedPreferenceChanged$0() {
WatchUpdaterService.this.sendPrefSettings();
WatchUpdaterService.this.processConnect();
}
}
private void listenForChangeInSettings() {
AnonymousClass1 anonymousClass1 = new AnonymousClass1();
this.mPreferencesListener = anonymousClass1;
this.mPrefs.registerOnSharedPreferenceChangeListener(anonymousClass1);
}
private void setSettings() {
Log.d("jamorham watchupdater", "setSettings enter");
this.pebble_integration = this.mPrefs.getBoolean("pebble_sync", false);
processConnect();
if (this.wear_integration) {
if (googleApiClient == null) {
googleApiConnect();
}
Log.d("jamorham watchupdater", "setSettings wear_sync changed to True.");
sendPrefSettings();
}
}
private void googleApiConnect() {
GoogleApiClient googleApiClient2 = googleApiClient;
if (googleApiClient2 != null && (googleApiClient2.isConnected() || googleApiClient.isConnecting())) {
googleApiClient.disconnect();
}
googleApiClient = new GoogleApiClient.Builder(this).addConnectionCallbacks(this).addOnConnectionFailedListener(this).addApi(Wearable.API).build();
Wearable.MessageApi.addListener(googleApiClient, this);
if (googleApiClient.isConnected()) {
Log.d("WatchUpdater", "API client is connected");
} else {
googleApiClient.connect();
}
}
private void forceGoogleApiConnect() {
GoogleApiClient googleApiClient2 = googleApiClient;
if ((googleApiClient2 == null || googleApiClient2.isConnected() || googleApiClient.isConnecting()) && googleApiClient != null) {
return;
}
try {
Log.d("jamorham watchupdater", "forceGoogleApiConnect: forcing google api reconnection");
googleApiConnect();
Thread.sleep(2000L);
} catch (InterruptedException e) {
Log.d("jamorham watchupdater", "forceGoogleApiConnect: exception:" + e);
}
}
@Override
public void onPeerConnected(Node node) {
super.onPeerConnected(node);
String id = node.getId();
Log.d("jamorham watchupdater", "onPeerConnected peer name & ID: " + node.getDisplayName() + "|" + id);
sendPrefSettings();
if (this.mPrefs.getBoolean("enable_wearG5", false)) {
Log.d("jamorham watchupdater", "onPeerConnected call initWearData for node=" + node.getDisplayName());
initWearData();
if (this.mPrefs.getBoolean("force_wearG5", false)) {
Log.d("jamorham watchupdater", "onPeerConnected force_wearG5=true Phone stopBtService and continue to use Wear G5 BT Collector");
stopBtService();
} else {
Log.d("jamorham watchupdater", "onPeerConnected onPeerConnected force_wearG5=false Phone startBtService");
startBtService();
}
}
}
@Override
public void onPeerDisconnected(Node node) {
super.onPeerDisconnected(node);
String id = node.getId();
Log.d("jamorham watchupdater", "onPeerDisconnected peer name & ID: " + node.getDisplayName() + "|" + id);
if (PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getBoolean("watch_integration", false)) {
Log.d("jamorham watchupdater", "onPeerDisconnected watch_integration=true Phone startBtService");
startBtService();
}
}
private boolean isServiceRunning(Class<?> cls) {
if (cls == null) {
return false;
}
Iterator<ActivityManager.RunningServiceInfo> it = ((ActivityManager) getSystemService("activity")).getRunningServices(Integer.MAX_VALUE).iterator();
while (it.hasNext()) {
if (cls.getName().equals(it.next().service.getClassName())) {
return true;
}
}
return false;
}
private boolean isCollectorRunning() {
Class<?> collectorServiceClass = DexCollectionType.getCollectorServiceClass();
if (collectorServiceClass == null) {
return false;
}
Log.d("jamorham watchupdater", "DexCollectionType.getCollectorServiceClass(): " + collectorServiceClass.getName());
return isServiceRunning(collectorServiceClass);
}
public void startBtService() {
Log.d("jamorham watchupdater", "startBtService");
boolean hasBluetooth = DexCollectionType.hasBluetooth();
this.is_using_bt = hasBluetooth;
if (hasBluetooth) {
if (!isCollectorRunning()) {
CollectionServiceStarter.startBtService(getApplicationContext());
Log.d("jamorham watchupdater", "startBtService startService");
return;
} else {
Log.d("jamorham watchupdater", "startBtService collector already running!");
return;
}
}
Log.d("jamorham watchupdater", "Not starting any BT Collector service as it is not our data source");
}
public void stopBtService() {
Log.d("jamorham watchupdater", "stopService call stopService");
CollectionServiceStarter.stopBtService(getApplicationContext());
Log.d("jamorham watchupdater", "stopBtService should have called onDestroy");
}
public static void startSelf() {
Inevitable.task("wear-startself", 2000L, new Runnable() {
@Override
public final void run() {
WatchUpdaterService.lambda$startSelf$0();
}
});
}
public static void lambda$startSelf$0() {
if (JoH.ratelimit("start-wear", 5)) {
startServiceAndResendData(0L);
}
}
public static void startServiceAndResendData(long j) {
UserError.Log.d("jamorham watchupdater", "Requesting to resend data");
xdrip.getAppContext().startService(new Intent(xdrip.getAppContext(), (Class<?>) WatchUpdaterService.class).setAction(ACTION_RESEND).putExtra("resend-since", j));
}
public static void startServiceAndResendDataIfNeeded(long j) {
if (isEnabled() && JoH.ratelimit("wear-resend-data", 60)) {
startServiceAndResendData(j);
}
}
@Override
public int onStartCommand(Intent intent, int i, int i2) {
PowerManager.WakeLock wakeLock = JoH.getWakeLock("watchupdate-onstart", UsbId.SILABS_CP2102);
this.wear_integration = this.mPrefs.getBoolean("wear_sync", false);
String action = intent != null ? intent.getAction() : null;
if (this.wear_integration) {
this.is_using_bt = DexCollectionType.hasBluetooth();
GoogleApiClient googleApiClient2 = googleApiClient;
if (googleApiClient2 != null) {
if (googleApiClient2.isConnected()) {
if (ACTION_RESEND.equals(action)) {
resendData(intent.getLongExtra("resend-since", 0L));
} else if (ACTION_OPEN_SETTINGS.equals(action)) {
Log.d("jamorham watchupdater", "onStartCommand Action=ACTION_OPEN_SETTINGS");
sendNotification("/openwearsettings", "openSettings");
} else if (ACTION_SEND_TOAST.equals(action)) {
Log.d("jamorham watchupdater", "onStartCommand Action=ACTION_SEND_TOAST msg=" + intent.getStringExtra("msg"));
sendWearLocalToast(intent.getStringExtra("msg"), 1);
} else {
String str = ACTION_SEND_STATUS;
if (str.equals(action)) {
Log.d("jamorham watchupdater", "onStartCommand Action=" + str + " externalStatusString=" + intent.getStringExtra("externalStatusString"));
sendRequestExtra("/sendstatustowear", "externalStatusString", intent.getStringExtra("externalStatusString"));
} else {
String str2 = ACTION_SNOOZE_ALERT;
if (str2.equals(action)) {
Log.d("jamorham watchupdater", "onStartCommand Action=" + str2 + " repeatTime=" + intent.getStringExtra("repeatTime"));
sendRequestExtra("/xdrip_plus_snooze_payload", "repeatTime", intent.getStringExtra("repeatTime"));
} else {
String str3 = ACTION_SYNC_DB;
if (str3.equals(action)) {
Log.d("jamorham watchupdater", "onStartCommand Action=" + str3 + " Path=/xdrip_plus_syncweardb");
sendNotification("/xdrip_plus_syncweardb", "syncDB");
initWearData();
} else {
String str4 = ACTION_RESET_DB;
if (str4.equals(action)) {
Log.d("jamorham watchupdater", "onStartCommand Action=" + str4 + " Path=/xdrip_plus_resetweardb");
sendNotification("/xdrip_plus_resetweardb", "resetDB");
initWearData();
} else {
if (ACTION_DISABLE_FORCE_WEAR.equals(action)) {
int readPrefsInt = readPrefsInt(this.mPrefs, "disable_wearG5_on_missedreadings_level", 30);
Log.d("jamorham watchupdater", "onStartCommand Action=ACTION_DISABLE_FORCE_WEAR");
Pref.setBoolean("force_wearG5", false);
String string = getResources().getString(2131755939, Integer.valueOf(readPrefsInt));
JoH.static_toast_long(string);
Log.e("jamorham watchupdater", "wearIsConnected disable force_wearG5:" + Pref.getBooleanDefaultFalse("force_wearG5") + " msg=" + string);
sendWearLocalToast(string, 1);
} else {
String str5 = ACTION_START_COLLECTOR;
if (str5.equals(action)) {
Log.d("jamorham watchupdater", "onStartCommand Action=" + str5 + " Path=/xdrip_plus_startcollector");
sendNotification("/xdrip_plus_startcollector", "startCOLLECTOR");
} else if (ACTION_STATUS_COLLECTOR.equals(action)) {
Log.d("jamorham watchupdater", "onStartCommand Action=ACTION_STATUS_COLLECTOR Path=STATUS_COLLECTOR_PATH getBatteryStatusNow=" + intent.getBooleanExtra("getBatteryStatusNow", false));
sendRequestExtra("/xdrip_plus_statuscollector", "getBatteryStatusNow", intent.getBooleanExtra("getBatteryStatusNow", false));
} else if (ACTION_SYNC_LOGS.equals(action)) {
long j = syncLogsRequested;
long j2 = j == 0 ? 2L : j * 10;
Log.d("jamorham watchupdater", "onStartCommand Action ACTION_SYNC_LOGS=ACTION_SYNC_LOGS SYNC_LOGS_PATH syncLogsRequested=" + syncLogsRequested);
if (JoH.ratelimit("sync-logs-requested", (int) j2)) {
long j3 = syncLogsRequested + 1;
syncLogsRequested = j3;
sendRequestExtra("/xdrip_plus_syncwearlogs", "syncLogsRequested", String.valueOf(j3));
}
Log.d("jamorham watchupdater", "onStartCommand Action ACTION_SYNC_LOGS=ACTION_SYNC_LOGS SYNC_LOGS_PATH syncLogsRequested=" + syncLogsRequested + " ratelimit=" + j2);
} else {
String str6 = ACTION_CLEAR_LOGS;
if (str6.equals(action)) {
Log.d("jamorham watchupdater", "onStartCommand Action=" + str6 + " Path=/xdrip_plus_clearwearlogs");
sendNotification("/xdrip_plus_clearwearlogs", "clearLOG");
} else {
String str7 = ACTION_SYNC_SENSOR;
if (str7.equals(action)) {
Log.d("jamorham watchupdater", "onStartCommand Action=" + str7 + " Path=/xdrip_plus_watch_sensor_data");
sendSensorData();
} else {
String str8 = ACTION_SYNC_ACTIVEBTDEVICE;
if (str8.equals(action)) {
Log.d("jamorham watchupdater", "onStartCommand Action=" + str8 + " Path=/xdrip_plus_watch_activebtdevice_data");
sendActiveBtDeviceData();
} else {
String str9 = ACTION_SYNC_ALERTTYPE;
if (str9.equals(action)) {
Log.d("jamorham watchupdater", "onStartCommand Action=" + str9 + " Path=/xdrip_plus_watch_alerttype_data");
sendAlertTypeData();
} else {
String str10 = ACTION_SYNC_CALIBRATION;
if (str10.equals(action)) {
Log.d("jamorham watchupdater", "onStartCommand Action=" + str10 + " Path=/xdrip_plus_watch_cal_data");
sendWearCalibrationData(sendCalibrationCount);
boolean z = this.mPrefs.getBoolean("rewrite_history", false);
Log.d("jamorham watchupdater", "onStartCommand adjustRecentBgReadings for rewrite_history=" + z);
sendWearBgData(Integer.valueOf(z ? 30 : 2));
sendData();
} else {
String str11 = ACTION_SEND_G5_QUEUE;
if (str11.equals(action)) {
Log.d("jamorham watchupdater", "onStartCommand Action = " + str11 + " PAth= /xdrip_plus_watch_g5_queue");
sendG5QueueData(intent.getStringExtra("queueData"));
} else {
Log.d("jamorham watchupdater", "onStartCommand Action= Path=/nightscout_watch_data");
sendData();
}
}
}
}
}
}
}
}
}
}
}
}
}
} else {
googleApiClient.connect();
}
} else {
Log.wtf("jamorham watchupdater", "GoogleAPI client is null!");
}
}
if (this.pebble_integration) {
sendData();
}
if (!this.wear_integration) {
Log.i("jamorham watchupdater", "Stopping service");
startBtService();
stopSelf();
JoH.releaseWakeLock(wakeLock);
return 2;
}
JoH.releaseWakeLock(wakeLock);
return 1;
}
public void updateWearSyncBgsCapability() {
CapabilityInfo capability;
CapabilityApi.GetCapabilityResult await = Wearable.CapabilityApi.getCapability(googleApiClient, "wear_app_sync_bgs", 1).await(5000L, TimeUnit.MILLISECONDS);
if (!await.getStatus().isSuccess()) {
Log.e("jamorham watchupdater", "updateWearSyncBgsCapability Failed to get capabilities, status: " + await.getStatus().getStatusMessage());
capability = null;
} else {
capability = await.getCapability();
}
if (capability == null || capability.getNodes().size() <= 0) {
return;
}
Log.d("jamorham watchupdater", "Updating wear sync nodes");
updateWearSyncBgsCapability(capability);
}
public void updateWearSyncBgsCapability(CapabilityInfo capabilityInfo) {
this.mWearNodeId = pickBestNodeId(capabilityInfo.getNodes());
}
private String pickBestNodeId(Set<Node> set) {
String str = null;
for (Node node : set) {
if (node.isNearby()) {
return node.getId();
}
str = node.getId();
}
return str;
}
public void setLocalNodeName() {
String str;
forceGoogleApiConnect();
Node node = Wearable.NodeApi.getLocalNode(googleApiClient).await(60L, TimeUnit.SECONDS).getNode();
if (node != null) {
str = node.getDisplayName() + "|" + node.getId();
} else {
str = "";
}
localnode = str;
UserError.Log.d("jamorham watchupdater", "setLocalNodeName. localnode=" + localnode);
}
@Override
public void onConnected(Bundle bundle) {
Log.d("jamorham watchupdater", "onConnected entered");
sendData();
}
@Override
public void onCapabilityChanged(CapabilityInfo capabilityInfo) {
updateWearSyncBgsCapability(capabilityInfo);
Log.d("jamorham watchupdater", "onConnected onCapabilityChanged mWearNodeID:" + this.mWearNodeId);
new CheckWearableConnected(this, null).execute(new Void[0]);
}
private class CheckWearableConnected extends AsyncTask<Void, Void, Void> {
private CheckWearableConnected() {
}
CheckWearableConnected(WatchUpdaterService watchUpdaterService, AnonymousClass1 anonymousClass1) {
this();
}
@Override
public Void doInBackground(Void... voidArr) {
CapabilityInfo capability;
if (!WatchUpdaterService.googleApiClient.isConnected()) {
Log.d("jamorham watchupdater", "Not connected for sending");
WatchUpdaterService.googleApiClient.connect();
} else if (System.currentTimeMillis() - WatchUpdaterService.lastRequest > 20000) {
long unused = WatchUpdaterService.lastRequest = System.currentTimeMillis();
if (WatchUpdaterService.localnode == null || (WatchUpdaterService.localnode != null && WatchUpdaterService.localnode.isEmpty())) {
WatchUpdaterService.this.setLocalNodeName();
}
boolean z = true;
CapabilityApi.GetCapabilityResult await = Wearable.CapabilityApi.getCapability(WatchUpdaterService.googleApiClient, "wear_app_sync_bgs", 1).await(5000L, TimeUnit.MILLISECONDS);
if (!await.getStatus().isSuccess()) {
Log.e("jamorham watchupdater", "doInBackground Failed to get capabilities, status: " + await.getStatus().getStatusMessage());
capability = null;
} else {
capability = await.getCapability();
}
SharedPreferences defaultSharedPreferences = PreferenceManager.getDefaultSharedPreferences(WatchUpdaterService.this.getApplicationContext());
SharedPreferences.Editor edit = PreferenceManager.getDefaultSharedPreferences(WatchUpdaterService.this.getApplicationContext()).edit();
boolean z2 = defaultSharedPreferences.getBoolean("enable_wearG5", false);
boolean z3 = defaultSharedPreferences.getBoolean("force_wearG5", false);
String string = WatchUpdaterService.this.mPrefs.getString("node_wearG5", "");
if (capability != null && capability.getNodes().size() > 0) {
WatchUpdaterService.this.updateWearSyncBgsCapability(capability);
int size = capability.getNodes().size();
StringBuilder sb = new StringBuilder();
sb.append("doInBackground connected. CapabilityApi.GetCapabilityResult mWearNodeID=");
sb.append(WatchUpdaterService.this.mWearNodeId != null ? WatchUpdaterService.this.mWearNodeId : "");
sb.append(" count=");
sb.append(size);
Log.d("jamorham watchupdater", sb.toString());
Iterator<Node> it = capability.getNodes().iterator();
while (true) {
if (!it.hasNext()) {
z = false;
break;
}
Node next = it.next();
String str = next.getDisplayName() + "|" + next.getId();
Log.d("jamorham watchupdater", "CheckWearableConnected onPeerConnected peer name & ID: " + str);
if (str.equals(string)) {
WatchUpdaterService.this.sendPrefSettings();
break;
}
if (string.equals("")) {
edit.putString("node_wearG5", str);
edit.apply();
break;
}
}
WatchUpdaterService.this.sendPrefSettings();
WatchUpdaterService.this.initWearData();
if (z2) {
if (z3 && z) {
Log.d("jamorham watchupdater", "CheckWearableConnected onPeerConnected force_wearG5=true Phone stopBtService and continue to use Wear BT Collector");
WatchUpdaterService.this.stopBtService();
} else {
Log.d("jamorham watchupdater", "CheckWearableConnected onPeerConnected force_wearG5=false Phone startBtService");
WatchUpdaterService.this.startBtService();
}
}
} else {
Log.d("jamorham watchupdater", "CheckWearableConnected onPeerDisconnected");
if (defaultSharedPreferences.getBoolean("wear_sync", false)) {
Log.d("jamorham watchupdater", "CheckWearableConnected onPeerDisconnected wear_sync=true Phone startBtService");
WatchUpdaterService.this.startBtService();
}
}
} else {
Log.d("jamorham watchupdater", "Debounce limit hit - not sending");
}
return null;
}
}
@Override
public void onDataChanged(DataEventBuffer dataEventBuffer) {
Iterator<DataEvent> it = dataEventBuffer.iterator();
while (it.hasNext()) {
DataEvent next = it.next();
if (next.getType() == 1) {
String path = next.getDataItem().getUri().getPath();
path.hashCode();
if (path.equals("/xdrip_plus_watch_pref_data")) {
DataMap dataMap = DataMapItem.fromDataItem(next.getDataItem()).getDataMap();
if (dataMap != null) {
Log.d("jamorham watchupdater", "onDataChanged WEARABLE_PREF_DATA_PATH dataMap=" + dataMap);
syncPrefData(dataMap);
}
} else {
Log.d("jamorham watchupdater", "Unknown wearable path: " + path);
}
}
}
}
@Override
public void onMessageReceived(MessageEvent messageEvent) {
int i;
String str;
String str2;
DataMap fromByteArray;
DataMap fromByteArray2;
DataMap fromByteArray3;
DataMap fromByteArray4;
DataMap fromByteArray5;
Log.d("jamorham watchupdater", "onMessageReceived enter");
if (this.wear_integration) {
PowerManager.WakeLock wakeLock = JoH.getWakeLock("watchupdate-msgrec", UsbId.SILABS_CP2102);
if (messageEvent != null) {
Log.d("jamorham watchupdater", "onMessageReceived wearable event path: " + messageEvent.getPath());
String path = messageEvent.getPath();
path.hashCode();
i = 30;
switch (path) {
case "/xdrip_plus_approve_treatment":
approveTreatment(getApplicationContext(), "");
break;
case "/xdrip_plus_syncwearbgs_BM_RAND_COMPRESS":
case "/xdrip_plus_syncwearlogs_BM_RAND_COMPRESS":
Log.d("jamorham watchupdater", "onMessageReceived Ignore, just for test!");
decompressBytes(messageEvent.getPath(), messageEvent.getData(), true);
break;
case "/xdrip_plus_syncwearlogs_BM_COMPRESS":
case "/xdrip_plus_syncwearlogs_BM_DUP_COMPRESS":
Log.d("jamorham watchupdater", "onMessageReceived Ignore, just for test!");
DataMap fromByteArray6 = DataMap.fromByteArray(decompressBytes(messageEvent.getPath(), messageEvent.getData(), true));
if (fromByteArray6 != null) {
syncLogData(fromByteArray6, true);
break;
}
break;
case "/xdrip_plus_syncwearlogs_BM_DUP":
case "/xdrip_plus_syncwearlogs_BM_RAND":
case "/xdrip_plus_syncwearbgs_BM":
case "/xdrip_plus_syncwearlogs_BM":
case "/xdrip_plus_syncwearbgs_BM_DUP":
case "/xdrip_plus_syncwearbgs_BM_RAND":
Log.d("jamorham watchupdater", "onMessageReceived Ignore, just for test!");
messageEvent.getData();
break;
case "/xdrip_plus_syncwearbgs2":
Log.d("jamorham watchupdater", "onMessageReceived /xdrip_plus_syncwearbgs2");
final DataMap fromByteArray7 = DataMap.fromByteArray(decompressBytes(messageEvent.getPath(), messageEvent.getData(), false));
if (fromByteArray7 != null) {
new LowPriorityThread(new Runnable() {
@Override
public final void run() {
WatchUpdaterService.this.lambda$onMessageReceived$1(fromByteArray7);
}
}, "inbound-precalculated-bg").start();
break;
}
break;
case "/xdrip_plus_syncwearlogs":
Log.d("jamorham watchupdater", "onMessageReceived SYNC_LOGS_PATH");
if (messageEvent.getData() != null && (fromByteArray = DataMap.fromByteArray(decompressBytes(messageEvent.getPath(), messageEvent.getData(), false))) != null) {
Log.d("jamorham watchupdater", "onMessageReceived SYNC_LOGS_PATH");
syncLogData(fromByteArray, false);
break;
}
break;
case "/xdrip_plus_battery_payload":
DataMap fromByteArray8 = DataMap.fromByteArray(messageEvent.getData());
if (fromByteArray8 != null) {
Log.d("jamorham watchupdater", "onMessageReceived WEARABLE_FIELD_SENDPATH dataMap=" + fromByteArray8);
syncFieldData(fromByteArray8);
break;
}
break;
case "/xdrip_plus_watch_data_replymsg":
Log.d("jamorham watchupdater", "onMessageReceived WEARABLE_REPLYMSG_PATH");
DataMap fromByteArray9 = DataMap.fromByteArray(messageEvent.getData());
if (fromByteArray9 != null) {
Log.d("jamorham watchupdater", "onMessageReceived WEARABLE_REPLYMSG_PATH dataMap=" + fromByteArray9);
String string = fromByteArray9.getString("action_path", "");
if (string != null && !string.isEmpty()) {
if (!string.equals("/xdrip_plus_startcollector")) {
if (string.equals("/xdrip_plus_statuscollector")) {
Log.d("jamorham watchupdater", "onMessageReceived WEARABLE_REPLYMSG_PATH send LocalBroadcastManager ACTION_BLUETOOTH_COLLECTION_SERVICE_UPDATE=com.eveningoutpost.dexdrip.BLUETOOTH_COLLECTION_SERVICE_UPDATE");
Intent intent = new Intent("com.eveningoutpost.dexdrip.BLUETOOTH_COLLECTION_SERVICE_UPDATE");
intent.putExtra("data", fromByteArray9.toBundle());
LocalBroadcastManager.getInstance(xdrip.getAppContext()).sendBroadcast(intent);
break;
}
} else {
JoH.static_toast_short(fromByteArray9.getString("msg", ""));
break;
}
}
}
break;
case "/xdrip_plus_syncwearstepsensor":
Log.d("jamorham watchupdater", "onMessageReceived SYNC_STEP_SENSOR_PATH");
if (messageEvent.getData() != null && (fromByteArray2 = DataMap.fromByteArray(messageEvent.getData())) != null) {
Log.d("jamorham watchupdater", "onMessageReceived SYNC_STEP_SENSOR_PATH dataMap=" + fromByteArray2);
syncStepSensorData(fromByteArray2, false);
break;
}
break;
case "/xdrip_plus_watch_data_inittreatments":
Log.d("jamorham watchupdater", "onMessageReceived WEARABLE_INITTREATMENTS_PATH");
initWearTreatments();
break;
case "/xdrip_plus_locale_changed_data":
Log.d("jamorham watchupdater", "onMessageReceived WEARABLE_LOCALE_CHANGED_PATH");
sendLocale();
break;
case "/xdrip_plus_syncwearbgs_BM_DUP_COMPRESS":
case "/xdrip_plus_syncwearbgs_BM_COMPRESS":
Log.d("jamorham watchupdater", "onMessageReceived Ignore, just for test!");
DataMap fromByteArray10 = DataMap.fromByteArray(decompressBytes(messageEvent.getPath(), messageEvent.getData(), true));
if (fromByteArray10 != null) {
syncTransmitterData(fromByteArray10, true);
break;
}
break;
case "/xdrip_plus_cancel_treatment":
cancelTreatment(getApplicationContext(), "");
break;
case "/xdrip_plus_snooze_payload":
try {
str = new String(messageEvent.getData(), "UTF-8");
} catch (UnsupportedEncodingException unused) {
str = "30";
}
try {
i = Integer.parseInt(str);
} catch (NumberFormatException unused2) {
}
Log.d("jamorham watchupdater", "Received wearable: snooze payload: " + i);
AlertPlayer.getPlayer().Snooze(xdrip.getAppContext(), i, true);
JoH.static_toast_long(getResources().getString(2131755111));
break;
case "/xdrip_plus_voice_payload":
try {
str2 = new String(messageEvent.getData(), "UTF-8");
} catch (UnsupportedEncodingException unused3) {
str2 = "error";
}
Log.d("jamorham watchupdater", "Received wearable: voice payload: " + str2);
if (str2.length() > 1) {
receivedText(getApplicationContext(), str2);
break;
}
break;
case "/xdrip_plus_watch_data_initprefs":
Log.d("jamorham watchupdater", "onMessageReceived WEARABLE_INITPREFS_PATH");
sendPrefSettings();
break;
case "/xdrip_plus_watch_pref_data":
DataMap fromByteArray11 = DataMap.fromByteArray(messageEvent.getData());
if (fromByteArray11 != null) {
Log.d("jamorham watchupdater", "onMessageReceived WEARABLE_PREF_DATA_PATH dataMap=" + fromByteArray11);
syncPrefData(fromByteArray11);
break;
}
break;
case "/xdrip_plus_syncwearbgs":
Log.d("jamorham watchupdater", "onMessageReceived SYNC_BGS_PATH");
if (messageEvent.getData() != null && (fromByteArray3 = DataMap.fromByteArray(messageEvent.getData())) != null) {
Log.d("jamorham watchupdater", "onMessageReceived SYNC_BGS_PATH dataMap=" + fromByteArray3);
syncTransmitterData(fromByteArray3, false);
break;
}
break;
case "/xdrip_plus_syncwearlogsrequested":
DataMap fromByteArray12 = DataMap.fromByteArray(messageEvent.getData());
if (fromByteArray12 != null) {
syncLogsRequested = fromByteArray12.getLong("syncLogsRequested", -1L);
Log.d("jamorham watchupdater", "onMessageReceived SYNC_LOGS_REQUESTED_PATH syncLogsRequested=" + syncLogsRequested);
break;
}
break;
case "/xdrip_plus_watch_data_initdb":
Log.d("jamorham watchupdater", "onMessageReceived WEARABLE_INITDB_PATH");
initWearData();
break;
case "/nightscout_watch_data_resend":
resendData(0L);
break;
case "/xdrip_plus_syncwearheartsensor":
Log.d("jamorham watchupdater", "onMessageReceived SYNC_HEART_SENSOR_PATH");
if (messageEvent.getData() != null && (fromByteArray4 = DataMap.fromByteArray(messageEvent.getData())) != null) {
Log.d("jamorham watchupdater", "onMessageReceived SYNC_HEART_SENSOR_PATH dataMap=" + fromByteArray4);
syncHeartSensorData(fromByteArray4, false);
break;
}
break;
case "/xdrip_plus_syncweartreatments":
Log.d("jamorham watchupdater", "onMessageReceived SYNC_TREATMENTS_PATH");
if (messageEvent.getData() != null && (fromByteArray5 = DataMap.fromByteArray(messageEvent.getData())) != null) {
Log.d("jamorham watchupdater", "onMessageReceived SYNC_TREATMENTS_PATH dataMap=" + fromByteArray5);
syncTreatmentsData(fromByteArray5, false);
break;
}
break;
default:
if (messageEvent.getPath().startsWith("/xdrip_plus_can_i_has_apk")) {
if (JoH.ratelimit("/xdrip_plus_can_i_has_apk", 15)) {
JoH.static_toast_short("Updating wear app");
String[] split = messageEvent.getPath().split("\\^");
int parseInt = split.length == 2 ? Integer.parseInt(split[1]) : 0;
if (parseInt == 0) {
UserError.Log.uel("jamorham watchupdater", "VUP: Sending latest apk version to watch");
JoH.static_toast_long("Sending latest version to watch");
}
new Thread(new AnonymousClass2(parseInt)).start();
break;
}
} else {
Log.d("jamorham watchupdater", "Unknown wearable path: " + messageEvent.getPath());
super.onMessageReceived(messageEvent);
break;
}
break;
}
}
JoH.releaseWakeLock(wakeLock);
return;
}
super.onMessageReceived(messageEvent);
}
public void lambda$onMessageReceived$1(DataMap dataMap) {
syncBgReadingsData(dataMap);
Home.staticRefreshBGCharts();
}
class AnonymousClass2 implements Runnable {
final int val$finalStartAt;
AnonymousClass2(int i) {
this.val$finalStartAt = i;
}
@Override
public void run() {
if (WatchUpdaterService.this.mWearNodeId == null) {
UserError.Log.d("jamorham watchupdater", "VUP: nodeid is null");
WatchUpdaterService.this.updateWearSyncBgsCapability();
}
if (WatchUpdaterService.this.mWearNodeId != null) {
UserError.Log.d("jamorham watchupdater", "VUP: nodeid is now not null");
if (WatchUpdaterService.apkBytes == null) {
UserError.Log.d("jamorham watchupdater", "VUP: getting bytes");
byte[] unused = WatchUpdaterService.apkBytes = GetWearApk.getBytes();
}
if (WatchUpdaterService.apkBytes != null) {
UserError.Log.d("jamorham watchupdater", "VUP: Trying to open channel to send apk");
final Channel channel = Wearable.ChannelApi.openChannel(WatchUpdaterService.googleApiClient, WatchUpdaterService.this.mWearNodeId, "/updated-apk").await().getChannel();
if (channel != null) {
channel.getOutputStream(WatchUpdaterService.googleApiClient).setResultCallback(new ResultCallback<Channel.GetOutputStreamResult>() {
@Override
public void onResult(final Channel.GetOutputStreamResult getOutputStreamResult) {
Log.d("jamorham watchupdater", "VUP: channel get outputstream onResult:");
new Thread(new Runnable() {
@Override
public void run() {
OutputStream outputStream = null;
try {
try {
outputStream = getOutputStreamResult.getOutputStream();
Log.d("jamorham watchupdater", "VUP: output stream opened");
outputStream.write("0463377-2025.07.16\n".getBytes("UTF-8"));
outputStream.write((WatchUpdaterService.apkBytes.length + "\n").getBytes("UTF-8"));
outputStream.write((AnonymousClass2.this.val$finalStartAt + "\n").getBytes("UTF-8"));
JoH.threadSleep(5000L);
Log.d("jamorham watchupdater", "VUP: sending data");
outputStream.write(WatchUpdaterService.apkBytes, AnonymousClass2.this.val$finalStartAt, WatchUpdaterService.apkBytes.length - AnonymousClass2.this.val$finalStartAt);
outputStream.flush();
outputStream.write(new byte[64000]);
JoH.threadSleep(5000L);
Log.d("jamorham watchupdater", "VUP: sent bytes: " + (WatchUpdaterService.apkBytes.length - AnonymousClass2.this.val$finalStartAt));
try {
try {
Log.w("jamorham watchupdater", "VUP: Closing output stream");
outputStream.close();
} catch (IOException e) {
Log.w("jamorham watchupdater", "VUP: could not close Output Stream: Node ID: " + channel.getNodeId() + " Path: " + channel.getPath() + " Error message: " + e.getMessage() + " Error cause: " + e.getCause());
}
} finally {
}
} catch (IOException e2) {
Log.w("jamorham watchupdater", "VUP: could not send message: Node: " + channel.getNodeId() + "Path: " + channel.getPath() + " Error message: " + e2.getMessage() + " Error cause: " + e2.getCause());
try {
try {
Log.w("jamorham watchupdater", "VUP: Closing output stream");
if (outputStream != null) {
outputStream.close();
}
} finally {
}
} catch (IOException e3) {
Log.w("jamorham watchupdater", "VUP: could not close Output Stream: Node ID: " + channel.getNodeId() + " Path: " + channel.getPath() + " Error message: " + e3.getMessage() + " Error cause: " + e3.getCause());
}
}
} catch (Throwable th) {
try {
try {
Log.w("jamorham watchupdater", "VUP: Closing output stream");
if (outputStream != null) {
outputStream.close();
}
} catch (IOException e4) {
Log.w("jamorham watchupdater", "VUP: could not close Output Stream: Node ID: " + channel.getNodeId() + " Path: " + channel.getPath() + " Error message: " + e4.getMessage() + " Error cause: " + e4.getCause());
}
throw th;
} finally {
}
}
}
}).start();
}
});
return;
} else {
UserError.Log.d("jamorham watchupdater", "VUP: Could not send wearable apk as Channel result was null!");
return;
}
}
return;
}
Log.d("jamorham watchupdater", "VUP: Could not send wearable apk as nodeid is currently null");
}
}
private byte[] decompressBytes(String str, byte[] bArr, boolean z) {
if (bArr.length <= 8 || bArr[0] != 31 || bArr[1] != -117 || bArr[2] != 8 || bArr[3] != 0) {
Log.d("jamorham watchupdater", "Benchmark: decompressBytesToBytes DataMap is not compressed! Process as normal. length=" + bArr.length);
return bArr;
}
if (z) {
double ts = JoH.ts();
JoH.benchmark(null);
byte[] decompressBytesToBytes = JoH.decompressBytesToBytes(bArr);
String str2 = str + " JoH.decompressBytesToBytes from length=" + bArr.length + " to length=" + decompressBytesToBytes.length;
JoH.benchmark(str2);
sendDataReceived("/xdrip_plus_data-item-received", str2 + " " + (JoH.ts() - ts) + " ms", 1L, "BM", -1L);
return decompressBytesToBytes;
}
byte[] decompressBytesToBytes2 = JoH.decompressBytesToBytes(bArr);
Log.d("jamorham watchupdater", str + " JoH.decompressBytesToBytes from length=" + bArr.length + " to length=" + decompressBytesToBytes2.length);
return decompressBytesToBytes2;
}
private void sendG5QueueData(String str) {
if (!this.wear_integration || str == null) {
return;
}
forceGoogleApiConnect();
new SendToDataLayerThread("/xdrip_plus_watch_g5_queue", googleApiClient).executeOnExecutor(xdrip.executor, dataMap("queueData", str));
}
private void sendData() {
BgReading last = BgReading.last();
if (last != null) {
forceGoogleApiConnect();
if (this.wear_integration) {
new SendToDataLayerThread("/nightscout_watch_data", googleApiClient).executeOnExecutor(xdrip.executor, dataMap(last, this.mPrefs, new BgGraphBuilder(getApplicationContext()), PowerStateReceiver.getBatteryLevel(getApplicationContext())));
}
}
}
private void resendData(long j) {
Log.d("jamorham watchupdater", "resendData ENTER");
forceGoogleApiConnect();
if (j == 0) {
j = new Date().getTime() - 86400000;
}
Log.d("jamorham watchupdater", "resendData googleApiClient connected ENTER, sending since: " + JoH.dateTimeText(j));
BgReading last = BgReading.last();
if (last != null) {
List<BgReading> latestForGraph = BgReading.latestForGraph(60, j);
BgGraphBuilder bgGraphBuilder = new BgGraphBuilder(getApplicationContext());
if (latestForGraph.isEmpty()) {
return;
}
int batteryLevel = PowerStateReceiver.getBatteryLevel(getApplicationContext());
DataMap dataMap = dataMap(last, this.mPrefs, bgGraphBuilder, batteryLevel);
ArrayList<DataMap> arrayList = new ArrayList<>(latestForGraph.size());
Iterator<BgReading> it = latestForGraph.iterator();
while (it.hasNext()) {
arrayList.add(dataMap(it.next(), this.mPrefs, bgGraphBuilder, batteryLevel));
}
dataMap.putLong("time", new Date().getTime());
dataMap.putDataMapArrayList("entries", arrayList);
if (this.mPrefs.getBoolean("extra_status_line", false)) {
dataMap.putString("extra_status_line", StatusLine.extraStatusLine());
}
new SendToDataLayerThread("/nightscout_watch_data", googleApiClient).executeOnExecutor(xdrip.executor, dataMap);
}
}
private void sendNotification(String str, String str2) {
forceGoogleApiConnect();
if (googleApiClient.isConnected()) {
Log.d("jamorham watchupdater", "sendNotification Notification=" + str2 + " Path=" + str);
PutDataMapRequest create = PutDataMapRequest.create(str);
create.setUrgent();
create.getDataMap().putDouble("timestamp", (double) System.currentTimeMillis());
create.getDataMap().putString(str2, str2);
Wearable.DataApi.putDataItem(googleApiClient, create.asPutDataRequest());
return;
}
Log.e("jamorham watchupdater", "sendNotification No connection to wearable available!");
}
private void sendRequestExtra(String str, String str2, String str3) {
forceGoogleApiConnect();
if (googleApiClient.isConnected()) {
PutDataMapRequest create = PutDataMapRequest.create(str);
create.getDataMap().putDouble("timestamp", System.currentTimeMillis());
create.getDataMap().putString(str2, str3);
Wearable.DataApi.putDataItem(googleApiClient, create.asPutDataRequest());
return;
}
Log.e("sendRequestExtra", "No connection to wearable available!");
}
private void sendRequestExtra(String str, String str2, boolean z) {
forceGoogleApiConnect();
if (googleApiClient.isConnected()) {
PutDataMapRequest create = PutDataMapRequest.create(str);
create.getDataMap().putDouble("timestamp", System.currentTimeMillis());
create.getDataMap().putBoolean(str2, z);
Wearable.DataApi.putDataItem(googleApiClient, create.asPutDataRequest());
return;
}
Log.e("sendRequestExtra", "No connection to wearable available!");
}
private DataMap dataMap(BgReading bgReading, SharedPreferences sharedPreferences, BgGraphBuilder bgGraphBuilder, int i) {
Double valueOf = Double.valueOf(Double.parseDouble(sharedPreferences.getString("highValue", "170")));
Double valueOf2 = Double.valueOf(Double.parseDouble(sharedPreferences.getString("lowValue", "70")));
DataMap dataMap = new DataMap();
BestGlucose.DisplayGlucose displayGlucose = BestGlucose.getDisplayGlucose();
dataMap.putString("sgvString", (displayGlucose == null || bgReading.dg_mgdl <= BgReading.BESTOFFSET) ? bgGraphBuilder.unitized_string(bgReading.calculated_value) : displayGlucose.unitized);
dataMap.putString("slopeArrow", bgReading.slopeArrow());
dataMap.putDouble("timestamp", bgReading.timestamp);
if (displayGlucose != null) {
dataMap.putString("delta", displayGlucose.unitized_delta);
} else {
dataMap.putString("delta", bgGraphBuilder.unitizedDeltaString(true, true, true));
}
dataMap.putString("battery", "" + i);
double d = bgReading.dg_mgdl;
if (d <= BgReading.BESTOFFSET) {
d = bgReading.calculated_value;
}
dataMap.putLong("sgvLevel", sgvLevel(d, sharedPreferences, bgGraphBuilder));
dataMap.putInt("batteryLevel", i < 30 ? 0 : 1);
double d2 = bgReading.dg_mgdl;
if (d2 <= BgReading.BESTOFFSET) {
d2 = bgReading.calculated_value;
}
dataMap.putDouble("sgvDouble", d2);
dataMap.putDouble("high", inMgdl(valueOf.doubleValue(), sharedPreferences));
dataMap.putDouble("low", inMgdl(valueOf2.doubleValue(), sharedPreferences));
dataMap.putInt("bridge_battery", this.mPrefs.getInt("bridge_battery", -1));
return dataMap;
}
private void sendLocale() {
String str;
Locale locale = Locale.getDefault();
Log.d("jamorham watchupdater", "ACTION_LOCALE_CHANGED Locale changed to " + locale);
String country = locale.getCountry();
StringBuilder sb = new StringBuilder();
sb.append(locale.getLanguage());
if (country == null || country.isEmpty()) {
str = "";
} else {
str = "_" + country;
}
sb.append(str);
sendRequestExtra("/xdrip_plus_locale_changed_data", "locale", sb.toString());
}
public void sendPrefSettings() {
String str;
boolean z;
boolean z2;
String str2;
forceGoogleApiConnect();
DataMap dataMap = new DataMap();
List<String> booleansToSync = WearSyncBooleans.getBooleansToSync();
List<String> persistentStrings = WearSyncPersistentStrings.getPersistentStrings();
boolean z3 = this.mPrefs.getBoolean("wear_sync", false);
this.wear_integration = z3;
String str3 = "";
if (z3) {
Log.d("jamorham watchupdater", "sendPrefSettings wear_sync=true");
str = this.mPrefs.getString("dex_collection_method", "DexcomG5");
z = this.mPrefs.getBoolean("enable_wearG5", false);
z2 = this.mPrefs.getBoolean("force_wearG5", false);
str2 = this.mPrefs.getString("node_wearG5", "");
dataMap.putString("dex_collection_method", str);
dataMap.putBoolean("rewrite_history", this.mPrefs.getBoolean("rewrite_history", false));
dataMap.putBoolean("enable_wearG5", z);
dataMap.putBoolean("force_wearG5", z2);
dataMap.putString("node_wearG5", str2);
dataMap.putString("share_key", this.mPrefs.getString("share_key", "SM00000000"));
dataMap.putBoolean("use_transmiter_pl_bluetooth", this.mPrefs.getBoolean("use_transmiter_pl_bluetooth", false));
dataMap.putBoolean("use_rfduino_bluetooth", this.mPrefs.getBoolean("use_rfduino_bluetooth", false));
dataMap.putBoolean("automatically_turn_bluetooth_on", this.mPrefs.getBoolean("automatically_turn_bluetooth_on", true));
dataMap.putBoolean("bluetooth_excessive_wakelocks", this.mPrefs.getBoolean("bluetooth_excessive_wakelocks", true));
dataMap.putBoolean("close_gatt_on_ble_disconnect", this.mPrefs.getBoolean("close_gatt_on_ble_disconnect", true));
dataMap.putBoolean("bluetooth_frequent_reset", this.mPrefs.getBoolean("bluetooth_frequent_reset", false));
dataMap.putBoolean("bluetooth_watchdog", this.mPrefs.getBoolean("bluetooth_watchdog", false));
dataMap.putString("bluetooth_watchdog_timer", this.mPrefs.getString("bluetooth_watchdog_timer", "20"));
dataMap.putInt("bridge_battery", this.mPrefs.getInt("bridge_battery", -1));
dataMap.putInt("nfc_sensor_age", this.mPrefs.getInt("nfc_sensor_age", -1));
dataMap.putBoolean("sync_wear_logs", this.mPrefs.getBoolean("sync_wear_logs", false));
dataMap.putString("persistent_high_repeat_mins", this.mPrefs.getString("persistent_high_repeat_mins", "20"));
dataMap.putString("persistent_high_threshold_mins", this.mPrefs.getString("persistent_high_threshold_mins", "60"));
dataMap.putBoolean("falling_alert", this.mPrefs.getBoolean("falling_alert", false));
dataMap.putString("falling_bg_val", this.mPrefs.getString("falling_bg_val", "2"));
dataMap.putBoolean("rising_alert", this.mPrefs.getBoolean("rising_alert", false));
dataMap.putString("rising_bg_val", this.mPrefs.getString("rising_bg_val", "2"));
dataMap.putBoolean("aggressive_service_restart", this.mPrefs.getBoolean("aggressive_service_restart", false));
dataMap.putBoolean("extra_status_line", this.mPrefs.getBoolean("extra_status_line", false));
dataMap.putBoolean("extra_status_stats_24h", Pref.getBooleanDefaultFalse("extra_status_stats_24h"));
dataMap.putBoolean("status_line_calibration_long", this.mPrefs.getBoolean("status_line_calibration_long", false));
dataMap.putBoolean("status_line_calibration_short", this.mPrefs.getBoolean("status_line_calibration_short", false));
dataMap.putBoolean("status_line_avg", this.mPrefs.getBoolean("status_line_avg", false));
dataMap.putBoolean("status_line_a1c_dcct", this.mPrefs.getBoolean("status_line_a1c_dcct", false));
dataMap.putBoolean("status_line_a1c_ifcc", this.mPrefs.getBoolean("status_line_a1c_ifcc", false));
dataMap.putBoolean("status_line_in", this.mPrefs.getBoolean("status_line_in", false));
dataMap.putBoolean("status_line_high", this.mPrefs.getBoolean("status_line_high", false));
dataMap.putBoolean("status_line_low", this.mPrefs.getBoolean("status_line_low", false));
dataMap.putBoolean("status_line_carbs", this.mPrefs.getBoolean("status_line_carbs", false));
dataMap.putBoolean("status_line_insulin", this.mPrefs.getBoolean("status_line_insulin", false));
dataMap.putBoolean("status_line_stdev", this.mPrefs.getBoolean("status_line_stdev", false));
dataMap.putBoolean("status_line_royce_ratio", this.mPrefs.getBoolean("status_line_royce_ratio", false));
dataMap.putBoolean("status_line_capture_percentage", this.mPrefs.getBoolean("status_line_capture_percentage", false));
dataMap.putBoolean("status_line_realtime_capture_percentage", this.mPrefs.getBoolean("status_line_realtime_capture_percentage", false));
dataMap.putBoolean("extra_status_calibration_plugin", this.mPrefs.getBoolean("extra_status_calibration_plugin", false));
dataMap.putBoolean("display_glucose_from_plugin", Pref.getBooleanDefaultFalse("display_glucose_from_plugin"));
dataMap.putBoolean("use_pluggable_alg_as_primary", Pref.getBooleanDefaultFalse("use_pluggable_alg_as_primary"));
if (Pref.getBooleanDefaultFalse("engineering_mode")) {
dataMap.putBoolean("old_school_calibration_mode", Pref.getBooleanDefaultFalse("old_school_calibration_mode"));
}
dataMap.putBoolean("show_wear_treatments", Pref.getBooleanDefaultFalse("show_wear_treatments"));
dataMap.putBoolean("use_ob1_g5_collector_service", Pref.getBooleanDefaultFalse("use_ob1_g5_collector_service"));
dataMap.putString("Blukon-bluetooth-pin", Pref.getStringDefaultBlank("Blukon-bluetooth-pin"));
String extractDexTime = Ob1G5StateMachine.extractDexTime();
if (extractDexTime != null) {
dataMap.putString("dex-timekeeping", extractDexTime);
}
} else {
str = "None";
z = false;
z2 = false;
str2 = "";
}
dataMap.putBoolean("use_wear_health", this.mPrefs.getBoolean("use_pebble_health", true));
this.is_using_bt = DexCollectionType.hasBluetooth();
Double valueOf = Double.valueOf(Double.parseDouble(this.mPrefs.getString("highValue", "170")));
Double valueOf2 = Double.valueOf(Double.parseDouble(this.mPrefs.getString("lowValue", "70")));
Log.d("jamorham watchupdater", "sendPrefSettings enable_wearG5: " + z + " force_wearG5:" + z2 + " node_wearG5:" + str2 + " dex_collection_method:" + str);
dataMap.putLong("time", new Date().getTime());
dataMap.putString("dex_txid", this.mPrefs.getString("dex_txid", "ABCDEF"));
dataMap.putString("units", this.mPrefs.getString("units", "mgdl"));
dataMap.putDouble("high", valueOf.doubleValue());
dataMap.putDouble("low", valueOf2.doubleValue());
dataMap.putBoolean("g5_non_raw_method", this.mPrefs.getBoolean("g5_non_raw_method", false));
dataMap.putString("extra_tags_for_logging", Pref.getStringDefaultBlank("extra_tags_for_logging"));
dataMap.putBoolean("bridge_battery_alerts", Pref.getBooleanDefaultFalse("bridge_battery_alerts"));
dataMap.putString("bridge_battery_alert_level", Pref.getString("bridge_battery_alert_level", "30"));
Locale locale = Locale.getDefault();
String country = locale.getCountry();
StringBuilder sb = new StringBuilder();
sb.append(locale.getLanguage());
if (country != null && !country.isEmpty()) {
str3 = "_" + country;
}
sb.append(str3);
dataMap.putString("locale", sb.toString());
dataMap.putString("build-version-name", getVersionID());
for (String str4 : booleansToSync) {
dataMap.putBoolean(str4, Pref.getBooleanDefaultFalse(str4));
}
for (String str5 : persistentStrings) {
dataMap.putString(str5, PersistentStore.getString(str5));
}
new SendToDataLayerThread("/xdrip_plus_watch_pref_data", googleApiClient).executeOnExecutor(xdrip.executor, dataMap);
}
private boolean sendSensorData() {
try {
GoogleApiClient googleApiClient2 = googleApiClient;
if (googleApiClient2 != null && !googleApiClient2.isConnected() && !googleApiClient.isConnecting()) {
googleApiClient.connect();
}
if (googleApiClient != null) {
Sensor currentSensor = Sensor.currentSensor();
if (currentSensor != null) {
if (this.wear_integration) {
DataMap dataMap = new DataMap();
Log.d("jamorham watchupdater", "Sensor sendSensorData uuid=" + currentSensor.uuid + " started_at=" + currentSensor.started_at + " active=" + Sensor.isActive() + " battery=" + currentSensor.latest_battery_level + " location=" + currentSensor.sensor_location + " stopped_at=" + currentSensor.stopped_at);
String s = currentSensor.toS();
StringBuilder sb = new StringBuilder();
sb.append("dataMap sendSensorData GSON: ");
sb.append(s);
Log.d("jamorham watchupdater", sb.toString());
dataMap.putLong("time", new Date().getTime());
dataMap.putString("dex_txid", this.mPrefs.getString("dex_txid", "ABCDEF"));
dataMap.putLong("started_at", currentSensor.started_at);
dataMap.putString("uuid", currentSensor.uuid);
dataMap.putInt("latest_battery_level", currentSensor.latest_battery_level);
dataMap.putString("sensor_location", currentSensor.sensor_location);
new SendToDataLayerThread("/xdrip_plus_watch_sensor_data", googleApiClient).executeOnExecutor(xdrip.executor, dataMap);
return true;
}
} else {
Log.e("jamorham watchupdater", "sendSensorData current sensor is null!");
}
return true;
}
Log.e("jamorham watchupdater", "sendSensorData No connection to wearable available for send Sensor!");
return false;
} catch (NullPointerException e) {
Log.e("jamorham watchupdater", "Nullpointer exception in sendWearCalibrationData: " + e);
return false;
}
}
private void sendActiveBtDeviceData() {
if (this.is_using_bt) {
forceGoogleApiConnect();
ActiveBluetoothDevice first = ActiveBluetoothDevice.first();
if (first == null || !this.wear_integration) {
return;
}
DataMap dataMap = new DataMap();
Log.d("jamorham watchupdater", "sendActiveBtDeviceData name=" + first.name + " address=" + first.address + " connected=" + first.connected);
dataMap.putLong("time", new Date().getTime());
dataMap.putString("name", first.name);
dataMap.putString("address", first.address);
dataMap.putBoolean("connected", first.connected);
new SendToDataLayerThread("/xdrip_plus_watch_activebtdevice_data", googleApiClient).executeOnExecutor(xdrip.executor, dataMap);
return;
}
Log.d("jamorham watchupdater", "Not sending activebluetoothdevice data as we are not using bt");
}
private void sendAlertTypeData() {
try {
forceGoogleApiConnect();
List<AlertType> allActive = AlertType.getAllActive();
if (allActive != null) {
if (this.wear_integration) {
Log.d("jamorham watchupdater", "sendAlertTypeData latest count = " + allActive.size());
DataMap dataMap = new DataMap();
ArrayList<DataMap> arrayList = new ArrayList<>(allActive.size());
for (AlertType alertType : allActive) {
if (alertType != null) {
arrayList.add(dataMap(alertType, "alert"));
}
}
dataMap.putLong("time", new Date().getTime());
dataMap.putDataMapArrayList("entries", arrayList);
new SendToDataLayerThread("/xdrip_plus_watch_alerttype_data", googleApiClient).executeOnExecutor(xdrip.executor, dataMap);
return;
}
Log.d("jamorham watchupdater", "sendAlertTypeData latest count = 0");
}
} catch (NullPointerException e) {
Log.e("jamorham watchupdater", "Nullpointer exception in sendAlertTypeData: " + e);
}
}
private DataMap dataMap(String str, String str2) {
DataMap dataMap = new DataMap();
dataMap.putString(str, str2);
return dataMap;
}
private DataMap dataMap(AlertType alertType, String str) {
DataMap dataMap = new DataMap();
String s = alertType.toS();
Log.d("jamorham watchupdater", "dataMap BG GSON: " + s);
dataMap.putString(str, s);
return dataMap;
}
public static boolean sendWearUpload(List<BgReading> list, List<Calibration> list2, List<BloodTest> list3, List<Treatments> list4, List<String> list5) {
return sendWearCalibrationData(0, 0L, list2) && sendWearBloodTestData(0, 0L, list3) && sendWearTreatmentsData(0, 0L, list4) && sendWearTreatmentsDataDelete(list5) && sendWearBgData(0, 0L, list);
}
public static boolean sendWearTreatmentsDataDelete(List<String> list) {
GoogleApiClient googleApiClient2 = googleApiClient;
if (googleApiClient2 != null && !googleApiClient2.isConnected() && !googleApiClient.isConnecting()) {
googleApiClient.connect();
}
if (googleApiClient != null) {
if (!list.isEmpty()) {
Log.d("jamorham watchupdater", "sendWearTreatmentsDataDelete graph size=" + list.size());
DataMap dataMap = new DataMap();
dataMap.putLong("time", new Date().getTime());
dataMap.putString("action", "delete");
dataMap.putStringArrayList("entries", new ArrayList<>(list));
new SendToDataLayerThread("/xdrip_plus_watch_treatments_data", googleApiClient).executeOnExecutor(xdrip.executor, dataMap);
} else {
Log.d("jamorham watchupdater", "sendWearTreatmentsDataDelete treatments count = 0");
}
return true;
}
Log.e("jamorham watchupdater", "sendWearTreatmentsData No connection to wearable available for send treatment!");
return false;
}
public static boolean sendWearTreatmentsData(Integer num, long j) {
return sendWearTreatmentsData(num, j, null);
}
public static boolean sendWearTreatmentsData(Integer num, long j, List<Treatments> list) {
try {
GoogleApiClient googleApiClient2 = googleApiClient;
if (googleApiClient2 != null && !googleApiClient2.isConnected() && !googleApiClient.isConnecting()) {
googleApiClient.connect();
}
if (googleApiClient != null) {
Treatments last = (list == null || list.size() <= 0) ? Treatments.last() : list.get(0);
if (last != null) {
Log.d("jamorham watchupdater", "sendWearTreatmentsData last.timestamp:" + JoH.dateTimeText(last.timestamp));
if (list == null) {
if (j == 0) {
list = Treatments.latest(num.intValue());
} else {
list = Treatments.latestForGraph(num.intValue(), j);
}
}
if (!list.isEmpty()) {
Log.d("jamorham watchupdater", "sendWearTreatmentsData graph size=" + list.size());
ArrayList<DataMap> arrayList = new ArrayList<>(list.size());
DataMap dataMap = dataMap(last);
Iterator<Treatments> it = list.iterator();
while (it.hasNext()) {
arrayList.add(dataMap(it.next()));
}
Log.d("jamorham watchupdater", "sendWearTreatmentsData entries=" + dataMap);
dataMap.putLong("time", new Date().getTime());
dataMap.putString("action", "insert");
dataMap.putDataMapArrayList("entries", arrayList);
new SendToDataLayerThread("/xdrip_plus_watch_treatments_data", googleApiClient).executeOnExecutor(xdrip.executor, dataMap);
} else {
Log.d("jamorham watchupdater", "sendWearTreatmentsData treatments count = 0");
}
return true;
}
Log.d("jamorham watchupdater", "sendWearTreatmentsData no treatments exist");
return true;
}
Log.e("jamorham watchupdater", "sendWearTreatmentsData No connection to wearable available for send treatment!");
return false;
} catch (NullPointerException e) {
Log.e("jamorham watchupdater", "Nullpointer exception in sendWearTreatmentsData: " + e);
return false;
}
}
private static DataMap dataMap(Treatments treatments) {
DataMap dataMap = new DataMap();
String s = treatments.toS();
Log.d("jamorham watchupdater", "dataMap BG GSON: " + s);
dataMap.putString("data", s);
return dataMap;
}
public static boolean sendWearBloodTestData(Integer num, long j) {
return sendWearBloodTestData(num, j, null);
}
public static boolean sendWearBloodTestData(Integer num, long j, List<BloodTest> list) {
try {
GoogleApiClient googleApiClient2 = googleApiClient;
if (googleApiClient2 != null && !googleApiClient2.isConnected() && !googleApiClient.isConnecting()) {
googleApiClient.connect();
}
if (googleApiClient != null) {
BloodTest last = (list == null || list.size() <= 0) ? BloodTest.last() : list.get(0);
if (last != null) {
Log.d("jamorham watchupdater", "sendWearBloodTestData last.timestamp:" + JoH.dateTimeText(last.timestamp));
if (list == null) {
if (j == 0) {
list = BloodTest.last(num.intValue());
} else {
list = BloodTest.latestForGraph(num.intValue(), j);
}
}
if (!list.isEmpty()) {
Log.d("jamorham watchupdater", "sendWearBloodTestData graph size=" + list.size());
ArrayList<DataMap> arrayList = new ArrayList<>(list.size());
DataMap dataMap = dataMap(last);
Iterator<BloodTest> it = list.iterator();
while (it.hasNext()) {
arrayList.add(dataMap(it.next()));
}
Log.d("jamorham watchupdater", "sendWearBloodTestData entries=" + dataMap);
dataMap.putLong("time", new Date().getTime());
dataMap.putDataMapArrayList("entries", arrayList);
new SendToDataLayerThread("/xdrip_plus_watch_bloodtest_data", googleApiClient).executeOnExecutor(xdrip.executor, dataMap);
} else {
Log.d("jamorham watchupdater", "sendWearBloodTestData BloodTest count = 0");
}
return true;
}
Log.d("jamorham watchupdater", "sendWearBloodTestData no BloodTest exist");
return true;
}
Log.e("jamorham watchupdater", "sendWearBloodTestData No connection to wearable available for send BloodTest!");
return false;
} catch (NullPointerException e) {
Log.e("jamorham watchupdater", "Nullpointer exception in sendWearBloodTestData: " + e);
return false;
}
}
private static DataMap dataMap(BloodTest bloodTest) {
DataMap dataMap = new DataMap();
String s = bloodTest.toS();
Log.d("jamorham watchupdater", "dataMap BG GSON: " + s);
dataMap.putString("data", s);
return dataMap;
}
private boolean sendWearCalibrationData(Integer num) {
return sendWearCalibrationData(num, 0L);
}
private boolean sendWearCalibrationData(Integer num, long j) {
return sendWearCalibrationData(num, j, null);
}
private static boolean sendWearCalibrationData(Integer num, long j, List<Calibration> list) {
String str;
try {
GoogleApiClient googleApiClient2 = googleApiClient;
if (googleApiClient2 != null && !googleApiClient2.isConnected() && !googleApiClient.isConnecting()) {
googleApiClient.connect();
}
if (googleApiClient != null) {
Log.d("jamorham watchupdater", "sendWearCalibrationData");
Sensor currentSensor = Sensor.currentSensor();
Calibration last = (list == null || list.size() <= 0) ? Calibration.last() : list.get(0);
BgReading last2 = BgReading.last();
if (list == null) {
if (j != 0) {
list = Calibration.latestForGraphSensor(num.intValue(), j, Long.MAX_VALUE);
} else if (last2 != null && last2.calibration != null && last2.calibration_flag) {
Log.d("jamorham watchupdater", "sendWearCalibrationData lastBgReading.calibration_flag=" + last2.calibration_flag + " lastBgReading.timestamp: " + last2.timestamp + " lastBgReading.calibration.timestamp: " + last2.calibration.timestamp);
list = Calibration.allForSensor();
} else {
list = Calibration.latest(num.intValue());
}
}
if (currentSensor != null && last != null && list != null && !list.isEmpty()) {
Log.d("jamorham watchupdater", "sendWearCalibrationData latest count = " + list.size());
DataMap dataMap = dataMap(last);
ArrayList<DataMap> arrayList = new ArrayList<>(list.size());
if (currentSensor.uuid != null) {
for (Calibration calibration : list) {
if (calibration != null && (str = calibration.sensor_uuid) != null && str.equals(currentSensor.uuid)) {
arrayList.add(dataMap(calibration));
}
}
}
dataMap.putLong("time", new Date().getTime());
dataMap.putDataMapArrayList("entries", arrayList);
new SendToDataLayerThread("/xdrip_plus_watch_cal_data", googleApiClient).executeOnExecutor(xdrip.executor, dataMap);
} else {
Log.d("jamorham watchupdater", "sendWearCalibrationData latest count = 0");
}
return true;
}
Log.e("jamorham watchupdater", "sendWearCalibrationData No connection to wearable available for send treatment!");
return false;
} catch (NullPointerException e) {
Log.e("jamorham watchupdater", "Nullpointer exception in sendWearCalibrationData: " + e);
return false;
}
}
private static DataMap dataMap(Calibration calibration) {
DataMap dataMap = new DataMap();
String s = calibration.toS();
Log.d("jamorham watchupdater", "dataMap Calibration GSON: " + s);
dataMap.putString("bgs", s);
return dataMap;
}
private boolean sendWearBgData(Integer num) {
return sendWearBgData(num, 0L);
}
private boolean sendWearBgData(Integer num, long j) {
return sendWearBgData(num, j, null);
}
private static boolean sendWearBgData(Integer num, long j, List<BgReading> list) {
String str;
try {
GoogleApiClient googleApiClient2 = googleApiClient;
if (googleApiClient2 != null && !googleApiClient2.isConnected() && !googleApiClient.isConnecting()) {
googleApiClient.connect();
}
if (googleApiClient != null) {
Log.d("jamorham watchupdater", "sendWearBgData");
BgReading last = BgReading.last();
if (list == null) {
if (j != 0) {
list = BgReading.latestForGraphSensor(num.intValue(), j, Long.MAX_VALUE);
} else {
list = BgReading.latest(num.intValue());
}
}
if (last != null && list != null && !list.isEmpty()) {
int batteryLevel = PowerStateReceiver.getBatteryLevel(xdrip.getAppContext());
Log.d("jamorham watchupdater", "sendWearBgData latest count = " + list.size() + " battery=" + batteryLevel);
DataMap dataMap = dataMap(last);
ArrayList<DataMap> arrayList = new ArrayList<>(list.size());
Sensor currentSensor = Sensor.currentSensor();
if (currentSensor != null && currentSensor.uuid != null) {
for (BgReading bgReading : list) {
if (bgReading != null && bgReading.sensor_uuid == null) {
bgReading.sensor_uuid = currentSensor.uuid;
}
if (bgReading != null && (str = bgReading.sensor_uuid) != null && str.equals(currentSensor.uuid) && bgReading.calibration_uuid != null) {
arrayList.add(dataMap(bgReading));
} else {
if (bgReading.sensor_uuid == null) {
Log.d("jamorham watchupdater", "sendWearBgData: sensor uuid is null on record to send");
}
if (bgReading.calibration_uuid == null) {
Log.d("jamorham watchupdater", "sendWearBgData: calibration uuid is null on record to send");
}
}
}
} else {
StringBuilder sb = new StringBuilder();
sb.append("sendWearBgData Not queueing data due to sensor: ");
sb.append(currentSensor != null ? currentSensor.uuid : "null sensor object");
Log.d("jamorham watchupdater", sb.toString());
}
dataMap.putLong("time", new Date().getTime());
dataMap.putInt("battery", batteryLevel);
dataMap.putDataMapArrayList("entries", arrayList);
new SendToDataLayerThread("/xdrip_plus_watch_bg_data", googleApiClient).executeOnExecutor(xdrip.executor, dataMap);
} else {
Log.d("jamorham watchupdater", "sendWearBgData lastest count = 0");
}
return true;
}
Log.e("jamorham watchupdater", "sendWearBgData No connection to wearable available for send BG!");
return false;
} catch (NullPointerException e) {
Log.e("jamorham watchupdater", "Nullpointer exception in sendWearBgData: " + e);
return false;
}
}
private static DataMap dataMap(BgReading bgReading) {
DataMap dataMap = new DataMap();
try {
dataMap.putString("calibrationUuid", bgReading.calibration.uuid);
} catch (NullPointerException unused) {
Log.d("jamorham watchupdater", "Calibration uuid is not set in dataMap(BgReading)");
}
String s = bgReading.toS();
Log.d("jamorham watchupdater", "dataMap BG GSON: " + s);
dataMap.putString("bgs", s);
return dataMap;
}
public void initWearData() {
if (JoH.ratelimit("watch_init_wear_data", R$styleable.AppCompatTheme_windowFixedWidthMajor)) {
boolean z = this.mPrefs.getBoolean("wear_sync", false);
this.wear_integration = z;
if (z) {
Log.d("jamorham watchupdater", "***initWearData***");
sendSensorData();
sendActiveBtDeviceData();
sendAlertTypeData();
if (this.mPrefs.getBoolean("show_wear_treatments", false)) {
initWearTreatments();
} else {
sendWearCalibrationData(sendCalibrationCount);
sendWearBgData(sendBgCount);
}
sendData();
return;
}
Log.d("jamorham watchupdater", "Skip initWearData as wear integration is disabled");
return;
}
Log.d("jamorham watchupdater", "Skip initWearData due to exceeding ratelimit");
}
private void initWearTreatments() {
long time = new Date().getTime() - 259200000;
if (JoH.ratelimit("watch_init_wear_treatments_data", 60)) {
Log.d("jamorham watchupdater", "initWearTreatments clear treatments and re-init from startTime=" + JoH.dateTimeText(time));
sendNotification("/xdrip_plus_clearweartreatments", "clearTreatments");
Integer num = sendTreatmentsCount;
sendWearTreatmentsData(num, time);
sendWearBloodTestData(num, time);
sendWearCalibrationData(num, time);
sendWearBgData(num, time);
return;
}
Log.d("jamorham watchupdater", "Skip initWearTreatments due to exceeding ratelimit");
}
private long sgvLevel(double d, SharedPreferences sharedPreferences, BgGraphBuilder bgGraphBuilder) {
Double valueOf = Double.valueOf(Double.parseDouble(sharedPreferences.getString("highValue", "170")));
Double valueOf2 = Double.valueOf(Double.parseDouble(sharedPreferences.getString("lowValue", "70")));
if (bgGraphBuilder.unitized(d) >= valueOf.doubleValue()) {
return 1L;
}
return bgGraphBuilder.unitized(d) >= valueOf2.doubleValue() ? 0L : -1L;
}
private double inMgdl(double d, SharedPreferences sharedPreferences) {
return !doMgdl(sharedPreferences) ? d * 18.0182d : d;
}
public static int readPrefsInt(SharedPreferences sharedPreferences, String str, int i) {
try {
return Integer.parseInt(sharedPreferences.getString(str, "" + i));
} catch (Exception unused) {
return i;
}
}
@Override
public void onDestroy() {
SharedPreferences.OnSharedPreferenceChangeListener onSharedPreferenceChangeListener;
GoogleApiClient googleApiClient2 = googleApiClient;
if (googleApiClient2 != null && googleApiClient2.isConnected()) {
googleApiClient.disconnect();
}
SharedPreferences sharedPreferences = this.mPrefs;
if (sharedPreferences == null || (onSharedPreferenceChangeListener = this.mPreferencesListener) == null) {
return;
}
sharedPreferences.unregisterOnSharedPreferenceChangeListener(onSharedPreferenceChangeListener);
}
public static boolean isEnabled() {
return Pref.getBooleanDefaultFalse("wear_sync");
}
}