Huawei: Make coordinators stateless

This commit is contained in:
José Rebelo
2026-01-17 15:14:24 +00:00
parent 5375481e53
commit 73035e7028
122 changed files with 419 additions and 715 deletions
@@ -52,14 +52,6 @@ import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.HuaweiWorkout
public abstract class HuaweiBRCoordinator extends AbstractBLClassicDeviceCoordinator implements HuaweiCoordinatorSupplier {
private final HuaweiCoordinator huaweiCoordinator = new HuaweiCoordinator(this);
private GBDevice device;
@Override
public HuaweiCoordinator getHuaweiCoordinator() {
return huaweiCoordinator;
}
@NonNull
@Override
public Collection<? extends ScanFilter> createBLEScanFilters() {
@@ -75,7 +67,7 @@ public abstract class HuaweiBRCoordinator extends AbstractBLClassicDeviceCoordin
@Override
public String[] getSupportedLanguageSettings(GBDevice device) {
return huaweiCoordinator.getSupportedLanguageSettings(device);
return HuaweiDeviceStateManager.get(device).getSupportedLanguageSettings(device);
}
@Override
@@ -85,7 +77,7 @@ public abstract class HuaweiBRCoordinator extends AbstractBLClassicDeviceCoordin
@Override
protected void deleteDevice(@NonNull GBDevice gbDevice, @NonNull Device device, @NonNull DaoSession session) throws GBException {
huaweiCoordinator.deleteDevice(gbDevice, device, session);
HuaweiDeviceStateManager.get(gbDevice).deleteDevice(gbDevice, device, session);
}
@Override
@@ -95,7 +87,7 @@ public abstract class HuaweiBRCoordinator extends AbstractBLClassicDeviceCoordin
@Override
public boolean supportsSmartWakeup(@NonNull GBDevice device, int position) {
return huaweiCoordinator.supportsSmartAlarm(device, position);
return HuaweiDeviceStateManager.get(device).supportsSmartAlarm(device, position);
}
@Override
@@ -105,7 +97,7 @@ public abstract class HuaweiBRCoordinator extends AbstractBLClassicDeviceCoordin
@Override
public boolean forcedSmartWakeup(GBDevice device, int alarmPosition) {
return huaweiCoordinator.forcedSmartWakeup(device, alarmPosition);
return HuaweiDeviceStateManager.get(device).forcedSmartWakeup(device, alarmPosition);
}
@Override
@@ -115,21 +107,21 @@ public abstract class HuaweiBRCoordinator extends AbstractBLClassicDeviceCoordin
@Override
public boolean supportsWeather(@NonNull final GBDevice device) {
return huaweiCoordinator.supportsWeather();
return HuaweiDeviceStateManager.get(device).supportsWeather();
}
@Override
public Class<? extends Activity> getAppsManagementActivity(final GBDevice device) {
return huaweiCoordinator.getAppManagerActivity();
return HuaweiDeviceStateManager.get(device).getAppManagerActivity();
}
@Override
public boolean supportsAppListFetching(@NonNull final GBDevice device) {
return huaweiCoordinator.getSupportsAppListFetching();
return HuaweiDeviceStateManager.get(device).getSupportsAppListFetching();
}
@Override
public boolean supportsAppsManagement(@NonNull GBDevice device) {
return huaweiCoordinator.getSupportsAppsManagement(device);
return HuaweiDeviceStateManager.get(device).getSupportsAppsManagement(device);
}
@Override
@@ -139,37 +131,37 @@ public abstract class HuaweiBRCoordinator extends AbstractBLClassicDeviceCoordin
@Override
public boolean supportsInstalledAppManagement(@NonNull GBDevice device) {
return huaweiCoordinator.getSupportsInstalledAppManagement(device);
return HuaweiDeviceStateManager.get(device).getSupportsInstalledAppManagement(device);
}
@Override
public boolean supportsCachedAppManagement(@NonNull GBDevice device) {
return huaweiCoordinator.getSupportsCachedAppManagement(device);
return HuaweiDeviceStateManager.get(device).getSupportsCachedAppManagement(device);
}
@Override
public boolean supportsFlashing(@NonNull GBDevice device) {
return huaweiCoordinator.getSupportsFlashing();
return HuaweiDeviceStateManager.get(device).getSupportsFlashing();
}
@Override
public int getAlarmSlotCount(GBDevice device) {
return huaweiCoordinator.getAlarmSlotCount(device);
return HuaweiDeviceStateManager.get(device).getAlarmSlotCount(device);
}
@Override
public int getContactsSlotCount(GBDevice device) {
return huaweiCoordinator.getContactsSlotCount(device);
return HuaweiDeviceStateManager.get(device).getContactsSlotCount(device);
}
@Override
public int getCannedRepliesSlotCount(GBDevice device) {
return huaweiCoordinator.getCannedRepliesSlotCount(device);
return HuaweiDeviceStateManager.get(device).getCannedRepliesSlotCount(device);
}
@Override
public boolean supportsCalendarEvents(@NonNull final GBDevice device) {
return huaweiCoordinator.supportsCalendarEvents();
return HuaweiDeviceStateManager.get(device).supportsCalendarEvents();
}
@Override
@@ -194,54 +186,55 @@ public abstract class HuaweiBRCoordinator extends AbstractBLClassicDeviceCoordin
@Override
public boolean supportsHeartRateMeasurement(@NonNull GBDevice device) {
return huaweiCoordinator.supportsHeartRate(device);
return HuaweiDeviceStateManager.get(device).supportsHeartRate(device);
}
@Override
public boolean supportsSpo2(@NonNull GBDevice device) {
return huaweiCoordinator.supportsSPo2(device);
return HuaweiDeviceStateManager.get(device).supportsSPo2(device);
}
@Override
public boolean supportsMusicInfo(@NonNull GBDevice device) {
return huaweiCoordinator.supportsMusic();
return HuaweiDeviceStateManager.get(device).supportsMusic();
}
@Override
public boolean supportsTemperatureMeasurement(@NonNull final GBDevice device) {
return huaweiCoordinator.supportsTemperature();
return HuaweiDeviceStateManager.get(device).supportsTemperature();
}
@Override
public boolean supportsContinuousTemperature(@NonNull final GBDevice device) {
return huaweiCoordinator.supportsTemperature();
return HuaweiDeviceStateManager.get(device).supportsTemperature();
}
@Override
public boolean supportsStressMeasurement(@NonNull GBDevice device) {
return huaweiCoordinator.supportsAutoStress();
return HuaweiDeviceStateManager.get(device).supportsAutoStress();
}
@Override
public boolean supportsFindDevice(@NonNull GBDevice device) {
return huaweiCoordinator.supportsFindDeviceAbility();
return HuaweiDeviceStateManager.get(device).supportsFindDeviceAbility();
}
@Override
public boolean supportsRemSleep(@NonNull GBDevice device) {return huaweiCoordinator.getSupportsNewTrueSleep(device);}
public boolean supportsRemSleep(@NonNull GBDevice device) {return HuaweiDeviceStateManager.get(device).getSupportsNewTrueSleep(device);}
@Override
public boolean supportsAwakeSleep(@NonNull GBDevice device) {return huaweiCoordinator.getSupportsNewTrueSleep(device);}
public boolean supportsAwakeSleep(@NonNull GBDevice device) {return HuaweiDeviceStateManager.get(device).getSupportsNewTrueSleep(device);}
@Override
public boolean supportsSleepScore(@NonNull final GBDevice device) { return huaweiCoordinator.getSupportsNewTrueSleep(device); }
public boolean supportsSleepScore(@NonNull final GBDevice device) { return HuaweiDeviceStateManager.get(device).getSupportsNewTrueSleep(device); }
@Override
public boolean supportsHrvMeasurement(@NonNull GBDevice device) { return huaweiCoordinator.supportsHRV();}
public boolean supportsHrvMeasurement(@NonNull GBDevice device) { return HuaweiDeviceStateManager.get(device).supportsHRV();}
@Override
public InstallHandler findInstallHandler(Uri uri, Context context) {
return huaweiCoordinator.getInstallHandler(uri, context);
HuaweiInstallHandler handler = new HuaweiInstallHandler(uri, context);
return handler.isValid() ? handler : null;
}
@Override
@@ -281,7 +274,11 @@ public abstract class HuaweiBRCoordinator extends AbstractBLClassicDeviceCoordin
@Override
public int[] getStressRanges() {
return huaweiCoordinator.getStressRanges();
// 1-29 = relaxed
// 30-59 = mild
// 60-79 = moderate
// 80-100 = high
return new int[]{1, 30, 60, 80};
}
@Override
@@ -291,12 +288,13 @@ public abstract class HuaweiBRCoordinator extends AbstractBLClassicDeviceCoordin
@Override
public int[] getStressChartParameters() {
return huaweiCoordinator.getStressChartParameters();
// For Huawei devices stress data is provided every 30 minutes. So draw it as bars with delta
return new int[]{1800, 1800, 400};
}
@Override
public DeviceSpecificSettings getDeviceSpecificSettings(final GBDevice device) {
return huaweiCoordinator.getDeviceSpecificSettings(device);
return HuaweiDeviceStateManager.get(device).getDeviceSpecificSettings(device);
}
@Override
@@ -304,16 +302,6 @@ public abstract class HuaweiBRCoordinator extends AbstractBLClassicDeviceCoordin
return HuaweiDeviceType.BR;
}
@Override
public void setDevice(GBDevice device) {
this.device = device;
}
@Override
public GBDevice getDevice() {
return this.device;
}
@NonNull
@Override
public Class<? extends DeviceSupport> getDeviceSupportClass(final GBDevice device) {
@@ -327,11 +315,11 @@ public abstract class HuaweiBRCoordinator extends AbstractBLClassicDeviceCoordin
@Override
public HeartRateZonesSpec getHeartRateZonesSpec(@NonNull GBDevice device) {
return huaweiCoordinator.getHeartRateZonesSpec(device);
return HuaweiDeviceStateManager.get(device).getHeartRateZonesSpec(device);
}
@Override
public boolean supportsNavigation(@NonNull GBDevice device) {
return huaweiCoordinator.supportsNavigation(device);
return HuaweiDeviceStateManager.get(device).supportsNavigation(device);
}
}
@@ -24,6 +24,7 @@ import android.text.TextUtils;
import java.nio.ByteBuffer;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.TreeMap;
@@ -98,9 +99,7 @@ public class HuaweiCoordinator {
private HuaweiMusicUtils.MusicCapabilities musicExtendedDeviceParams = null;
private final HuaweiCoordinatorSupplier parent;
private boolean transactionCrypted=true;
private final String address;
private int maxContactsCount = 0;
@@ -109,12 +108,12 @@ public class HuaweiCoordinator {
private boolean navigationAvailable = false;
public HuaweiCoordinator(HuaweiCoordinatorSupplier parent) {
this.parent = parent;
public HuaweiCoordinator(final String address) {
this.address = address;
// Set non-numeric capabilities
this.expandCapabilities = GB.hexStringToByteArray(getCapabilitiesSharedPreferences().getString("expandCapabilities", "00"));
this.notificationCapabilities = (byte)getCapabilitiesSharedPreferences().getInt("notificationCapabilities", -0x01);
this.notificationCapabilities = (byte) getCapabilitiesSharedPreferences().getInt("notificationCapabilities", -0x01);
this.notificationConstraints = ByteBuffer.wrap(GB.hexStringToByteArray(
getCapabilitiesSharedPreferences().getString(
"notificationConstraints",
@@ -190,6 +189,7 @@ public class HuaweiCoordinator {
HuaweiDictDataValuesDao.Properties.DictId.eq(data.getDictId())
).buildDelete().executeDeleteWithoutDetachingEntities();
}
session.getHuaweiDictDataDao().queryBuilder().where(HuaweiDictDataDao.Properties.DeviceId.eq(deviceId)).buildDelete().executeDeleteWithoutDetachingEntities();
QueryBuilder<HuaweiEcgSummarySample> qb4 = session.getHuaweiEcgSummarySampleDao().queryBuilder();
@@ -203,7 +203,7 @@ public class HuaweiCoordinator {
}
private SharedPreferences getCapabilitiesSharedPreferences() {
return GBApplication.getContext().getSharedPreferences("huawei_coordinator_capatilities" + parent.getDeviceType().name(), Context.MODE_PRIVATE);
return GBApplication.getContext().getSharedPreferences("huawei_coordinator_capabilities_" + address.toLowerCase(Locale.ROOT).replace(":", "_"), Context.MODE_PRIVATE);
}
private SharedPreferences getDeviceSpecificSharedPreferences(GBDevice gbDevice) {
@@ -226,7 +226,7 @@ public class HuaweiCoordinator {
public void saveNotificationCapabilities(byte capabilities) {
notificationCapabilities = capabilities;
getCapabilitiesSharedPreferences().edit().putInt("notificationCapabilities", (int)capabilities).apply();
getCapabilitiesSharedPreferences().edit().putInt("notificationCapabilities", (int) capabilities).apply();
}
public void saveNotificationConstraints(ByteBuffer constraints) {
@@ -271,9 +271,9 @@ public class HuaweiCoordinator {
// Print all Services ID and Commands ID
public void printCommandsPerService() {
StringBuilder msg = new StringBuilder();
for(Map.Entry<Integer, byte[]> entry : commandsPerService.entrySet()) {
for (Map.Entry<Integer, byte[]> entry : commandsPerService.entrySet()) {
msg.append("ServiceID: ").append(Integer.toHexString(entry.getKey())).append(" => Commands: ");
for (byte b: entry.getValue()) {
for (byte b : entry.getValue()) {
msg.append(Integer.toHexString(b)).append(" ");
}
msg.append("\n");
@@ -328,39 +328,39 @@ public class HuaweiCoordinator {
deviceSpecificSettings.addRootScreen(DeviceSpecificSettingsScreen.HEALTH, R.xml.devicesettings_heartrate_automatic_enable);
if (supportsRealtimeHeartRate())
deviceSpecificSettings.addRootScreen(DeviceSpecificSettingsScreen.HEALTH, R.xml.devicesettings_huawei_heart_rate_realtime);
if(supportsHighHeartRateAlert())
if (supportsHighHeartRateAlert())
deviceSpecificSettings.addRootScreen(DeviceSpecificSettingsScreen.HEALTH, R.xml.devicesettings_huawei_heart_rate_huawei_high_alert);
if(supportsLowHeartRateAlert())
if (supportsLowHeartRateAlert())
deviceSpecificSettings.addRootScreen(DeviceSpecificSettingsScreen.HEALTH, R.xml.devicesettings_huawei_heart_rate_huawei_low_alert);
}
if (supportsSPo2()) {
deviceSpecificSettings.addRootScreen(DeviceSpecificSettingsScreen.HEALTH, R.xml.devicesettings_spo_automatic_enable);
if(supportsLowSPo2Alert())
if (supportsLowSPo2Alert())
deviceSpecificSettings.addRootScreen(DeviceSpecificSettingsScreen.HEALTH, R.xml.devicesettings_huawei_spo_low_alert);
}
if(supportsTemperature()) {
if (supportsTemperature()) {
deviceSpecificSettings.addRootScreen(DeviceSpecificSettingsScreen.HEALTH, R.xml.devicesettings_temperature_automatic_enable);
}
if(supportsAutoStress()) {
if (supportsAutoStress()) {
deviceSpecificSettings.addRootScreen(DeviceSpecificSettingsScreen.HEALTH, R.xml.devicesettings_huawei_stress);
}
if(supportsArrhythmia() && isShowForceCountrySpecificFeatures(device)) {
if (supportsArrhythmia() && isShowForceCountrySpecificFeatures(device)) {
deviceSpecificSettings.addRootScreen(DeviceSpecificSettingsScreen.HEALTH, R.xml.devicesettings_huawei_arrhythmia);
}
if(supportsECG() && isShowForceCountrySpecificFeatures(device)) {
if (supportsECG() && isShowForceCountrySpecificFeatures(device)) {
deviceSpecificSettings.addRootScreen(DeviceSpecificSettingsScreen.HEALTH, R.xml.devicesettings_huawei_ecg);
}
if(supportsArterialStiffnessDetection() && isShowForceCountrySpecificFeatures(device)) {
if (supportsArterialStiffnessDetection() && isShowForceCountrySpecificFeatures(device)) {
deviceSpecificSettings.addRootScreen(DeviceSpecificSettingsScreen.HEALTH, R.xml.devicesettings_huawei_arterial_stiffness_detection);
}
if(supportsThreeCircle() || supportsThreeCircleLite()) {
if (supportsThreeCircle() || supportsThreeCircleLite()) {
deviceSpecificSettings.addRootScreen(DeviceSpecificSettingsScreen.HEALTH, R.xml.devicesettings_huawei_activity_reminders);
}
// Notifications
final List<Integer> notifications = deviceSpecificSettings.addRootScreen(DeviceSpecificSettingsScreen.NOTIFICATIONS);
notifications.add(R.xml.devicesettings_notifications_enable);
if (supportsNotificationsRepeatedNotify() || supportsNotificationsRemoveSingle()){
if (supportsNotificationsRepeatedNotify() || supportsNotificationsRemoveSingle()) {
notifications.add(R.xml.devicesettings_autoremove_notifications);
}
if (supportsNotificationPicture()) {
@@ -381,7 +381,7 @@ public class HuaweiCoordinator {
if (supportsSendingGps())
deviceSpecificSettings.addRootScreen(DeviceSpecificSettingsScreen.WORKOUT, R.xml.devicesettings_workout_send_gps_to_band);
if(supportsTrack() || supportsHeartRateZones())
if (supportsTrack() || supportsHeartRateZones())
deviceSpecificSettings.addRootScreen(DeviceSpecificSettingsScreen.WORKOUT, R.xml.devicesettings_heartrate_settings);
// Other
@@ -404,7 +404,7 @@ public class HuaweiCoordinator {
deviceSpecificSettings.addRootScreen(R.xml.devicesettings_musicmanagement);
}
if(supportsSendCountryCode()) {
if (supportsSendCountryCode()) {
deviceSpecificSettings.addRootScreen(R.xml.devicesettings_huawei_features);
}
@@ -416,7 +416,7 @@ public class HuaweiCoordinator {
}
//Calendar
if( supportsP2PService() && supportsCalendar()) {
if (supportsP2PService() && supportsCalendar()) {
deviceSpecificSettings.addRootScreen(DeviceSpecificSettingsScreen.CALENDAR, R.xml.devicesettings_sync_calendar);
}
@@ -432,14 +432,14 @@ public class HuaweiCoordinator {
// Currently on main setting menu.
/*if (supportsLanguageSetting())
deviceSpecificSettings.addRootScreen(DeviceSpecificSettingsScreen.DISPLAY, R.xml.devicesettings_language_generic);*/
if(supportsTemperature()) {
if (supportsTemperature()) {
deviceSpecificSettings.addRootScreen(DeviceSpecificSettingsScreen.DISPLAY, R.xml.devicesettings_temperature_scale_cf);
}
// Developer
final List<Integer> developer = deviceSpecificSettings.addRootScreen(DeviceSpecificSettingsScreen.DEVELOPER);
developer.add(R.xml.devicesettings_huawei_debug);
if(supportsGpsAndTimeToDevice())
if (supportsGpsAndTimeToDevice())
developer.add(R.xml.devicesettings_huawei_gps_and_time);
return deviceSpecificSettings;
@@ -528,7 +528,7 @@ public class HuaweiCoordinator {
public boolean supportsMotionGoal() {
return supportsCommandForService(0x07, 0x01);
}
public boolean supportsInactivityWarnings() {
return supportsCommandForService(0x07, 0x06);
}
@@ -596,21 +596,28 @@ public class HuaweiCoordinator {
public boolean supportsFitnessThresholdValue() {
return supportsCommandForService(0x07, 0x29);
}
public boolean supportsFitnessThresholdValueV2() { return supportsExpandCapability(0x9a) || supportsExpandCapability(0x9c); }
public boolean supportsFitnessThresholdValueV2() {
return supportsExpandCapability(0x9a) || supportsExpandCapability(0x9c);
}
// 0x1d - SupportTemperature
// 0xba - SupportTemperatureClassification
// 0x43 - SupportTemperatureStudy
public boolean supportsTemperature() { return supportsExpandCapability(0x1d); }
public boolean supportsTemperature() {
return supportsExpandCapability(0x1d);
}
public boolean supportsBloodPressure() { return supportsExpandCapability(0x3b); }
public boolean supportsBloodPressure() {
return supportsExpandCapability(0x3b);
}
public boolean supportsEventAlarm() {
return supportsCommandForService(0x08, 0x01);
}
public boolean supportsSmartAlarm() {
return supportsCommandForService(0x08, 0x02) ;
return supportsCommandForService(0x08, 0x02);
}
public boolean supportsSmartAlarm(GBDevice gbDevice) {
@@ -640,11 +647,17 @@ public class HuaweiCoordinator {
return supportsCommandForService(0x0c, 0x01);
}
public boolean supportsWatchfaceParams(){ return supportsCommandForService(0x27, 0x01);}
public boolean supportsWatchfaceParams() {
return supportsCommandForService(0x27, 0x01);
}
public boolean supportsAppParams(){ return supportsCommandForService(0x2a, 0x06);}
public boolean supportsAppParams() {
return supportsCommandForService(0x2a, 0x06);
}
public boolean supportsMusicUploading(){ return supportsCommandForService(0x25, 0x04);}
public boolean supportsMusicUploading() {
return supportsCommandForService(0x25, 0x04);
}
public boolean supportsWeather() {
return supportsCommandForService(0x0f, 0x01);
@@ -702,7 +715,9 @@ public class HuaweiCoordinator {
return supportsCommandForService(0x18, 0x02);
}
public boolean supportsGpsAndTimeToDevice() { return supportsCommandForService(0x18, 0x06); }
public boolean supportsGpsAndTimeToDevice() {
return supportsCommandForService(0x18, 0x06);
}
public boolean supportsAccount() {
return supportsCommandForService(0x1A, 0x01);
@@ -891,13 +906,13 @@ public class HuaweiCoordinator {
return supportsExpandCapability(82);
return false;
}
public boolean supportsDeviceCommandConfig() {
if (supportsExpandCapability())
return supportsExpandCapability(83);
return false;
}
public boolean supportsDeviceCommandEvent() {
if (supportsExpandCapability())
return supportsExpandCapability(84);
@@ -927,12 +942,13 @@ public class HuaweiCoordinator {
return supportsExpandCapability(156);
return false;
}
public boolean supportsOTAChangelog() {
if (supportsExpandCapability())
return supportsExpandCapability(52);
return false;
}
public boolean supportsOTASignature() {
if (supportsExpandCapability())
return supportsExpandCapability(144);
@@ -1046,7 +1062,7 @@ public class HuaweiCoordinator {
return false;
}
public boolean supportsPromptPushMessage () {
public boolean supportsPromptPushMessage() {
// do not ask for capabilities under specific condition
// if (deviceType == 10 && deviceVersion == 73617766697368 && deviceSoftVersion == 372E312E31) -> leo device
// if V1V0Device
@@ -1112,25 +1128,17 @@ public class HuaweiCoordinator {
}
public int getContactsSlotCount(GBDevice device) {
if(supportsContactsSync()) {
if (supportsContactsSync()) {
// TODO: Currently I don't know how to obtain contacts limit in runtime, and I don't know is the limit exists,
// set limit to 20 because more items not comfortable to use in the current GB's UI. Can be increased in the future.
return 20;
}
return supportsContacts()?maxContactsCount:0;
return supportsContacts() ? maxContactsCount : 0;
}
public int getCannedRepliesSlotCount(GBDevice device) {
// TODO: find proper count
return supportsCannedReplies()?10:0;
}
public void setTransactionCrypted(boolean crypted) {
this.transactionCrypted = crypted;
}
public boolean isTransactionCrypted() {
return this.transactionCrypted;
return supportsCannedReplies() ? 10 : 0;
}
public String[] getSupportedLanguageSettings(GBDevice device) {
@@ -1167,11 +1175,11 @@ public class HuaweiCoordinator {
}
public short getWidth() {
return (short)watchfaceDeviceParams.width;
return (short) watchfaceDeviceParams.width;
}
public short getHeight() {
return (short)watchfaceDeviceParams.height;
return (short) watchfaceDeviceParams.height;
}
public void setWatchfaceDeviceParams(Watchface.WatchfaceDeviceParams watchfaceDeviceParams) {
@@ -1190,6 +1198,7 @@ public class HuaweiCoordinator {
LOG.info(musicDeviceParams.toString());
this.musicExtendedDeviceParams = musicDeviceParams;
}
public HuaweiMusicUtils.MusicCapabilities getExtendedMusicInfoParams() {
return musicExtendedDeviceParams;
}
@@ -1198,6 +1207,7 @@ public class HuaweiCoordinator {
LOG.info(musicDeviceParams.toString());
this.musicDeviceParams = musicDeviceParams;
}
public HuaweiMusicUtils.MusicCapabilities getMusicInfoParams() {
return musicDeviceParams;
}
@@ -1207,7 +1217,9 @@ public class HuaweiCoordinator {
return AppManagerActivity.class;
}
public boolean getSupportsAppListFetching() { return true; }
public boolean getSupportsAppListFetching() {
return true;
}
public boolean getSupportsAppsManagement(GBDevice device) {
return true;
@@ -1278,19 +1290,6 @@ public class HuaweiCoordinator {
this.otaSignatureLength = otaSignatureLength;
}
public int[] getStressRanges() {
// 1-29 = relaxed
// 30-59 = mild
// 60-79 = moderate
// 80-100 = high
return new int[]{1, 30, 60, 80};
}
public int[] getStressChartParameters() {
// For Huawei devices stress data is provided every 30 minutes. So draw it as bars with delta
return new int[]{1800, 1800, 400};
}
public boolean getSupportsNewTrueSleep(final GBDevice device) {
return supportsTruSleep() && supportsDictSleepSync();
}
@@ -16,9 +16,6 @@
along with this program. If not, see <https://www.gnu.org/licenses/>. */
package nodomain.freeyourgadget.gadgetbridge.devices.huawei;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
public interface HuaweiCoordinatorSupplier {
enum HuaweiDeviceType {
@@ -39,9 +36,9 @@ public interface HuaweiCoordinatorSupplier {
}
}
HuaweiCoordinator getHuaweiCoordinator();
default boolean isTransactionCrypted() {
return true;
}
HuaweiDeviceType getHuaweiType();
DeviceType getDeviceType();
void setDevice(GBDevice Device);
GBDevice getDevice();
}
@@ -0,0 +1,41 @@
/* Copyright (C) 2025 Damien José Rebelo
This file is part of Gadgetbridge.
Gadgetbridge is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Gadgetbridge is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
package nodomain.freeyourgadget.gadgetbridge.devices.huawei;
import java.util.HashMap;
import java.util.Map;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
public class HuaweiDeviceStateManager {
private static final Map<String, HuaweiCoordinator> STATES = new HashMap<>();
public static HuaweiCoordinator get(final GBDevice device) {
return get(device.getAddress());
}
public static HuaweiCoordinator get(final String macAddress) {
if (STATES.containsKey(macAddress)) {
return STATES.get(macAddress);
}
final HuaweiCoordinator huaweiDeviceState = new HuaweiCoordinator(macAddress);
STATES.put(macAddress, huaweiDeviceState);
return huaweiDeviceState;
}
}
@@ -36,13 +36,6 @@ import nodomain.freeyourgadget.gadgetbridge.util.preferences.DevicePrefs;
public abstract class HuaweiFreebudsCoordinator extends AbstractBLClassicDeviceCoordinator implements HuaweiCoordinatorSupplier {
private final HuaweiCoordinator huaweiCoordinator = new HuaweiCoordinator(this);
private GBDevice gbDevice;
public HuaweiFreebudsCoordinator() {
huaweiCoordinator.setTransactionCrypted(false);
}
@Override
public String getManufacturer() {
return "Huawei";
@@ -54,8 +47,8 @@ public abstract class HuaweiFreebudsCoordinator extends AbstractBLClassicDeviceC
}
@Override
public HuaweiCoordinator getHuaweiCoordinator() {
return huaweiCoordinator;
public boolean isTransactionCrypted() {
return false;
}
@Override
@@ -63,16 +56,6 @@ public abstract class HuaweiFreebudsCoordinator extends AbstractBLClassicDeviceC
return HuaweiDeviceType.BR;
}
@Override
public void setDevice(GBDevice gbDevice) {
this.gbDevice = gbDevice;
}
@Override
public GBDevice getDevice() {
return this.gbDevice;
}
@Override
public int getBondingStyle() {
// TODO: Check if correct
@@ -34,7 +34,6 @@ import java.util.Locale;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.activities.install.FwAppInstallerActivity;
import nodomain.freeyourgadget.gadgetbridge.activities.install.InstallActivity;
import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.InstallHandler;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.GenericItem;
@@ -112,13 +111,7 @@ public class HuaweiInstallHandler implements InstallHandler {
@Override
public void validateInstallation(InstallActivity installActivity, GBDevice device) {
final DeviceCoordinator coordinator = device.getDeviceCoordinator();
if (!(coordinator instanceof HuaweiCoordinatorSupplier huaweiCoordinatorSupplier)) {
LOG.warn("Coordinator is not a HuaweiCoordinatorSupplier: {}", coordinator.getClass());
installActivity.setInstallEnabled(false);
return;
}
final HuaweiCoordinator huaweiDeviceState = HuaweiDeviceStateManager.get(device);
if (helper.isFirmware) {
this.valid = true; //NOTE: nothing to verify for now
@@ -168,8 +161,8 @@ public class HuaweiInstallHandler implements InstallHandler {
String deviceScreen = String.format(
Locale.ROOT,
"%d*%d",
huaweiCoordinatorSupplier.getHuaweiCoordinator().getHeight(),
huaweiCoordinatorSupplier.getHuaweiCoordinator().getWidth()
huaweiDeviceState.getHeight(),
huaweiDeviceState.getWidth()
);
this.valid = resolution.isValid(description.screen, deviceScreen);
@@ -252,9 +245,9 @@ public class HuaweiInstallHandler implements InstallHandler {
LOG.debug("Initialized HuaweiInstallHandler: App");
} else if (helper.isMusic()) {
HuaweiMusicUtils.MusicCapabilities capabilities = huaweiCoordinatorSupplier.getHuaweiCoordinator().getExtendedMusicInfoParams();
HuaweiMusicUtils.MusicCapabilities capabilities = huaweiDeviceState.getExtendedMusicInfoParams();
if (capabilities == null) {
capabilities = huaweiCoordinatorSupplier.getHuaweiCoordinator().getMusicInfoParams();
capabilities = huaweiDeviceState.getMusicInfoParams();
}
AudioInfo currentMusicInfo = helper.getMusicInfo();
@@ -54,15 +54,6 @@ import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.HuaweiLESuppo
import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.HuaweiWorkoutGbParser;
public abstract class HuaweiLECoordinator extends AbstractBLEDeviceCoordinator implements HuaweiCoordinatorSupplier {
private final HuaweiCoordinator huaweiCoordinator = new HuaweiCoordinator(this);
private GBDevice device;
@Override
public HuaweiCoordinator getHuaweiCoordinator() {
return huaweiCoordinator;
}
@NonNull
@Override
public Collection<? extends ScanFilter> createBLEScanFilters() {
@@ -78,7 +69,7 @@ public abstract class HuaweiLECoordinator extends AbstractBLEDeviceCoordinator i
@Override
public String[] getSupportedLanguageSettings(GBDevice device) {
return huaweiCoordinator.getSupportedLanguageSettings(device);
return HuaweiDeviceStateManager.get(device).getSupportedLanguageSettings(device);
}
@Override
@@ -96,7 +87,7 @@ public abstract class HuaweiLECoordinator extends AbstractBLEDeviceCoordinator i
@Override
protected void deleteDevice(@NonNull GBDevice gbDevice, @NonNull Device device, @NonNull DaoSession session) throws GBException {
huaweiCoordinator.deleteDevice(gbDevice, device, session);
HuaweiDeviceStateManager.get(gbDevice).deleteDevice(gbDevice, device, session);
}
@Override
@@ -106,7 +97,7 @@ public abstract class HuaweiLECoordinator extends AbstractBLEDeviceCoordinator i
@Override
public boolean supportsSmartWakeup(@NonNull GBDevice device, int position) {
return huaweiCoordinator.supportsSmartAlarm(device, position);
return HuaweiDeviceStateManager.get(device).supportsSmartAlarm(device, position);
}
@Override
@@ -116,7 +107,7 @@ public abstract class HuaweiLECoordinator extends AbstractBLEDeviceCoordinator i
@Override
public boolean forcedSmartWakeup(GBDevice device, int alarmPosition) {
return huaweiCoordinator.forcedSmartWakeup(device, alarmPosition);
return HuaweiDeviceStateManager.get(device).forcedSmartWakeup(device, alarmPosition);
}
@Override
@@ -126,21 +117,21 @@ public abstract class HuaweiLECoordinator extends AbstractBLEDeviceCoordinator i
@Override
public boolean supportsWeather(@NonNull final GBDevice device) {
return huaweiCoordinator.supportsWeather();
return HuaweiDeviceStateManager.get(device).supportsWeather();
}
@Override
public Class<? extends Activity> getAppsManagementActivity(final GBDevice device) {
return huaweiCoordinator.getAppManagerActivity();
return HuaweiDeviceStateManager.get(device).getAppManagerActivity();
}
@Override
public boolean supportsAppListFetching(@NonNull final GBDevice device) {
return huaweiCoordinator.getSupportsAppListFetching();
return HuaweiDeviceStateManager.get(device).getSupportsAppListFetching();
}
@Override
public boolean supportsAppsManagement(@NonNull GBDevice device) {
return huaweiCoordinator.getSupportsAppsManagement(device);
return HuaweiDeviceStateManager.get(device).getSupportsAppsManagement(device);
}
@Override
@@ -150,37 +141,37 @@ public abstract class HuaweiLECoordinator extends AbstractBLEDeviceCoordinator i
@Override
public boolean supportsInstalledAppManagement(@NonNull GBDevice device) {
return huaweiCoordinator.getSupportsInstalledAppManagement(device);
return HuaweiDeviceStateManager.get(device).getSupportsInstalledAppManagement(device);
}
@Override
public boolean supportsCachedAppManagement(@NonNull GBDevice device) {
return huaweiCoordinator.getSupportsCachedAppManagement(device);
return HuaweiDeviceStateManager.get(device).getSupportsCachedAppManagement(device);
}
@Override
public boolean supportsFlashing(@NonNull GBDevice device) {
return huaweiCoordinator.getSupportsFlashing();
return HuaweiDeviceStateManager.get(device).getSupportsFlashing();
}
@Override
public int getAlarmSlotCount(GBDevice device) {
return huaweiCoordinator.getAlarmSlotCount(device);
return HuaweiDeviceStateManager.get(device).getAlarmSlotCount(device);
}
@Override
public int getContactsSlotCount(GBDevice device) {
return huaweiCoordinator.getContactsSlotCount(device);
return HuaweiDeviceStateManager.get(device).getContactsSlotCount(device);
}
@Override
public int getCannedRepliesSlotCount(GBDevice device) {
return huaweiCoordinator.getCannedRepliesSlotCount(device);
return HuaweiDeviceStateManager.get(device).getCannedRepliesSlotCount(device);
}
@Override
public boolean supportsCalendarEvents(@NonNull final GBDevice device) {
return huaweiCoordinator.supportsCalendarEvents();
return HuaweiDeviceStateManager.get(device).supportsCalendarEvents();
}
@Override
@@ -205,54 +196,55 @@ public abstract class HuaweiLECoordinator extends AbstractBLEDeviceCoordinator i
@Override
public boolean supportsHeartRateMeasurement(@NonNull GBDevice device) {
return huaweiCoordinator.supportsHeartRate(device);
return HuaweiDeviceStateManager.get(device).supportsHeartRate(device);
}
@Override
public boolean supportsSpo2(@NonNull GBDevice device) {
return huaweiCoordinator.supportsSPo2(device);
return HuaweiDeviceStateManager.get(device).supportsSPo2(device);
}
@Override
public boolean supportsMusicInfo(@NonNull GBDevice device) {
return huaweiCoordinator.supportsMusic();
return HuaweiDeviceStateManager.get(device).supportsMusic();
}
@Override
public boolean supportsTemperatureMeasurement(@NonNull final GBDevice device) {
return huaweiCoordinator.supportsTemperature();
return HuaweiDeviceStateManager.get(device).supportsTemperature();
}
@Override
public boolean supportsContinuousTemperature(@NonNull final GBDevice device) {
return huaweiCoordinator.supportsTemperature();
return HuaweiDeviceStateManager.get(device).supportsTemperature();
}
@Override
public boolean supportsStressMeasurement(@NonNull GBDevice device) {
return huaweiCoordinator.supportsAutoStress();
return HuaweiDeviceStateManager.get(device).supportsAutoStress();
}
@Override
public boolean supportsFindDevice(@NonNull GBDevice device) {
return huaweiCoordinator.supportsFindDeviceAbility();
return HuaweiDeviceStateManager.get(device).supportsFindDeviceAbility();
}
@Override
public boolean supportsRemSleep(@NonNull GBDevice device) {return huaweiCoordinator.getSupportsNewTrueSleep(device);}
public boolean supportsRemSleep(@NonNull GBDevice device) {return HuaweiDeviceStateManager.get(device).getSupportsNewTrueSleep(device);}
@Override
public boolean supportsAwakeSleep(@NonNull GBDevice device) {return huaweiCoordinator.getSupportsNewTrueSleep(device);}
public boolean supportsAwakeSleep(@NonNull GBDevice device) {return HuaweiDeviceStateManager.get(device).getSupportsNewTrueSleep(device);}
@Override
public boolean supportsSleepScore(@NonNull final GBDevice device) { return huaweiCoordinator.getSupportsNewTrueSleep(device); }
public boolean supportsSleepScore(@NonNull final GBDevice device) { return HuaweiDeviceStateManager.get(device).getSupportsNewTrueSleep(device); }
@Override
public boolean supportsHrvMeasurement(@NonNull GBDevice device) { return huaweiCoordinator.supportsHRV();}
public boolean supportsHrvMeasurement(@NonNull GBDevice device) { return HuaweiDeviceStateManager.get(device).supportsHRV();}
@Override
public InstallHandler findInstallHandler(Uri uri, Context context) {
return huaweiCoordinator.getInstallHandler(uri, context);
HuaweiInstallHandler handler = new HuaweiInstallHandler(uri, context);
return handler.isValid() ? handler : null;
}
@Override
@@ -297,7 +289,11 @@ public abstract class HuaweiLECoordinator extends AbstractBLEDeviceCoordinator i
@Override
public int[] getStressRanges() {
return huaweiCoordinator.getStressRanges();
// 1-29 = relaxed
// 30-59 = mild
// 60-79 = moderate
// 80-100 = high
return new int[]{1, 30, 60, 80};
}
@Override
@@ -307,12 +303,13 @@ public abstract class HuaweiLECoordinator extends AbstractBLEDeviceCoordinator i
@Override
public int[] getStressChartParameters() {
return huaweiCoordinator.getStressChartParameters();
// For Huawei devices stress data is provided every 30 minutes. So draw it as bars with delta
return new int[]{1800, 1800, 400};
}
@Override
public DeviceSpecificSettings getDeviceSpecificSettings(final GBDevice device) {
return huaweiCoordinator.getDeviceSpecificSettings(device);
return HuaweiDeviceStateManager.get(device).getDeviceSpecificSettings(device);
}
@Override
@@ -320,16 +317,6 @@ public abstract class HuaweiLECoordinator extends AbstractBLEDeviceCoordinator i
return HuaweiDeviceType.BLE;
}
@Override
public void setDevice(GBDevice device) {
this.device = device;
}
@Override
public GBDevice getDevice() {
return this.device;
}
@NonNull
@Override
public Class<? extends DeviceSupport> getDeviceSupportClass(final GBDevice device) {
@@ -342,11 +329,11 @@ public abstract class HuaweiLECoordinator extends AbstractBLEDeviceCoordinator i
}
public HeartRateZonesSpec getHeartRateZonesSpec(@NonNull GBDevice device) {
return huaweiCoordinator.getHeartRateZonesSpec(device);
return HuaweiDeviceStateManager.get(device).getHeartRateZonesSpec(device);
}
@Override
public boolean supportsNavigation(@NonNull GBDevice device) {
return huaweiCoordinator.supportsNavigation(device);
return HuaweiDeviceStateManager.get(device).supportsNavigation(device);
}
}
@@ -64,11 +64,11 @@ import static nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiConstant
public class HuaweiSettingsCustomizer implements DeviceSpecificSettingsCustomizer {
final GBDevice device;
final HuaweiCoordinator coordinator;
final HuaweiCoordinator deviceState;
public HuaweiSettingsCustomizer(final GBDevice device) {
this.device = device;
this.coordinator = ((HuaweiCoordinatorSupplier) this.device.getDeviceCoordinator()).getHuaweiCoordinator();
this.deviceState = HuaweiDeviceStateManager.get(device);
}
@Override
@@ -103,16 +103,16 @@ public class HuaweiSettingsCustomizer implements DeviceSpecificSettingsCustomize
if (preference.getKey().equals(PREF_FORCE_OPTIONS)) {
final Preference dnd = handler.findPreference("screen_do_not_disturb");
if (dnd != null)
dnd.setVisible(this.coordinator.supportsDoNotDisturb(handler.getDevice()));
dnd.setVisible(this.deviceState.supportsDoNotDisturb(handler.getDevice()));
final ListPreference wearLocation = handler.findPreference(PREF_WEARLOCATION);
if (wearLocation != null)
wearLocation.setVisible(this.coordinator.supportsWearLocation(handler.getDevice()));
wearLocation.setVisible(this.deviceState.supportsWearLocation(handler.getDevice()));
final ListPreference heartRate = handler.findPreference(PREF_HEARTRATE_AUTOMATIC_ENABLE);
if (heartRate != null)
heartRate.setVisible(this.coordinator.supportsHeartRate(handler.getDevice()));
heartRate.setVisible(this.deviceState.supportsHeartRate(handler.getDevice()));
final ListPreference spo2 = handler.findPreference(PREF_SPO_AUTOMATIC_ENABLE);
if (spo2 != null)
spo2.setVisible(this.coordinator.supportsSPo2(handler.getDevice()));
spo2.setVisible(this.deviceState.supportsSPo2(handler.getDevice()));
}
}
@@ -152,10 +152,10 @@ public class HuaweiSettingsCustomizer implements DeviceSpecificSettingsCustomize
final Preference forceOptions = handler.findPreference(PREF_FORCE_OPTIONS);
if (forceOptions != null) {
boolean supportsSmartAlarm = this.coordinator.supportsSmartAlarm();
boolean supportsWearLocation = this.coordinator.supportsWearLocation();
boolean supportsHeartRate = this.coordinator.supportsHeartRate();
boolean supportsSpO2 = this.coordinator.supportsSPo2();
boolean supportsSmartAlarm = this.deviceState.supportsSmartAlarm();
boolean supportsWearLocation = this.deviceState.supportsWearLocation();
boolean supportsHeartRate = this.deviceState.supportsHeartRate();
boolean supportsSpO2 = this.deviceState.supportsSPo2();
forceOptions.setVisible(!supportsSmartAlarm || !supportsWearLocation || !supportsHeartRate || !supportsSpO2);
final SwitchPreferenceCompat forceSmartAlarm = handler.findPreference(PREF_FORCE_ENABLE_SMART_ALARM);
if(forceSmartAlarm != null)
@@ -172,14 +172,14 @@ public class HuaweiSettingsCustomizer implements DeviceSpecificSettingsCustomize
}
final SwitchPreferenceCompat sleepBreath = handler.findPreference(PREF_HUAWEI_SLEEP_BREATH);
if (sleepBreath != null && !(coordinator.supportsSleepBreath() || coordinator.supportsSleepApnea())) {
if (sleepBreath != null && !(deviceState.supportsSleepBreath() || deviceState.supportsSleepApnea())) {
sleepBreath.setVisible(false);
}
final SwitchPreferenceCompat reparseWorkout = handler.findPreference("huawei_reparse_workout_data");
if (reparseWorkout != null) {
reparseWorkout.setVisible(false);
if (this.coordinator.supportsWorkouts())
if (this.deviceState.supportsWorkouts())
reparseWorkout.setVisible(true);
}
@@ -19,7 +19,6 @@ package nodomain.freeyourgadget.gadgetbridge.devices.huawei.freearc;
import androidx.annotation.NonNull;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import java.util.regex.Pattern;
@@ -28,7 +27,6 @@ import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiFreebudsCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiHeadphonesCapabilities;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
import nodomain.freeyourgadget.gadgetbridge.service.DeviceSupport;
import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.HuaweiFreebudsSupport;
@@ -52,11 +50,6 @@ public class HuaweiFreearcCoordinator extends HuaweiFreebudsCoordinator {
return HuaweiFreebudsSupport.class;
}
@Override
public DeviceType getDeviceType() {
return DeviceType.HUAWEI_FREEARC;
}
@Override
public int getDeviceNameResource() {
return R.string.devicetype_huawei_freearc;
@@ -28,7 +28,6 @@ import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiFreebudsCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiHeadphonesCapabilities;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
import nodomain.freeyourgadget.gadgetbridge.service.DeviceSupport;
import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.HuaweiFreebudsSupport;
@@ -53,11 +52,6 @@ public class HuaweiFreebuds5iCoordinator extends HuaweiFreebudsCoordinator {
return HuaweiFreebudsSupport.class;
}
@Override
public DeviceType getDeviceType() {
return DeviceType.HUAWEI_FREEBUDS5I;
}
@Override
public int getDeviceNameResource() {
return R.string.devicetype_huawei_freebuds_5i;
@@ -28,7 +28,6 @@ import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiFreebudsCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiHeadphonesCapabilities;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
import nodomain.freeyourgadget.gadgetbridge.service.DeviceSupport;
import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.HuaweiFreebudsSupport;
@@ -53,11 +52,6 @@ public class HuaweiFreebuds6Coordinator extends HuaweiFreebudsCoordinator {
return HuaweiFreebudsSupport.class;
}
@Override
public DeviceType getDeviceType() {
return DeviceType.HUAWEI_FREEBUDS6;
}
@Override
public int getDeviceNameResource() {
return R.string.devicetype_huawei_freebuds_6;
@@ -28,7 +28,6 @@ import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiFreebudsCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiHeadphonesCapabilities;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
import nodomain.freeyourgadget.gadgetbridge.service.DeviceSupport;
import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.HuaweiFreebudsSupport;
@@ -55,11 +54,6 @@ public class HuaweiFreebudsProCoordinator extends HuaweiFreebudsCoordinator {
return HuaweiFreebudsSupport.class;
}
@Override
public DeviceType getDeviceType() {
return DeviceType.HUAWEI_FREEBUDS_PRO;
}
@Override
public int getDeviceNameResource() {
return R.string.devicetype_huawei_freebuds_pro;
@@ -25,7 +25,6 @@ import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiConstants;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiLECoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
public class HonorBand3Coordinator extends HuaweiLECoordinator {
@Override
@@ -33,11 +32,6 @@ public class HonorBand3Coordinator extends HuaweiLECoordinator {
return "Honor";
}
@Override
public DeviceType getDeviceType() {
return DeviceType.HONORBAND3;
}
@Override
protected Pattern getSupportedDeviceName() {
return Pattern.compile(HuaweiConstants.HO_BAND3_NAME + ".*", Pattern.CASE_INSENSITIVE);
@@ -25,7 +25,6 @@ import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiConstants;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiLECoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
public class HonorBand4Coordinator extends HuaweiLECoordinator {
@Override
@@ -33,11 +32,6 @@ public class HonorBand4Coordinator extends HuaweiLECoordinator {
return "Honor";
}
@Override
public DeviceType getDeviceType() {
return DeviceType.HONORBAND4;
}
@Override
protected Pattern getSupportedDeviceName() {
return Pattern.compile(HuaweiConstants.HO_BAND4_NAME + ".*", Pattern.CASE_INSENSITIVE);
@@ -25,7 +25,6 @@ import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiConstants;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiLECoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
public class HonorBand5Coordinator extends HuaweiLECoordinator {
@Override
@@ -33,11 +32,6 @@ public class HonorBand5Coordinator extends HuaweiLECoordinator {
return "Honor";
}
@Override
public DeviceType getDeviceType() {
return DeviceType.HONORBAND5;
}
@Override
protected Pattern getSupportedDeviceName() {
return Pattern.compile(HuaweiConstants.HO_BAND5_NAME + ".*", Pattern.CASE_INSENSITIVE);
@@ -25,7 +25,6 @@ import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiConstants;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiLECoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
public class HonorBand6Coordinator extends HuaweiLECoordinator {
@Override
@@ -33,11 +32,6 @@ public class HonorBand6Coordinator extends HuaweiLECoordinator {
return "Honor";
}
@Override
public DeviceType getDeviceType() {
return DeviceType.HONORBAND6;
}
@Override
protected Pattern getSupportedDeviceName() {
return Pattern.compile(HuaweiConstants.HO_BAND6_NAME + ".*", Pattern.CASE_INSENSITIVE);
@@ -25,7 +25,6 @@ import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiConstants;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiLECoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
public class HonorBand7Coordinator extends HuaweiLECoordinator {
@Override
@@ -33,11 +32,6 @@ public class HonorBand7Coordinator extends HuaweiLECoordinator {
return "Honor";
}
@Override
public DeviceType getDeviceType() {
return DeviceType.HUAWEIBAND7;
}
@Override
protected Pattern getSupportedDeviceName() {
return Pattern.compile(HuaweiConstants.HO_BAND7_NAME + ".*", Pattern.CASE_INSENSITIVE);
@@ -24,12 +24,11 @@ import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiBRCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiConstants;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
public class HonorMagicWatch2Coordinator extends HuaweiBRCoordinator {
public HonorMagicWatch2Coordinator() {
super();
getHuaweiCoordinator().setTransactionCrypted(false);
@Override
public boolean isTransactionCrypted() {
return false;
}
@Override
@@ -37,11 +36,6 @@ public class HonorMagicWatch2Coordinator extends HuaweiBRCoordinator {
return "Honor";
}
@Override
public DeviceType getDeviceType() {
return DeviceType.HONORMAGICWATCH2;
}
@Override
protected Pattern getSupportedDeviceName() {
return Pattern.compile(HuaweiConstants.HO_MAGICWATCH2_NAME + ".*", Pattern.CASE_INSENSITIVE);
@@ -24,12 +24,11 @@ import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HonorBRCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiConstants;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
public class HonorWatch4Coordinator extends HonorBRCoordinator {
public HonorWatch4Coordinator() {
super();
getHuaweiCoordinator().setTransactionCrypted(false);
@Override
public boolean isTransactionCrypted() {
return false;
}
@Override
@@ -37,11 +36,6 @@ public class HonorWatch4Coordinator extends HonorBRCoordinator {
return "Honor";
}
@Override
public DeviceType getDeviceType() {
return DeviceType.HONORWATCH4;
}
@Override
protected Pattern getSupportedDeviceName() {
return Pattern.compile("(" + HuaweiConstants.HO_WATCH4_NAME + "|" + HuaweiConstants.HO_WATCH4PRO_NAME + ").*", Pattern.CASE_INSENSITIVE);
@@ -24,12 +24,11 @@ import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiBRCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiConstants;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
public class HonorWatchGS3Coordinator extends HuaweiBRCoordinator {
public HonorWatchGS3Coordinator() {
super();
getHuaweiCoordinator().setTransactionCrypted(false);
@Override
public boolean isTransactionCrypted() {
return false;
}
@Override
@@ -37,11 +36,6 @@ public class HonorWatchGS3Coordinator extends HuaweiBRCoordinator {
return "Honor";
}
@Override
public DeviceType getDeviceType() {
return DeviceType.HONORWATCHGS3;
}
@Override
protected Pattern getSupportedDeviceName() {
return Pattern.compile(HuaweiConstants.HO_WATCHGS3_NAME + ".*", Pattern.CASE_INSENSITIVE);
@@ -24,12 +24,11 @@ import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiBRCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiConstants;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
public class HonorWatchGSProCoordinator extends HuaweiBRCoordinator {
public HonorWatchGSProCoordinator() {
super();
getHuaweiCoordinator().setTransactionCrypted(false);
@Override
public boolean isTransactionCrypted() {
return false;
}
@Override
@@ -37,11 +36,6 @@ public class HonorWatchGSProCoordinator extends HuaweiBRCoordinator {
return "Honor";
}
@Override
public DeviceType getDeviceType() {
return DeviceType.HONORWATCHGSPRO;
}
@Override
protected Pattern getSupportedDeviceName() {
return Pattern.compile(HuaweiConstants.HO_WATCHGSPRO_NAME + ".*", Pattern.CASE_INSENSITIVE);
@@ -25,7 +25,6 @@ import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiConstants;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiLECoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
public class HuaweiBand10Coordinator extends HuaweiLECoordinator {
@Override
@@ -33,11 +32,6 @@ public class HuaweiBand10Coordinator extends HuaweiLECoordinator {
return true;
}
@Override
public DeviceType getDeviceType() {
return DeviceType.HUAWEIBAND10;
}
@Override
protected Pattern getSupportedDeviceName() {
return Pattern.compile(HuaweiConstants.HU_BAND10_NAME + ".*", Pattern.CASE_INSENSITIVE);
@@ -25,14 +25,8 @@ import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiConstants;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiLECoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
public class HuaweiBand2ProCoordinator extends HuaweiLECoordinator {
@Override
public DeviceType getDeviceType() {
return DeviceType.HUAWEIBAND2PRO;
}
@Override
protected Pattern getSupportedDeviceName() {
return Pattern.compile("(" + HuaweiConstants.HU_BAND2_NAME + "|" + HuaweiConstants.HU_BAND2PRO_NAME + ").*", Pattern.CASE_INSENSITIVE);
@@ -25,14 +25,8 @@ import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiConstants;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiLECoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
public class HuaweiBand3ProCoordinator extends HuaweiLECoordinator {
@Override
public DeviceType getDeviceType() {
return DeviceType.HUAWEIBAND3PRO;
}
@Override
protected Pattern getSupportedDeviceName() {
return Pattern.compile("(" + HuaweiConstants.HU_BAND3_NAME + "|" + HuaweiConstants.HU_BAND3PRO_NAME + ").*", Pattern.CASE_INSENSITIVE);
@@ -25,14 +25,8 @@ import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiConstants;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiLECoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
public class HuaweiBand4ProCoordinator extends HuaweiLECoordinator {
@Override
public DeviceType getDeviceType() {
return DeviceType.HUAWEIBAND4PRO;
}
@Override
protected Pattern getSupportedDeviceName() {
return Pattern.compile("(" + HuaweiConstants.HU_BAND4_NAME + "|" + HuaweiConstants.HU_BAND4PRO_NAME + ").*", Pattern.CASE_INSENSITIVE);
@@ -25,14 +25,8 @@ import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiConstants;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiLECoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
public class HuaweiBand6Coordinator extends HuaweiLECoordinator {
@Override
public DeviceType getDeviceType() {
return DeviceType.HUAWEIBAND6;
}
@Override
protected Pattern getSupportedDeviceName() {
return Pattern.compile(HuaweiConstants.HU_BAND6_NAME + ".*", Pattern.CASE_INSENSITIVE);
@@ -25,14 +25,8 @@ import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiConstants;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiLECoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
public class HuaweiBand7Coordinator extends HuaweiLECoordinator {
@Override
public DeviceType getDeviceType() {
return DeviceType.HUAWEIBAND7;
}
@Override
protected Pattern getSupportedDeviceName() {
return Pattern.compile(HuaweiConstants.HU_BAND7_NAME + ".*", Pattern.CASE_INSENSITIVE);
@@ -25,14 +25,8 @@ import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiConstants;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiLECoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
public class HuaweiBand8Coordinator extends HuaweiLECoordinator {
@Override
public DeviceType getDeviceType() {
return DeviceType.HUAWEIBAND8;
}
@Override
protected Pattern getSupportedDeviceName() {
return Pattern.compile(HuaweiConstants.HU_BAND8_NAME + ".*", Pattern.CASE_INSENSITIVE);
@@ -25,7 +25,6 @@ import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiConstants;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiLECoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
public class HuaweiBand9Coordinator extends HuaweiLECoordinator {
@Override
@@ -33,11 +32,6 @@ public class HuaweiBand9Coordinator extends HuaweiLECoordinator {
return true;
}
@Override
public DeviceType getDeviceType() {
return DeviceType.HUAWEIBAND9;
}
@Override
protected Pattern getSupportedDeviceName() {
return Pattern.compile(HuaweiConstants.HU_BAND9_NAME + ".*", Pattern.CASE_INSENSITIVE);
@@ -25,14 +25,8 @@ import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiConstants;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiLECoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
public class HuaweiBandAw70Coordinator extends HuaweiLECoordinator {
@Override
public DeviceType getDeviceType() {
return DeviceType.HUAWEIBANDAW70;
}
@Override
protected Pattern getSupportedDeviceName() {
return Pattern.compile("(" + HuaweiConstants.HU_BAND3E_NAME + "|" + HuaweiConstants.HU_BAND4E_NAME + ").*", Pattern.CASE_INSENSITIVE);
@@ -25,17 +25,11 @@ import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiBRCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiConstants;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
public class HuaweiTalkBandB6Coordinator extends HuaweiBRCoordinator {
public HuaweiTalkBandB6Coordinator() {
super();
getHuaweiCoordinator().setTransactionCrypted(false);
}
@Override
public DeviceType getDeviceType() {
return DeviceType.HUAWEITALKBANDB6;
public boolean isTransactionCrypted() {
return false;
}
@Override
@@ -24,14 +24,8 @@ import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiBRCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiConstants;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
public class HuaweiWatch3Coordinator extends HuaweiBRCoordinator {
@Override
public DeviceType getDeviceType() {
return DeviceType.HUAWEIWATCH3;
}
@Override
protected Pattern getSupportedDeviceName() {
return Pattern.compile("(" + HuaweiConstants.HU_WATCH3_NAME + "|" + HuaweiConstants.HU_WATCH3PRO_NAME + ").*", Pattern.CASE_INSENSITIVE);
@@ -24,19 +24,8 @@ import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiBRCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiConstants;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
public class HuaweiWatch4ProCoordinator extends HuaweiBRCoordinator {
public HuaweiWatch4ProCoordinator() {
super();
getHuaweiCoordinator().setTransactionCrypted(true);
}
@Override
public DeviceType getDeviceType() {
return DeviceType.HUAWEIWATCH4PRO;
}
@Override
protected Pattern getSupportedDeviceName() {
return Pattern.compile("(" + HuaweiConstants.HU_WATCH4_NAME + "|" + HuaweiConstants.HU_WATCH4PRO_NAME + ").*", Pattern.CASE_INSENSITIVE);
@@ -24,24 +24,13 @@ import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiBRCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiConstants;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
public class HuaweiWatch5Coordinator extends HuaweiBRCoordinator {
public HuaweiWatch5Coordinator() {
super();
getHuaweiCoordinator().setTransactionCrypted(true);
}
@Override
public boolean isExperimental() {
return true;
}
@Override
public DeviceType getDeviceType() {
return DeviceType.HUAWEIWATCH5;
}
@Override
protected Pattern getSupportedDeviceName() {
return Pattern.compile("(" + HuaweiConstants.HU_WATCH5_NAME + ").*", Pattern.CASE_INSENSITIVE);
@@ -24,14 +24,8 @@ import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiBRCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiConstants;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
public class HuaweiWatchD2Coordinator extends HuaweiBRCoordinator {
@Override
public DeviceType getDeviceType() {
return DeviceType.HUAWEIWATCHD2;
}
@Override
protected Pattern getSupportedDeviceName() {
return Pattern.compile("(" + HuaweiConstants.HU_WATCHD2_NAME + ").*", Pattern.CASE_INSENSITIVE);
@@ -24,14 +24,8 @@ import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiConstants;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiLECoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
public class HuaweiWatchFitCoordinator extends HuaweiLECoordinator {
@Override
public DeviceType getDeviceType() {
return DeviceType.HUAWEIWATCHFIT;
}
@Override
protected Pattern getSupportedDeviceName() {
return Pattern.compile(HuaweiConstants.HU_WATCHFIT_NAME + ".*", Pattern.CASE_INSENSITIVE);
@@ -24,19 +24,8 @@ import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiBRCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiConstants;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
public class HuaweiWatchFit2Coordinator extends HuaweiBRCoordinator {
public HuaweiWatchFit2Coordinator() {
super();
getHuaweiCoordinator().setTransactionCrypted(true);
}
@Override
public DeviceType getDeviceType() {
return DeviceType.HUAWEIWATCHFIT2;
}
@Override
protected Pattern getSupportedDeviceName() {
return Pattern.compile("(" + HuaweiConstants.HU_WATCHFIT2_NAME + ").*", Pattern.CASE_INSENSITIVE);
@@ -24,24 +24,13 @@ import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiBRCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiConstants;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
public class HuaweiWatchFit3Coordinator extends HuaweiBRCoordinator {
public HuaweiWatchFit3Coordinator() {
super();
getHuaweiCoordinator().setTransactionCrypted(true);
}
@Override
public boolean isExperimental() {
return true;
}
@Override
public DeviceType getDeviceType() {
return DeviceType.HUAWEIWATCHFIT3;
}
@Override
protected Pattern getSupportedDeviceName() {
return Pattern.compile("(" + HuaweiConstants.HU_WATCHFIT3_NAME + ").*", Pattern.CASE_INSENSITIVE);
@@ -24,24 +24,13 @@ import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiBRCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiConstants;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
public class HuaweiWatchFit4ProCoordinator extends HuaweiBRCoordinator {
public HuaweiWatchFit4ProCoordinator() {
super();
getHuaweiCoordinator().setTransactionCrypted(true);
}
@Override
public boolean isExperimental() {
return true;
}
@Override
public DeviceType getDeviceType() {
return DeviceType.HUAWEIWATCHFIT4PRO;
}
@Override
protected Pattern getSupportedDeviceName() {
return Pattern.compile("(" + HuaweiConstants.HU_WATCHFIT4_NAME + "|" + HuaweiConstants.HU_WATCHFIT4PRO_NAME + ").*", Pattern.CASE_INSENSITIVE);
@@ -24,14 +24,8 @@ import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiConstants;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiLECoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
public class HuaweiWatchGTCoordinator extends HuaweiLECoordinator {
@Override
public DeviceType getDeviceType() {
return DeviceType.HUAWEIWATCHGT;
}
@Override
protected Pattern getSupportedDeviceName() {
return Pattern.compile(HuaweiConstants.HU_WATCHGT_NAME + ".*", Pattern.CASE_INSENSITIVE);
@@ -24,14 +24,8 @@ import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiBRCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiConstants;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
public class HuaweiWatchGT2Coordinator extends HuaweiBRCoordinator {
@Override
public DeviceType getDeviceType() {
return DeviceType.HUAWEIWATCHGT2;
}
@Override
protected Pattern getSupportedDeviceName() {
return Pattern.compile("(" + HuaweiConstants.HU_WATCHGT2_NAME + "|" + HuaweiConstants.HU_WATCHGT2PRO_NAME + ").*", Pattern.CASE_INSENSITIVE);
@@ -24,14 +24,8 @@ import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiConstants;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiLECoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
public class HuaweiWatchGT2eCoordinator extends HuaweiLECoordinator {
@Override
public DeviceType getDeviceType() {
return DeviceType.HUAWEIWATCHGT2E;
}
@Override
protected Pattern getSupportedDeviceName() {
return Pattern.compile(HuaweiConstants.HU_WATCHGT2E_NAME + ".*", Pattern.CASE_INSENSITIVE);
@@ -24,14 +24,8 @@ import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiBRCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiConstants;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
public class HuaweiWatchGT3Coordinator extends HuaweiBRCoordinator {
@Override
public DeviceType getDeviceType() {
return DeviceType.HUAWEIWATCHGT3;
}
@Override
protected Pattern getSupportedDeviceName() {
return Pattern.compile("(" + HuaweiConstants.HU_WATCHGT3_NAME + "|" + HuaweiConstants.HU_WATCHGT3PRO_NAME + "|" + HuaweiConstants.HU_WATCHGT3SE_NAME + ").*", Pattern.CASE_INSENSITIVE);
@@ -24,19 +24,8 @@ import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiBRCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiConstants;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
public class HuaweiWatchGT4Coordinator extends HuaweiBRCoordinator {
public HuaweiWatchGT4Coordinator() {
super();
getHuaweiCoordinator().setTransactionCrypted(true);
}
@Override
public DeviceType getDeviceType() {
return DeviceType.HUAWEIWATCHGT4;
}
@Override
protected Pattern getSupportedDeviceName() {
return Pattern.compile("(" + HuaweiConstants.HU_WATCHGT4_NAME + ").*", Pattern.CASE_INSENSITIVE);
@@ -24,14 +24,8 @@ import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiBRCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiConstants;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
public class HuaweiWatchGT5Coordinator extends HuaweiBRCoordinator {
@Override
public DeviceType getDeviceType() {
return DeviceType.HUAWEIWATCHGT5;
}
@Override
protected Pattern getSupportedDeviceName() {
return Pattern.compile("(" + HuaweiConstants.HU_WATCHGT5_NAME + "|" + HuaweiConstants.HU_WATCHGT5PRO_NAME + ").*", Pattern.CASE_INSENSITIVE);
@@ -24,15 +24,9 @@ import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiBRCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiConstants;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
/// #5428
public class HuaweiWatchGT6Coordinator extends HuaweiBRCoordinator {
@Override
public DeviceType getDeviceType() {
return DeviceType.HUAWEIWATCHGT6;
}
@Override
protected Pattern getSupportedDeviceName() {
return Pattern.compile("(" + HuaweiConstants.HU_WATCHGT6_NAME + "|" + HuaweiConstants.HU_WATCHGT6PRO_NAME + ").*", Pattern.CASE_INSENSITIVE);
@@ -24,14 +24,8 @@ import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiBRCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiConstants;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
public class HuaweiWatchGTCyberCoordinator extends HuaweiBRCoordinator {
@Override
public DeviceType getDeviceType() {
return DeviceType.HUAWEIWATCHGTCYBER;
}
@Override
protected Pattern getSupportedDeviceName() {
return Pattern.compile("(" + HuaweiConstants.HU_WATCHGTCYBER_NAME + ").*", Pattern.CASE_INSENSITIVE);
@@ -24,14 +24,8 @@ import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiBRCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiConstants;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
public class HuaweiWatchGTRunnerCoordinator extends HuaweiBRCoordinator {
@Override
public DeviceType getDeviceType() {
return DeviceType.HUAWEIWATCHGTRUNNER;
}
@Override
protected Pattern getSupportedDeviceName() {
return Pattern.compile("(" + HuaweiConstants.HU_WATCHGTRUNNER_NAME + ").*", Pattern.CASE_INSENSITIVE);
@@ -24,19 +24,8 @@ import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiBRCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiConstants;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
public class HuaweiWatchUltimateCoordinator extends HuaweiBRCoordinator {
public HuaweiWatchUltimateCoordinator() {
super();
getHuaweiCoordinator().setTransactionCrypted(true);
}
@Override
public DeviceType getDeviceType() {
return DeviceType.HUAWEIWATCHULTIMATE;
}
@Override
protected Pattern getSupportedDeviceName() {
return Pattern.compile("(" + HuaweiConstants.HU_WATCHULTIMATE_NAME + ").*", Pattern.CASE_INSENSITIVE);
@@ -91,7 +91,7 @@ public class HuaweiAppManager {
}
public void requestAppList() {
if (!this.support.getHuaweiCoordinator().supportsAppParams())
if (!this.support.getDeviceState().supportsAppParams())
return;
try {
GetAppNames getAppNames = new GetAppNames(support);
@@ -61,7 +61,7 @@ public class HuaweiBRSupport extends AbstractBTBRDeviceSupport {
@Override
public void setContext(GBDevice gbDevice, BluetoothAdapter btAdapter, Context context) {
super.setContext(gbDevice, btAdapter, context);
supportProvider.setContext(context);
supportProvider.setContext(gbDevice, context);
}
@Override
@@ -85,7 +85,7 @@ public class HuaweiDataSyncManager {
}
public boolean sendConfigCommand(String srcPackage, String dstPackage, HuaweiDataSyncCommon.ConfigCommandData data) {
if(!this.support.getHuaweiCoordinator().supportsDeviceCommandConfig()) {
if(!this.support.getDeviceState().supportsDeviceCommandConfig()) {
LOG.info("sendConfigCommand is not supported");
return false;
}
@@ -100,7 +100,7 @@ public class HuaweiDataSyncManager {
}
public boolean sendEventCommand(String srcPackage, String dstPackage, HuaweiDataSyncCommon.EventCommandData data) {
if(!this.support.getHuaweiCoordinator().supportsDeviceCommandEvent()) {
if(!this.support.getDeviceState().supportsDeviceCommandEvent()) {
LOG.info("sendEventCommand is not supported");
return false;
}
@@ -115,7 +115,7 @@ public class HuaweiDataSyncManager {
}
public boolean sendDataCommand(String srcPackage, String dstPackage, HuaweiDataSyncCommon.DataCommandData data) {
if(!this.support.getHuaweiCoordinator().supportsDeviceCommandData()) {
if(!this.support.getDeviceState().supportsDeviceCommandData()) {
LOG.info("sendDataCommand is not supported");
return false;
}
@@ -130,7 +130,7 @@ public class HuaweiDataSyncManager {
}
public boolean sendDictDataCommand(String srcPackage, String dstPackage, HuaweiDataSyncCommon.DictDataCommandData data) {
if(!this.support.getHuaweiCoordinator().supportsDeviceCommandDictData()) {
if(!this.support.getDeviceState().supportsDeviceCommandDictData()) {
LOG.info("sendDictDataCommand is not supported");
return false;
}
@@ -82,8 +82,6 @@ public class HuaweiFreebudsSupport extends HuaweiBRSupport implements HeadphoneH
protected TransactionBuilder initializeDevice(TransactionBuilder builder) {
LOG.info("Huawei Freebuds init");
super.getSupportProvider().setup(getDevice(), getContext());
builder.setDeviceState(GBDevice.State.INITIALIZING);
try {
builder.setCallback(this);
@@ -66,7 +66,7 @@ public class HuaweiLESupport extends AbstractBTLESingleDeviceSupport {
@Override
public void setContext(GBDevice gbDevice, BluetoothAdapter btAdapter, Context context) {
super.setContext(gbDevice, btAdapter, context);
supportProvider.setContext(context);
supportProvider.setContext(gbDevice, context);
}
@Override
@@ -97,7 +97,7 @@ public class HuaweiMusicManager {
return;
}
int count = this.frameCount;
if (support.getHuaweiCoordinator().supportsMoreMusic()) {
if (support.getDeviceState().supportsMoreMusic()) {
count = Math.min(this.frameCount, 250);
}
if (this.currentFrame < count) {
@@ -200,7 +200,7 @@ public class HuaweiMusicManager {
//TODO: research and use pageStruct. It may/should be used to retrieve music data from devices by pages.
// without it list can be incomplete, but I can't confirm this.
LOG.info("FrameCount: {}, pageStruct: {}", frameCount, pageStruct);
support.getHuaweiCoordinator().setMusicInfoParams(capabilities);
support.getDeviceState().setMusicInfoParams(capabilities);
if(syncMusicData) {
this.frameCount = frameCount;
this.currentFrame = 0;
@@ -210,8 +210,8 @@ public class HuaweiMusicManager {
formats = String.join(",", capabilities.supportedFormats);
}
int maxPlaylistCount = 0;
if(support.getCoordinator().getHuaweiCoordinator().getExtendedMusicInfoParams() != null) {
maxPlaylistCount = support.getCoordinator().getHuaweiCoordinator().getExtendedMusicInfoParams().maxPlaylistCount;
if(support.getDeviceState().getExtendedMusicInfoParams() != null) {
maxPlaylistCount = support.getDeviceState().getExtendedMusicInfoParams().maxPlaylistCount;
}
sendMusicSyncStart(support.getContext().getString(R.string.music_huawei_device_info, formats, capabilities.availableSpace), capabilities.maxMusicCount, maxPlaylistCount);
syncMusicList();
@@ -250,7 +250,7 @@ public class HuaweiMusicManager {
public void onMusicListResponse(int startFrame, int endFrame, List<GBDeviceMusic> list) {
sendMusicList(list);
if (support.getHuaweiCoordinator().supportsMoreMusic() || !(endFrame == this.endFrame || list.size() == 1)) {
if (support.getDeviceState().supportsMoreMusic() || !(endFrame == this.endFrame || list.size() == 1)) {
if (list.size() == 2) {
this.endFrame = list.get(1).getId();
}
@@ -88,7 +88,7 @@ public class HuaweiNotificationsManager {
}
public void onDeleteNotification(int id) {
if (!support.getHuaweiCoordinator().supportsNotificationsRepeatedNotify() && !support.getHuaweiCoordinator().supportsNotificationsRemoveSingle()) {
if (!support.getDeviceState().supportsNotificationsRepeatedNotify() && !support.getDeviceState().supportsNotificationsRemoveSingle()) {
LOG.info("Delete notification is not supported");
return;
}
@@ -122,7 +122,7 @@ public class HuaweiNotificationsManager {
void onReplyResponse(Notifications.NotificationReply.ReplyResponse response) {
LOG.info(" KEY: {}, Text: {}", response.key, response.text);
if(!this.support.getHuaweiCoordinator().supportsNotificationsReplyActions()) {
if(!this.support.getDeviceState().supportsNotificationsReplyActions()) {
LOG.info("Reply is not supported");
return;
}
@@ -154,14 +154,14 @@ public class HuaweiOTAManager {
cleanup();
return;
}
if (!support.getHuaweiCoordinator().supportsOTAUpdate()) {
if (!support.getDeviceState().supportsOTAUpdate()) {
LOG.info("OTA update is not supported");
cleanup();
return;
}
setDeviceBusy();
if (support.getHuaweiCoordinator().supportsOTANotify()) {
if (support.getDeviceState().supportsOTANotify()) {
try {
SendOTANotifyNewVersion notifyNewVersion = new SendOTANotifyNewVersion(support, this.fwInfo.versionName, this.fwInfo.size, (byte) 1, (byte) 2);
notifyNewVersion.doPerform();
@@ -181,7 +181,7 @@ public class HuaweiOTAManager {
private void startFWCheck(HuaweiOTAFileList.OTAFileInfo fwInfo, Uri uri) {
downloadProgress = 0;
if (support.getHuaweiCoordinator().supportsOTADeviceRequest()) {
if (support.getDeviceState().supportsOTADeviceRequest()) {
try {
SendOTAProgress progressReq = new SendOTAProgress(support, (byte) 0, (byte) 0, (byte) 0);
progressReq.doPerform();
@@ -298,8 +298,8 @@ public class HuaweiOTAManager {
int data = buffer.getInt();
int signature = 256;
if (support.getHuaweiCoordinator().supportsOTASignature()) {
signature = support.getHuaweiCoordinator().getOtaSignatureLength();
if (support.getDeviceState().supportsOTASignature()) {
signature = support.getDeviceState().getOtaSignatureLength();
}
LOG.info("data: {}, signature: {}", data, signature);
return (short) (data + signature);
@@ -354,7 +354,7 @@ public class HuaweiOTAManager {
public void onFwCheckFail() {
LOG.info("onFwCheckFail");
if (support.getHuaweiCoordinator().supportsOTADeviceRequest()) {
if (support.getDeviceState().supportsOTADeviceRequest()) {
try {
SendOTAProgress progressReq = new SendOTAProgress(support, (byte) downloadProgress, (byte) 2, (byte) 0);
progressReq.doPerform();
@@ -375,7 +375,7 @@ public class HuaweiOTAManager {
this.state = 3;
if (support.getHuaweiCoordinator().supportsOTADeviceRequest()) {
if (support.getDeviceState().supportsOTADeviceRequest()) {
try {
SendOTAGetMode sendOTAGetMode = new SendOTAGetMode(support);
sendOTAGetMode.doPerform();
@@ -391,7 +391,7 @@ public class HuaweiOTAManager {
public void onFwCheckProgress(int val) {
LOG.info("onFwCheckProgress: {}", val);
downloadProgress = val;
if (support.getHuaweiCoordinator().supportsOTADeviceRequest()) {
if (support.getDeviceState().supportsOTADeviceRequest()) {
try {
SendOTAProgress progressReq = new SendOTAProgress(support, (byte) downloadProgress, (byte) 1, (byte) 0);
progressReq.doPerform();
@@ -413,7 +413,7 @@ public class HuaweiOTAManager {
}
if (this.state == 1) {
this.state = 2;
if (support.getHuaweiCoordinator().supportsOTANotify()) {
if (support.getDeviceState().supportsOTANotify()) {
try {
SendOTANotifyNewVersion notifyNewVersion = new SendOTANotifyNewVersion(support, fwInfo.versionName, fwInfo.size, (byte) 1, (byte) 0);
notifyNewVersion.doPerform();
@@ -533,7 +533,7 @@ public class HuaweiOTAManager {
return;
}
if (this.state == 1) {
if (support.getHuaweiCoordinator().supportsOTAUpdate()) {
if (support.getDeviceState().supportsOTAUpdate()) {
try {
SendOTAStartQuery sendOTAStartQuery = new SendOTAStartQuery(support, fwInfo.versionName, (short) 256, (byte) 2, false);
sendOTAStartQuery.doPerform();
@@ -66,10 +66,11 @@ import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventDisplayMes
import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiCompatTemperatureSampleProvider;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiConstants;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiCoordinatorSupplier;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiCoordinator;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiCoordinatorSupplier.HuaweiDeviceType;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiCrypto;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiDeviceStateManager;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiDictTypes;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiEcgFileParser;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiGpsParser;
@@ -336,8 +337,8 @@ public class HuaweiSupportProvider {
return ((HuaweiCoordinatorSupplier) this.gbDevice.getDeviceCoordinator());
}
public HuaweiCoordinator getHuaweiCoordinator() {
return getCoordinator().getHuaweiCoordinator();
public HuaweiCoordinator getDeviceState() {
return HuaweiDeviceStateManager.get(getDevice());
}
public HuaweiUploadManager getUploadManager() {
@@ -388,7 +389,11 @@ public class HuaweiSupportProvider {
this.leSupport = support;
}
public void setContext(Context context) {
public void setContext(GBDevice device, Context context) {
this.gbDevice = device;
this.context = context;
this.huaweiType = getCoordinator().getHuaweiType();
this.paramsProvider.setTransactionsCrypted(getCoordinator().isTransactionCrypted());
mediaManager = new MediaManager(context);
}
@@ -472,11 +477,10 @@ public class HuaweiSupportProvider {
this.gbDevice = device;
this.context = context;
this.huaweiType = getCoordinator().getHuaweiType();
this.paramsProvider.setTransactionsCrypted(this.getHuaweiCoordinator().isTransactionCrypted());
this.paramsProvider.setTransactionsCrypted(getCoordinator().isTransactionCrypted());
}
protected nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder initializeDevice(nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder builder) {
setup(leSupport.getDevice(), leSupport.getContext());
builder.setCallback(leSupport);
final BluetoothGattCharacteristic characteristicRead = leSupport.getCharacteristic(HuaweiConstants.UUID_CHARACTERISTIC_HUAWEI_READ);
if (characteristicRead == null) {
@@ -488,17 +492,14 @@ public class HuaweiSupportProvider {
builder.setDeviceState(GBDevice.State.AUTHENTICATING);
final GetLinkParamsRequest linkParamsReq = new GetLinkParamsRequest(this, builder);
initializeDevice(linkParamsReq);
getCoordinator().setDevice(this.gbDevice);
return builder;
}
protected nodomain.freeyourgadget.gadgetbridge.service.btbr.TransactionBuilder initializeDevice(nodomain.freeyourgadget.gadgetbridge.service.btbr.TransactionBuilder builder) {
setup(brSupport.getDevice(), brSupport.getContext());
builder.setCallback(brSupport);
builder.setDeviceState(GBDevice.State.AUTHENTICATING);
final GetLinkParamsRequest linkParamsReq = new GetLinkParamsRequest(this, builder);
initializeDevice(linkParamsReq);
getCoordinator().setDevice(this.gbDevice);
return builder;
}
@@ -877,36 +878,36 @@ public class HuaweiSupportProvider {
try {
// NOTE: register all DAta Sync handlers on the early stage. We can receive requests from the watch during initialization.
if (getHuaweiCoordinator().getSendCountryCodeEnabled(getDevice())) {
if (getDeviceState().getSendCountryCodeEnabled(getDevice())) {
huaweiDataSyncFeatureManager = new HuaweiDataSyncFeatureManager(HuaweiSupportProvider.this);
}
if (getHuaweiCoordinator().supportsNotificationPicture()) {
if (getDeviceState().supportsNotificationPicture()) {
huaweiDataSyncNotificationPictures = new HuaweiDataSyncNotificationPictures(HuaweiSupportProvider.this);
}
if (getHuaweiCoordinator().supportsThreeCircle() || getHuaweiCoordinator().supportsThreeCircleLite()) {
if (getDeviceState().supportsThreeCircle() || getDeviceState().supportsThreeCircleLite()) {
huaweiDataSyncTreeCircleGoals = new HuaweiDataSyncGoals(HuaweiSupportProvider.this);
}
if (getHuaweiCoordinator().supportsFindDeviceAbility()) {
if (getDeviceState().supportsFindDeviceAbility()) {
huaweiDataSyncFindDevice = new HuaweiDataSyncFindDevice(HuaweiSupportProvider.this);
}
if (getHuaweiCoordinator().supportsEmotion()) {
if (getDeviceState().supportsEmotion()) {
huaweiDataSyncEmotion = new HuaweiDataSyncEmotion(HuaweiSupportProvider.this);
}
if (getHuaweiCoordinator().supportsArrhythmia() && getHuaweiCoordinator().isShowForceCountrySpecificFeatures(getCoordinator().getDevice())) {
if (getDeviceState().supportsArrhythmia() && getDeviceState().isShowForceCountrySpecificFeatures(getDevice())) {
huaweiDataSyncArrhythmia = new HuaweiDataSyncArrhythmia(HuaweiSupportProvider.this);
}
if (getHuaweiCoordinator().supportsECG() && getHuaweiCoordinator().isShowForceCountrySpecificFeatures(getCoordinator().getDevice())) {
if (getDeviceState().supportsECG() && getDeviceState().isShowForceCountrySpecificFeatures(getDevice())) {
huaweiDataSyncEcg = new HuaweiDataSyncEcg(HuaweiSupportProvider.this);
}
if (getHuaweiCoordinator().supportsSleepApnea()) {
if (getDeviceState().supportsSleepApnea()) {
huaweiDataSyncSleepApnea = new HuaweiDataSyncSleepApnea(HuaweiSupportProvider.this);
}
if (getHuaweiCoordinator().supportsArterialStiffnessDetection()) {
if (getDeviceState().supportsArterialStiffnessDetection()) {
huaweiDataSyncArterialStiffnessDetection = new HuaweiDataSyncArterialStiffnessDetection(HuaweiSupportProvider.this);
}
@@ -962,7 +963,7 @@ public class HuaweiSupportProvider {
// Setup the alarms if necessary
if (!getHuaweiCoordinator().supportsChangingAlarm() && firstConnection)
if (!getDeviceState().supportsChangingAlarm() && firstConnection)
initializeAlarms();
// Queue all the requests
@@ -981,20 +982,20 @@ public class HuaweiSupportProvider {
public void call() {
gbDevice.setUpdateState(GBDevice.State.INITIALIZED, getContext());
if (getHuaweiCoordinator().supportsP2PService()) {
if (getHuaweiCoordinator().supportsCalendar()) {
if (getDeviceState().supportsP2PService()) {
if (getDeviceState().supportsCalendar()) {
if (HuaweiP2PCalendarService.getRegisteredInstance(huaweiP2PManager) == null) {
HuaweiP2PCalendarService calendarService = new HuaweiP2PCalendarService(huaweiP2PManager);
calendarService.register();
}
}
if (getHuaweiCoordinator().supportsTrack()) {
if (getDeviceState().supportsTrack()) {
if (HuaweiP2PTrackService.getRegisteredInstance(huaweiP2PManager) == null) {
HuaweiP2PTrackService trackService = new HuaweiP2PTrackService(huaweiP2PManager);
trackService.register();
}
}
if (getHuaweiCoordinator().supportsCannedReplies()) {
if (getDeviceState().supportsCannedReplies()) {
if (HuaweiP2PCannedRepliesService.getRegisteredInstance(huaweiP2PManager) == null) {
HuaweiP2PCannedRepliesService cannedRepliesService = new HuaweiP2PCannedRepliesService(huaweiP2PManager);
cannedRepliesService.register();
@@ -1004,13 +1005,13 @@ public class HuaweiSupportProvider {
HuaweiP2PDataDictionarySyncService trackService = new HuaweiP2PDataDictionarySyncService(huaweiP2PManager);
trackService.register();
}
if (getHuaweiCoordinator().supportsNotificationsAddIconTimestamp()) {
if (getDeviceState().supportsNotificationsAddIconTimestamp()) {
if (HuaweiP2PAppIcon.getRegisteredInstance(huaweiP2PManager) == null) {
HuaweiP2PAppIcon appIconService = new HuaweiP2PAppIcon(huaweiP2PManager);
appIconService.register();
}
}
if (getHuaweiCoordinator().supportsContactsSync()) {
if (getDeviceState().supportsContactsSync()) {
if (HuaweiP2PContactsService.getRegisteredInstance(huaweiP2PManager) == null) {
HuaweiP2PContactsService contactsService = new HuaweiP2PContactsService(huaweiP2PManager);
contactsService.register();
@@ -1078,14 +1079,14 @@ public class HuaweiSupportProvider {
}
private void getAlarms() {
if (!getHuaweiCoordinator().supportsChangingAlarm())
if (!getDeviceState().supportsChangingAlarm())
return;
GetEventAlarmList getEventAlarmList = new GetEventAlarmList(this);
getEventAlarmList.setFinalizeReq(new RequestCallback() {
@Override
public void call() {
if (!getHuaweiCoordinator().supportsSmartAlarm(getDevice()))
if (!getDeviceState().supportsSmartAlarm(getDevice()))
return; // Don't get smart alarms when not supported
GetSmartAlarmList getSmartAlarmList = new GetSmartAlarmList(HuaweiSupportProvider.this);
@@ -1621,7 +1622,7 @@ public class HuaweiSupportProvider {
if (P2PSyncService == null) {
return;
}
Map<Integer, HuaweiDictionarySyncInterface> sup = P2PSyncService.getAllSupported(this.getHuaweiCoordinator());
Map<Integer, HuaweiDictionarySyncInterface> sup = P2PSyncService.getAllSupported(this.getDeviceState());
if (sup.isEmpty()) {
return;
}
@@ -1808,7 +1809,7 @@ public class HuaweiSupportProvider {
}
public void onSetAlarms(ArrayList<? extends nodomain.freeyourgadget.gadgetbridge.model.Alarm> alarms) {
boolean smartAlarmEnabled = getHuaweiCoordinator().supportsSmartAlarm(getDevice());
boolean smartAlarmEnabled = getDeviceState().supportsSmartAlarm(getDevice());
AlarmsRequest smartAlarmReq = new AlarmsRequest(this, true);
AlarmsRequest eventAlarmReq = new AlarmsRequest(this, false);
@@ -1830,7 +1831,7 @@ public class HuaweiSupportProvider {
}
public void onSetCallState(CallSpec callSpec) {
if (callSpec.command == CallSpec.CALL_INCOMING || (callSpec.command == CallSpec.CALL_OUTGOING && getHuaweiCoordinator().supportsOutgoingCall())) {
if (callSpec.command == CallSpec.CALL_INCOMING || (callSpec.command == CallSpec.CALL_OUTGOING && getDeviceState().supportsOutgoingCall())) {
SendNotificationRequest sendNotificationReq = new SendNotificationRequest(this);
try {
sendNotificationReq.buildNotificationTLVFromCallSpec(callSpec);
@@ -1841,7 +1842,7 @@ public class HuaweiSupportProvider {
} else if (
callSpec.command == CallSpec.CALL_ACCEPT ||
callSpec.command == CallSpec.CALL_START) {
byte type = getHuaweiCoordinator().supportsNotificationsStartCall() ? Notifications.NotificationType.startCall : Notifications.NotificationType.stopNotification;
byte type = getDeviceState().supportsNotificationsStartCall() ? Notifications.NotificationType.startCall : Notifications.NotificationType.stopNotification;
StopNotificationRequest stopNotificationRequest = new StopNotificationRequest(this, type);
try {
stopNotificationRequest.doPerform();
@@ -2098,7 +2099,7 @@ public class HuaweiSupportProvider {
packet.trainingPoints,
packet.longestStreak,
packet.tripped,
getHuaweiCoordinator().isSupportsWorkoutNewSteps()
getDeviceState().isSupportsWorkoutNewSteps()
);
db.getDaoSession().getHuaweiWorkoutSummarySampleDao().insertOrReplace(summarySample);
@@ -2914,17 +2915,17 @@ public class HuaweiSupportProvider {
}
public void onSetContacts(ArrayList<? extends Contact> contacts) {
if (getHuaweiCoordinator().supportsContactsSync()) {
if (getDeviceState().supportsContactsSync()) {
HuaweiP2PContactsService P2PContactsService = HuaweiP2PContactsService.getRegisteredInstance(huaweiP2PManager);
if (P2PContactsService != null) {
P2PContactsService.startSync();
}
} else if (getHuaweiCoordinator().supportsContacts()) {
} else if (getDeviceState().supportsContacts()) {
SendSetContactsRequest sendSetContactsRequest = new SendSetContactsRequest(
this,
contacts,
this.getHuaweiCoordinator().getContactsSlotCount(getDevice())
this.getDeviceState().getContactsSlotCount(getDevice())
);
try {
sendSetContactsRequest.doPerform();
@@ -3002,8 +3003,8 @@ public class HuaweiSupportProvider {
}
private boolean downloadDictTrueSleepData(int start, int end) {
LOG.info("supportsDictSleepSync: {}", getHuaweiCoordinator().supportsDictSleepSync());
if (!getHuaweiCoordinator().supportsDictSleepSync()) {
LOG.info("supportsDictSleepSync: {}", getDeviceState().supportsDictSleepSync());
if (!getDeviceState().supportsDictSleepSync()) {
return false;
}
huaweiFileDownloadManager.addToQueue(HuaweiFileDownloadManager.FileRequest.sequenceDataFileRequest(
@@ -3075,7 +3076,7 @@ public class HuaweiSupportProvider {
sleepStat.setSleepVersion(sleepDataSummary.sleepVersion);
sleepStatsSamples.add(sleepStat);
long time = HuaweiTrueSleepSequenceDataParser.getTime(sleepDataSummary.fallAsleepTime, sleepDataSummary.bedTime, sleepDataSummary.validData, getHuaweiCoordinator().supportsBedTime());
long time = HuaweiTrueSleepSequenceDataParser.getTime(sleepDataSummary.fallAsleepTime, sleepDataSummary.bedTime, sleepDataSummary.validData, getDeviceState().supportsBedTime());
LOG.info("SLEEP Time: {}", time);
List<HuaweiTrueSleepSequenceDataParser.SleepStage> stages = HuaweiTrueSleepSequenceDataParser.parseSleepDetails(sd.getDetails(), time);
LOG.info("SLEEP Stages: {}", stages);
@@ -3112,7 +3113,7 @@ public class HuaweiSupportProvider {
public boolean downloadTruSleepData(int start, int end) {
// We only get the data if TruSleep is supported
if (!getHuaweiCoordinator().supportsTruSleep())
if (!getDeviceState().supportsTruSleep())
return false;
if (downloadDictTrueSleepData(start, end))
@@ -3148,13 +3149,13 @@ public class HuaweiSupportProvider {
};
huaweiFileDownloadManager.addToQueue(HuaweiFileDownloadManager.FileRequest.sleepStateFileRequest(
getHuaweiCoordinator().getSupportsTruSleepNewSync(),
getDeviceState().getSupportsTruSleepNewSync(),
start,
end,
callback
), true);
huaweiFileDownloadManager.addToQueue(HuaweiFileDownloadManager.FileRequest.sleepDataFileRequest(
getHuaweiCoordinator().getSupportsTruSleepNewSync(),
getDeviceState().getSupportsTruSleepNewSync(),
start,
end,
callback
@@ -3163,13 +3164,13 @@ public class HuaweiSupportProvider {
}
public boolean downloadStressData(int start, int end) {
if (!getHuaweiCoordinator().supportsAutoStress())
if (!getDeviceState().supportsAutoStress())
return false;
syncState.setStressSync(true);
huaweiFileDownloadManager.addToQueue(HuaweiFileDownloadManager.FileRequest.rriFileRequest(
getHuaweiCoordinator().getSupportsRriNewSync(),
getDeviceState().getSupportsRriNewSync(),
start,
end,
new HuaweiFileDownloadManager.FileDownloadCallback() {
@@ -3208,7 +3209,7 @@ public class HuaweiSupportProvider {
}
public boolean downloadEcgData(int start, int end) {
if (!getHuaweiCoordinator().supportsECG())
if (!getDeviceState().supportsECG())
return false;
syncState.setEcgSync(true);
@@ -3274,7 +3275,7 @@ public class HuaweiSupportProvider {
}
public void downloadWorkoutPdrFiles(short workoutId, Long databaseId) {
if(!getHuaweiCoordinator().isSupportsGpsNewSync())
if(!getDeviceState().isSupportsGpsNewSync())
return;
huaweiFileDownloadManager.addToQueue(HuaweiFileDownloadManager.FileRequest.workoutPdrFileRequest(
workoutId,
@@ -3306,7 +3307,7 @@ public class HuaweiSupportProvider {
syncState.startWorkoutGpsDownload();
huaweiFileDownloadManager.addToQueue(HuaweiFileDownloadManager.FileRequest.workoutGpsFileRequest(
getHuaweiCoordinator().isSupportsGpsNewSync(),
getDeviceState().isSupportsGpsNewSync(),
workoutId,
databaseId,
new HuaweiFileDownloadManager.FileDownloadCallback() {
@@ -209,7 +209,7 @@ public class HuaweiWeatherManager {
public void sendWeather(WeatherSpec weatherSpec) {
// Initialize weather settings and send weather
if (!supportProvider.getHuaweiCoordinator().supportsWeather()) {
if (!supportProvider.getDeviceState().supportsWeather()) {
LOG.error("onSendWeather called while weather is not supported.");
return;
}
@@ -226,15 +226,15 @@ public class HuaweiWeatherManager {
fixupWeather(weatherSpec);
Weather.Settings weatherSettings = new Weather.Settings();
weatherSettings.uvIndexSupported = supportProvider.getHuaweiCoordinator().supportsWeatherUvIndex();
weatherSettings.extendedHourlyForecast = supportProvider.getHuaweiCoordinator().supportsWeatherExtendedHourForecast();
weatherSettings.uvIndexSupported = supportProvider.getDeviceState().supportsWeatherUvIndex();
weatherSettings.extendedHourlyForecast = supportProvider.getDeviceState().supportsWeatherExtendedHourForecast();
SendWeatherStartRequest weatherStartRequest = new SendWeatherStartRequest(supportProvider, weatherSettings);
weatherStartRequest.setFinalizeReq(errorHandler);
weatherStartRequest.setupTimeoutUntilNext(1000);
Request lastRequest = weatherStartRequest;
if (supportProvider.getHuaweiCoordinator().supportsWeatherUnit()) {
if (supportProvider.getDeviceState().supportsWeatherUnit()) {
SendWeatherUnitRequest weatherUnitRequest = new SendWeatherUnitRequest(supportProvider);
weatherUnitRequest.setFinalizeReq(errorHandler);
lastRequest.nextRequest(weatherUnitRequest);
@@ -246,14 +246,14 @@ public class HuaweiWeatherManager {
lastRequest.nextRequest(weatherSupportRequest);
lastRequest = weatherSupportRequest;
if (supportProvider.getHuaweiCoordinator().supportsWeatherExtended()) {
if (supportProvider.getDeviceState().supportsWeatherExtended()) {
SendWeatherExtendedSupportRequest weatherExtendedSupportRequest = new SendWeatherExtendedSupportRequest(supportProvider, weatherSettings);
weatherExtendedSupportRequest.setFinalizeReq(errorHandler);
lastRequest.nextRequest(weatherExtendedSupportRequest);
lastRequest = weatherExtendedSupportRequest;
}
if (supportProvider.getHuaweiCoordinator().supportsWeatherMoonRiseSet()) {
if (supportProvider.getDeviceState().supportsWeatherMoonRiseSet()) {
SendWeatherSunMoonSupportRequest weatherSunMoonSupportRequest = new SendWeatherSunMoonSupportRequest(supportProvider, weatherSettings);
weatherSunMoonSupportRequest.setFinalizeReq(errorHandler);
lastRequest.nextRequest(weatherSunMoonSupportRequest);
@@ -268,7 +268,7 @@ public class HuaweiWeatherManager {
lastRequest = sendWeatherCurrentRequest;
if (supportProvider.getHuaweiCoordinator().supportsGpsAndTimeToDevice() &&
if (supportProvider.getDeviceState().supportsGpsAndTimeToDevice() &&
GBApplication.getDevicePrefs(supportProvider.getDevice()).getBoolean("pref_huawei_gps_and_time", true)) {
Location location = new CurrentPosition().getLastKnownLocation();
BigDecimal latitude = toBigDecimal(location.getLatitude());
@@ -285,7 +285,7 @@ public class HuaweiWeatherManager {
}
}
if (supportProvider.getHuaweiCoordinator().supportsWeatherForecasts()) {
if (supportProvider.getDeviceState().supportsWeatherForecasts()) {
SendWeatherForecastRequest sendWeatherForecastRequest = new SendWeatherForecastRequest(supportProvider, weatherSettings, weatherSpec);
sendWeatherForecastRequest.setFinalizeReq(errorHandler);
lastRequest.nextRequest(sendWeatherForecastRequest);
@@ -185,7 +185,7 @@ public class HuaweiDataSyncFeatureManager implements HuaweiDataSyncCommon.DataCa
private void sendFeaturesFile() {
LOG.info("HuaweiDataSyncFeatureManager Send feature file upload info");
final String countryCode = support.getHuaweiCoordinator().getCountryCode(support.getDevice());
final String countryCode = support.getDeviceState().getCountryCode(support.getDevice());
final String json = getFeaturesFileContent(countryCode);
LOG.info("feature file content: {}", json);
@@ -97,7 +97,7 @@ public abstract class HuaweiBaseP2PService {
sendP2PCommand((byte) 2, this.getModule(), this.getPackage(), this.getLocalFingerprint(), this.getFingerprint(), sendData, callback);
}
public void sendGetVersion(HuaweiP2PCallback callback) {
if(manager.getSupportProvider().getHuaweiCoordinator().supportsP2PGetAppVersion()) {
if(manager.getSupportProvider().getDeviceState().supportsP2PGetAppVersion()) {
sendP2PCommand((byte) 4, this.getModule(), this.getPackage(), null, null, null, callback);
} else {
LOG.error("P2P Get App Version is not supported");
@@ -88,14 +88,14 @@ public class HuaweiP2PCalendarService extends HuaweiBaseP2PService {
@Override
public String getPackage() {
if (manager.getSupportProvider().getHuaweiCoordinator().supportsExternalCalendarService())
if (manager.getSupportProvider().getDeviceState().supportsExternalCalendarService())
return "com.huawei.ohos.calendar";
return "in.huawei.calendar";
}
@Override
public String getFingerprint() {
if (manager.getSupportProvider().getHuaweiCoordinator().supportsExternalCalendarService())
if (manager.getSupportProvider().getDeviceState().supportsExternalCalendarService())
return "com.huawei.ohos.calendar_BCgpfcWNSKWgvxsSILxooQZyAmKYsFQnMTibnfrKQqK9M0ABtXH+GbsOscsnVvVc5qIDiFEyEOYMSF7gJ7Vb5Mc=";
return "SystemApp";
}
@@ -476,7 +476,7 @@ public class HuaweiP2PCalendarService extends HuaweiBaseP2PService {
// NOTE: scheduleCount is a max number of events to send. It suitable only if supportsExternalCalendarService not set
//external calendar synchronization only supported on Harmony devices. I don't know how to deal with this.
if (!manager.getSupportProvider().getHuaweiCoordinator().supportsExternalCalendarService()) {
if (!manager.getSupportProvider().getDeviceState().supportsExternalCalendarService()) {
if (!syncCalendarEvents(majorVersion, minorVersion, scheduleCount)) {
sendCalendarCmd((byte) 0x01, (byte) 0x04, null); //No sync required
}
@@ -107,7 +107,7 @@ public class HuaweiP2PCannedRepliesService extends HuaweiBaseP2PService {
return;
final GBDeviceEventUpdatePreferences gbDeviceEventUpdatePreferences = new GBDeviceEventUpdatePreferences();
for (int i = 1; i <= manager.getSupportProvider().getHuaweiCoordinator().getCannedRepliesSlotCount(manager.getSupportProvider().getDevice()); i++) {
for (int i = 1; i <= manager.getSupportProvider().getDeviceState().getCannedRepliesSlotCount(manager.getSupportProvider().getDevice()); i++) {
String message = null;
if (replies.size() >= i) {
if (replies.get(i - 1).contains(0x04)) {
@@ -118,7 +118,7 @@ public class HuaweiP2PDirection extends HuaweiBaseP2PService {
// app availability can be checked by querying app list from the watch (service 0x2a).
sendGetVersion((version, data) -> {
LOG.info("HuaweiP2PDirection App version: {}", version);
manager.getSupportProvider().getCoordinator().getHuaweiCoordinator().setNavigationAvailability(version != -1);
manager.getSupportProvider().getDeviceState().setNavigationAvailability(version != -1);
});
}
@@ -29,7 +29,6 @@ import nodomain.freeyourgadget.gadgetbridge.model.heartratezones.HeartRateZones;
import nodomain.freeyourgadget.gadgetbridge.model.heartratezones.HeartRateZonesConfig;
import nodomain.freeyourgadget.gadgetbridge.model.heartratezones.HeartRateZonesSpec;
import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.HuaweiP2PManager;
import nodomain.freeyourgadget.gadgetbridge.util.GB;
public class HuaweiP2PTrackService extends HuaweiBaseP2PService {
private final Logger LOG = LoggerFactory.getLogger(HuaweiP2PTrackService.class);
@@ -89,7 +88,7 @@ public class HuaweiP2PTrackService extends HuaweiBaseP2PService {
public byte[] getHRZonesData() {
HuaweiHeartRateZonesSpec spec = new HuaweiHeartRateZonesSpec(manager.getSupportProvider().getDevice(), manager.getSupportProvider().getHuaweiCoordinator());
HuaweiHeartRateZonesSpec spec = new HuaweiHeartRateZonesSpec(manager.getSupportProvider().getDevice(), manager.getSupportProvider().getDeviceState());
List<HeartRateZonesConfig> zones = spec.getDeviceConfig();
HeartRateZonesConfig uprightConfig = HuaweiHeartRateZonesSpec.getByPosture(zones, HeartRateZonesSpec.PostureType.UPRIGHT);
HeartRateZonesConfig sittingConfig = HuaweiHeartRateZonesSpec.getByPosture(zones, HeartRateZonesSpec.PostureType.SITTING);
@@ -37,7 +37,7 @@ public class AcceptAgreementsRequest extends Request {
@Override
protected boolean requestSupported() {
return supportProvider.getHuaweiCoordinator().supportsAcceptAgreement();
return supportProvider.getDeviceState().supportsAcceptAgreement();
}
@Override
@@ -42,7 +42,7 @@ public class GetActivityTypeRequest extends Request {
@Override
protected boolean requestSupported() {
return supportProvider.getHuaweiCoordinator().supportsActivityType();
return supportProvider.getDeviceState().supportsActivityType();
}
@Override
@@ -33,7 +33,7 @@ public class GetAppInfoParams extends Request{
@Override
protected boolean requestSupported() {
return supportProvider.getHuaweiCoordinator().supportsAppParams();
return supportProvider.getDeviceState().supportsAppParams();
}
@Override
@@ -51,6 +51,6 @@ public class GetAppInfoParams extends Request{
throw new ResponseTypeMismatchException(receivedPacket, App.AppInfoParams.Response.class);
App.AppInfoParams.Response resp = (App.AppInfoParams.Response)(receivedPacket);
supportProvider.getHuaweiCoordinator().setAppDeviceParams(resp.params);
supportProvider.getDeviceState().setAppDeviceParams(resp.params);
}
}
@@ -36,7 +36,7 @@ public class GetConnectStatusRequest extends Request {
@Override
protected boolean requestSupported() {
return supportProvider.getHuaweiCoordinator().supportsConnectStatus();
return supportProvider.getDeviceState().supportsConnectStatus();
}
@Override
@@ -36,7 +36,7 @@ public class GetContactsCount extends Request {
@Override
protected boolean requestSupported() {
return supportProvider.getHuaweiCoordinator().supportsContacts();
return supportProvider.getDeviceState().supportsContacts();
}
@Override
@@ -56,6 +56,6 @@ public class GetContactsCount extends Request {
throw new ResponseTypeMismatchException(receivedPacket, Contacts.ContactsCount.Response.class);
int count = ((Contacts.ContactsCount.Response) receivedPacket).maxCount;
this.supportProvider.getHuaweiCoordinator().saveMaxContactsCount(count);
this.supportProvider.getDeviceState().saveMaxContactsCount(count);
}
}
@@ -40,7 +40,7 @@ public class GetDndLiftWristTypeRequest extends Request {
@Override
protected boolean requestSupported() {
return supportProvider.getHuaweiCoordinator().supportsQueryDndLiftWristDisturbType();
return supportProvider.getDeviceState().supportsQueryDndLiftWristDisturbType();
}
@Override
@@ -35,7 +35,7 @@ public class GetEventAlarmList extends Request {
@Override
protected boolean requestSupported() {
return supportProvider.getHuaweiCoordinator().supportsChangingAlarm();
return supportProvider.getDeviceState().supportsChangingAlarm();
}
@Override
@@ -57,7 +57,7 @@ public class GetEventAlarmList extends Request {
// Correct for position of smart alarm
// Note that the band uses 1 as the first index for event alarms
int positionOffset;
if (supportProvider.getCoordinator().getHuaweiCoordinator().supportsSmartAlarm(supportProvider.getDevice()))
if (supportProvider.getDeviceState().supportsSmartAlarm(supportProvider.getDevice()))
positionOffset = 0;
else
positionOffset = -1;
@@ -65,7 +65,7 @@ public class GetExpandCapabilityRequest extends Request {
if (!(receivedPacket instanceof DeviceConfig.ExpandCapability.Response))
throw new ResponseTypeMismatchException(receivedPacket, DeviceConfig.ExpandCapability.Response.class);
supportProvider.getHuaweiCoordinator().saveExpandCapabilities(((DeviceConfig.ExpandCapability.Response) receivedPacket).expandCapabilities);
supportProvider.getDeviceState().saveExpandCapabilities(((DeviceConfig.ExpandCapability.Response) receivedPacket).expandCapabilities);
dynamicServicesReq.call();
}
@@ -36,7 +36,7 @@ public class GetExtendedMusicInfoParams extends Request {
@Override
protected boolean requestSupported() {
return supportProvider.getHuaweiCoordinator().supportsMusicUploading();
return supportProvider.getDeviceState().supportsMusicUploading();
}
@Override
@@ -55,6 +55,6 @@ public class GetExtendedMusicInfoParams extends Request {
throw new Request.ResponseTypeMismatchException(receivedPacket, MusicControl.ExtendedMusicInfoParams.Response.class);
MusicControl.ExtendedMusicInfoParams.Response resp = (MusicControl.ExtendedMusicInfoParams.Response)(receivedPacket);
supportProvider.getHuaweiCoordinator().setExtendedMusicInfoParams(resp.params);
supportProvider.getDeviceState().setExtendedMusicInfoParams(resp.params);
}
}
@@ -36,7 +36,7 @@ public class GetMusicInfoParams extends Request {
@Override
protected boolean requestSupported() {
return supportProvider.getHuaweiCoordinator().supportsMusicUploading();
return supportProvider.getDeviceState().supportsMusicUploading();
}
@Override
@@ -37,7 +37,7 @@ public class GetNotificationCapabilitiesRequest extends Request {
@Override
protected boolean requestSupported() {
return supportProvider.getHuaweiCoordinator().supportsPromptPushMessage() && supportProvider.getProtocolVersion() == 2;
return supportProvider.getDeviceState().supportsPromptPushMessage() && supportProvider.getProtocolVersion() == 2;
}
@Override
@@ -56,6 +56,6 @@ public class GetNotificationCapabilitiesRequest extends Request {
if (!(receivedPacket instanceof NotificationCapabilities.Response))
throw new ResponseTypeMismatchException(receivedPacket, NotificationCapabilities.Response.class);
supportProvider.getHuaweiCoordinator().saveNotificationCapabilities(((NotificationCapabilities.Response) receivedPacket).capabilities);
supportProvider.getDeviceState().saveNotificationCapabilities(((NotificationCapabilities.Response) receivedPacket).capabilities);
}
}
@@ -38,9 +38,9 @@ public class GetNotificationConstraintsRequest extends Request {
@Override
protected boolean requestSupported() {
return supportProvider.getHuaweiCoordinator().supportsNotificationAlert() && supportProvider.getProtocolVersion() == 2
&& supportProvider.getCoordinator().getDeviceType() != DeviceType.HUAWEIBANDAW70
&& supportProvider.getCoordinator().getDeviceType() != DeviceType.HONORWATCH4; // Bit of a workaround, there is probably some capabilities this actually depends on
return supportProvider.getDeviceState().supportsNotificationAlert() && supportProvider.getProtocolVersion() == 2
&& supportProvider.getDevice().getType() != DeviceType.HUAWEIBANDAW70
&& supportProvider.getDevice().getType() != DeviceType.HONORWATCH4; // Bit of a workaround, there is probably some capabilities this actually depends on
}
@Override
@@ -59,6 +59,6 @@ public class GetNotificationConstraintsRequest extends Request {
if (!(receivedPacket instanceof NotificationConstraints.Response))
throw new ResponseTypeMismatchException(receivedPacket, NotificationConstraints.Response.class);
supportProvider.getHuaweiCoordinator().saveNotificationConstraints(((NotificationConstraints.Response) receivedPacket).constraints);
supportProvider.getDeviceState().saveNotificationConstraints(((NotificationConstraints.Response) receivedPacket).constraints);
}
}
@@ -36,15 +36,15 @@ public class GetOTAChangeLog extends Request {
@Override
protected boolean requestSupported() {
return supportProvider.getHuaweiCoordinator().supportsOTAChangelog() &&
supportProvider.getHuaweiCoordinator().getOtaSoftwareVersion() != null;
return supportProvider.getDeviceState().supportsOTAChangelog() &&
supportProvider.getDeviceState().getOtaSoftwareVersion() != null;
}
@Override
protected List<byte[]> createRequest() throws RequestCreationException {
try {
// TODO: get proper language.
return new OTA.GetChangeLog.Request(paramsProvider, supportProvider.getHuaweiCoordinator().getOtaSoftwareVersion(), "en").serialize();
return new OTA.GetChangeLog.Request(paramsProvider, supportProvider.getDeviceState().getOtaSoftwareVersion(), "en").serialize();
} catch (HuaweiPacket.CryptoException e) {
throw new RequestCreationException(e);
}
@@ -60,7 +60,7 @@ public class GetProductInformationRequest extends Request {
getDevice().addDeviceInfo(new GenericItem("SN: ", ((DeviceConfig.ProductInfo.Response) receivedPacket).serialNumber));
getDevice().addDeviceInfo(new GenericItem("RC: ", String.valueOf(((DeviceConfig.ProductInfo.Response) receivedPacket).regionCode)));
supportProvider.getHuaweiCoordinator().setOtaSoftwareVersion(((DeviceConfig.ProductInfo.Response) receivedPacket).softwareVersion);
supportProvider.getHuaweiCoordinator().setOtaSignatureLength(((DeviceConfig.ProductInfo.Response) receivedPacket).otaSignatureLength);
supportProvider.getDeviceState().setOtaSoftwareVersion(((DeviceConfig.ProductInfo.Response) receivedPacket).softwareVersion);
supportProvider.getDeviceState().setOtaSignatureLength(((DeviceConfig.ProductInfo.Response) receivedPacket).otaSignatureLength);
}
}
@@ -36,7 +36,7 @@ public class GetSettingRelatedRequest extends Request {
@Override
protected boolean requestSupported() {
return supportProvider.getHuaweiCoordinator().supportsSettingRelated();
return supportProvider.getDeviceState().supportsSettingRelated();
}
@Override
@@ -55,8 +55,8 @@ public class GetSettingRelatedRequest extends Request {
LOG.debug("handle Setting Related");
supportProvider.getHuaweiCoordinator().setSupportsTruSleepNewSync(((DeviceConfig.SettingRelated.Response) receivedPacket).truSleepNewSync);
supportProvider.getHuaweiCoordinator().setSupportsRriNewSync(((DeviceConfig.SettingRelated.Response) receivedPacket).rriNewSync);
supportProvider.getHuaweiCoordinator().setSupportsGpsNewSync(((DeviceConfig.SettingRelated.Response) receivedPacket).gpsNewSync);
supportProvider.getDeviceState().setSupportsTruSleepNewSync(((DeviceConfig.SettingRelated.Response) receivedPacket).truSleepNewSync);
supportProvider.getDeviceState().setSupportsRriNewSync(((DeviceConfig.SettingRelated.Response) receivedPacket).rriNewSync);
supportProvider.getDeviceState().setSupportsGpsNewSync(((DeviceConfig.SettingRelated.Response) receivedPacket).gpsNewSync);
}
}
@@ -34,8 +34,8 @@ public class GetSmartAlarmList extends Request {
@Override
protected boolean requestSupported() {
return supportProvider.getHuaweiCoordinator().supportsChangingAlarm() &&
supportProvider.getHuaweiCoordinator().supportsSmartAlarm(supportProvider.getDevice());
return supportProvider.getDeviceState().supportsChangingAlarm() &&
supportProvider.getDeviceState().supportsSmartAlarm(supportProvider.getDevice());
}
@Override
@@ -82,7 +82,7 @@ public class GetSupportedCommandsRequest extends Request {
throw new ResponseTypeMismatchException(receivedPacket, DeviceConfig.SupportedCommands.Response.class);
for (DeviceConfig.SupportedCommands.Response.CommandsList commandsList : ((DeviceConfig.SupportedCommands.Response) receivedPacket).commandsLists) {
supportProvider.getHuaweiCoordinator().addCommandsForService(
supportProvider.getDeviceState().addCommandsForService(
commandsList.service,
commandsList.commands
);
@@ -92,8 +92,8 @@ public class GetSupportedCommandsRequest extends Request {
GetSupportedCommandsRequest nextRequest = new GetSupportedCommandsRequest(supportProvider, activatedServices);
this.nextRequest(nextRequest);
} else {
supportProvider.getHuaweiCoordinator().printCommandsPerService();
if(supportProvider.getHuaweiCoordinator().supportsExpandCapability()) {
supportProvider.getDeviceState().printCommandsPerService();
if(supportProvider.getDeviceState().supportsExpandCapability()) {
GetExpandCapabilityRequest nextRequest = new GetExpandCapabilityRequest(supportProvider);
this.nextRequest(nextRequest);
} else {
@@ -34,7 +34,7 @@ public class GetWatchfaceParams extends Request{
@Override
protected boolean requestSupported() {
return supportProvider.getHuaweiCoordinator().supportsWatchfaceParams();
return supportProvider.getDeviceState().supportsWatchfaceParams();
}
@Override
@@ -52,6 +52,6 @@ public class GetWatchfaceParams extends Request{
throw new ResponseTypeMismatchException(receivedPacket, Watchface.WatchfaceParams.Response.class);
Watchface.WatchfaceParams.Response resp = (Watchface.WatchfaceParams.Response)(receivedPacket);
supportProvider.getHuaweiCoordinator().setWatchfaceDeviceParams(resp.params);
supportProvider.getDeviceState().setWatchfaceDeviceParams(resp.params);
}
}
@@ -37,7 +37,7 @@ public class GetWearStatusRequest extends Request {
@Override
protected boolean requestSupported() {
return supportProvider.getHuaweiCoordinator().supportsMultiDevice();
return supportProvider.getDeviceState().supportsMultiDevice();
}
@Override
@@ -36,7 +36,7 @@ public class GetWorkoutCapability extends Request {
@Override
protected boolean requestSupported() {
return supportProvider.getHuaweiCoordinator().supportsWorkoutCapability();
return supportProvider.getDeviceState().supportsWorkoutCapability();
}
@Override
@@ -56,6 +56,6 @@ public class GetWorkoutCapability extends Request {
LOG.info("Workout capability: NewSteps: {}", ((Workout.WorkoutCapability.Response) receivedPacket).supportNewStep);
supportProvider.getHuaweiCoordinator().setSupportsWorkoutNewSteps(((Workout.WorkoutCapability.Response) receivedPacket).supportNewStep);
supportProvider.getDeviceState().setSupportsWorkoutNewSteps(((Workout.WorkoutCapability.Response) receivedPacket).supportNewStep);
}
}
@@ -60,7 +60,7 @@ public class GetWorkoutDataRequest extends Request {
@Override
protected List<byte[]> createRequest() throws RequestCreationException {
try {
return new Workout.WorkoutData.Request(paramsProvider, workoutNumbers.workoutNumber, this.number, supportProvider.getHuaweiCoordinator().isSupportsWorkoutNewSteps()).serialize();
return new Workout.WorkoutData.Request(paramsProvider, workoutNumbers.workoutNumber, this.number, supportProvider.getDeviceState().isSupportsWorkoutNewSteps()).serialize();
} catch (HuaweiPacket.CryptoException e) {
throw new RequestCreationException(e);
}
@@ -37,7 +37,7 @@ public class SendCameraRemoteSetupEvent extends Request {
@Override
protected boolean requestSupported() {
return supportProvider.getHuaweiCoordinator().supportsCameraRemote() && GBApplication.getDeviceSpecificSharedPrefs(supportProvider.getDevice().getAddress()).getBoolean(DeviceSettingsPreferenceConst.PREF_CAMERA_REMOTE, false);
return supportProvider.getDeviceState().supportsCameraRemote() && GBApplication.getDeviceSpecificSharedPrefs(supportProvider.getDevice().getAddress()).getBoolean(DeviceSettingsPreferenceConst.PREF_CAMERA_REMOTE, false);
}
@Override
@@ -21,15 +21,15 @@ public class SendCountryCodeRequest extends Request {
@Override
protected boolean requestSupported() {
return supportProvider.getHuaweiCoordinator().supportsSendCountryCode() && supportProvider.getHuaweiCoordinator().getSendCountryCodeEnabled(supportProvider.getDevice());
return supportProvider.getDeviceState().supportsSendCountryCode() && supportProvider.getDeviceState().getSendCountryCodeEnabled(supportProvider.getDevice());
}
@Override
protected List<byte[]> createRequest() throws Request.RequestCreationException {
try {
final String countryCode = supportProvider.getHuaweiCoordinator().getCountryCode(supportProvider.getDevice());
final String countryCode = supportProvider.getDeviceState().getCountryCode(supportProvider.getDevice());
Byte siteId = null;
if(supportProvider.getHuaweiCoordinator().supportsSendSiteId()) {
if(supportProvider.getDeviceState().supportsSendSiteId()) {
siteId = (byte) HuaweiUtil.getSiteIdByCountryCode(countryCode);
}
@@ -37,7 +37,7 @@ public class SendDeviceReportThreshold extends Request {
@Override
protected boolean requestSupported() {
return supportProvider.getHuaweiCoordinator().supportsDeviceReportThreshold();
return supportProvider.getDeviceState().supportsDeviceReportThreshold();
}
@Override
@@ -43,7 +43,7 @@ public class SendDndAddRequest extends Request {
@Override
protected boolean requestSupported() {
return supportProvider.getHuaweiCoordinator().supportsDoNotDisturb(supportProvider.getDevice());
return supportProvider.getDeviceState().supportsDoNotDisturb(supportProvider.getDevice());
}
@Override
@@ -78,7 +78,7 @@ public class SendDndAddRequest extends Request {
end,
cycle,
statusDndLiftWrist ? dndLiftWristType : 0x00,
supportProvider.getHuaweiCoordinator().supportsQueryDndLiftWristDisturbType()
supportProvider.getDeviceState().supportsQueryDndLiftWristDisturbType()
).serialize();
} catch (HuaweiPacket.CryptoException e) {
throw new RequestCreationException(e);
@@ -36,7 +36,7 @@ public class SendDndDeleteRequest extends Request {
@Override
protected boolean requestSupported() {
return supportProvider.getHuaweiCoordinator().supportsDoNotDisturb(supportProvider.getDevice());
return supportProvider.getDeviceState().supportsDoNotDisturb(supportProvider.getDevice());
}
@Override
@@ -39,7 +39,7 @@ public class SendExtendedAccountRequest extends Request {
@Override
protected boolean requestSupported() {
return supportProvider.getHuaweiCoordinator().supportsAccountJudgment() && supportProvider.getHuaweiCoordinator().supportsAccountSwitch();
return supportProvider.getDeviceState().supportsAccountJudgment() && supportProvider.getDeviceState().supportsAccountSwitch();
}
@Override
@@ -50,7 +50,7 @@ public class SendExtendedAccountRequest extends Request {
try {
return new AccountRelated.SendExtendedAccountToDevice.Request(
paramsProvider,
supportProvider.getHuaweiCoordinator().supportsDiffAccountPairingOptimization(),
supportProvider.getDeviceState().supportsDiffAccountPairingOptimization(),
account)
.serialize();
} catch (CryptoException e) {
@@ -39,7 +39,7 @@ public class SendFitnessGoalRequest extends Request {
@Override
protected boolean requestSupported() {
return supportProvider.getHuaweiCoordinator().supportsMotionGoal();
return supportProvider.getDeviceState().supportsMotionGoal();
}
@Override
@@ -54,12 +54,12 @@ public class SendFitnessUserInfoRequest extends Request {
birthdayEncoded += dateOfBirth.getMonthValue() << 8;
birthdayEncoded += dateOfBirth.getDayOfMonth();
boolean unknownGenderSupported = supportProvider.getHuaweiCoordinator().supportsUnknownGender();
boolean unknownGenderSupported = supportProvider.getDeviceState().supportsUnknownGender();
//TODO: discover Vo2Max capability and retrieve calculate and set proper values. Currently disabled.
boolean vo2Supported = false;
int vo2Max = 0;
int vo2Time = 0;
boolean precisionWeightSupported = supportProvider.getHuaweiCoordinator().supportsPrecisionWeight();
boolean precisionWeightSupported = supportProvider.getDeviceState().supportsPrecisionWeight();
UserInfo.UserInfoData userInfoData = new UserInfo.UserInfoData(
activityUser.getHeightCm(),
@@ -36,7 +36,7 @@ public class SendGetDefaultSwitch extends Request {
@Override
protected boolean requestSupported() {
return supportProvider.getHuaweiCoordinator().supportDefaultSwitch();
return supportProvider.getDeviceState().supportDefaultSwitch();
}
@Override
@@ -30,7 +30,7 @@ public class SendHeartRateZonesConfig extends Request {
public SendHeartRateZonesConfig(HuaweiSupportProvider support) {
super(support);
this.serviceId = FitnessData.id;
this.commandId = supportProvider.getHuaweiCoordinator().supportsExtendedHeartRateZones() ?
this.commandId = supportProvider.getDeviceState().supportsExtendedHeartRateZones() ?
FitnessData.HeartRateZoneConfigPacket.id_extended :
FitnessData.HeartRateZoneConfigPacket.id_simple;
}
@@ -38,17 +38,17 @@ public class SendHeartRateZonesConfig extends Request {
@Override
protected boolean requestSupported() {
return
!supportProvider.getHuaweiCoordinator().supportsTrack() && // In this case it uses P2P
supportProvider.getHuaweiCoordinator().supportsHeartRateZones();
!supportProvider.getDeviceState().supportsTrack() && // In this case it uses P2P
supportProvider.getDeviceState().supportsHeartRateZones();
}
@Override
protected List<byte[]> createRequest() throws RequestCreationException {
try {
HuaweiHeartRateZonesSpec spec = new HuaweiHeartRateZonesSpec(supportProvider.getDevice(), supportProvider.getHuaweiCoordinator());
HuaweiHeartRateZonesSpec spec = new HuaweiHeartRateZonesSpec(supportProvider.getDevice(), supportProvider.getDeviceState());
List<HeartRateZonesConfig> zones = spec.getDeviceConfig();
HeartRateZonesConfig heartRateZonesConfig = HuaweiHeartRateZonesSpec.getByPosture(zones, HeartRateZonesSpec.PostureType.UPRIGHT);
if (supportProvider.getHuaweiCoordinator().supportsExtendedHeartRateZones()) {
if (supportProvider.getDeviceState().supportsExtendedHeartRateZones()) {
return FitnessData.HeartRateZoneConfigPacket.Request.requestExtended(paramsProvider, heartRateZonesConfig).serialize();
} else {
return FitnessData.HeartRateZoneConfigPacket.Request.requestSimple(paramsProvider, heartRateZonesConfig).serialize();
@@ -37,7 +37,7 @@ public class SendMenstrualCapabilityRequest extends Request {
@Override
protected boolean requestSupported() {
return supportProvider.getHuaweiCoordinator().supportsMenstrual();
return supportProvider.getDeviceState().supportsMenstrual();
}
@Override
@@ -65,8 +65,8 @@ public class SendNotificationRequest extends Request {
title = notificationSpec.sourceName;
String body = notificationSpec.body;
if (body != null && body.length() > supportProvider.getHuaweiCoordinator().getContentLength()) {
body = notificationSpec.body.substring(0x0, supportProvider.getHuaweiCoordinator().getContentLength() - 0xD);
if (body != null && body.length() > supportProvider.getDeviceState().getContentLength()) {
body = notificationSpec.body.substring(0x0, supportProvider.getDeviceState().getContentLength() - 0xD);
body += "...";
}
@@ -85,11 +85,11 @@ public class SendNotificationRequest extends Request {
Notifications.NotificationActionRequest.AdditionalParams params = new Notifications.NotificationActionRequest.AdditionalParams();
params.supportsReply = supportProvider.getHuaweiCoordinator().supportsNotificationsReply();
params.supportsRepeatedNotify = supportProvider.getHuaweiCoordinator().supportsNotificationsRepeatedNotify();
params.supportsRemoveSingle = supportProvider.getHuaweiCoordinator().supportsNotificationsRemoveSingle();
params.supportsReplyActions = supportProvider.getHuaweiCoordinator().supportsNotificationsReplyActions();
params.supportsTimestamp = supportProvider.getHuaweiCoordinator().supportsNotificationsAddIconTimestamp();
params.supportsReply = supportProvider.getDeviceState().supportsNotificationsReply();
params.supportsRepeatedNotify = supportProvider.getDeviceState().supportsNotificationsRepeatedNotify();
params.supportsRemoveSingle = supportProvider.getDeviceState().supportsNotificationsRemoveSingle();
params.supportsReplyActions = supportProvider.getDeviceState().supportsNotificationsReplyActions();
params.supportsTimestamp = supportProvider.getDeviceState().supportsNotificationsAddIconTimestamp();
params.notificationId = notificationSpec.getId();
params.notificationKey = getNotificationKey(notificationSpec);
@@ -102,7 +102,7 @@ public class SendNotificationRequest extends Request {
boolean pictureEnabled = GBApplication
.getDeviceSpecificSharedPrefs(supportProvider.getDevice().getAddress())
.getBoolean(DeviceSettingsPreferenceConst.PREF_NOTIFICATION_PICTURES_ENABLE, true);
if(supportProvider.getHuaweiCoordinator().supportsNotificationPicture() && !TextUtils.isEmpty(notificationSpec.picturePath) && pictureEnabled) {
if(supportProvider.getDeviceState().supportsNotificationPicture() && !TextUtils.isEmpty(notificationSpec.picturePath) && pictureEnabled) {
params.pictureName = supportProvider.getHuaweiDataSyncNotificationPictures().getNameForPath(notificationSpec.picturePath);
}
@@ -110,19 +110,19 @@ public class SendNotificationRequest extends Request {
content.add(
new Notifications.NotificationActionRequest.TextElement(
(byte)Notifications.TextType.title,
(byte)supportProvider.getHuaweiCoordinator().getContentFormat(),
(byte)supportProvider.getDeviceState().getContentFormat(),
title)
);
content.add(
new Notifications.NotificationActionRequest.TextElement(
(byte) Notifications.TextType.sender,
(byte)supportProvider.getHuaweiCoordinator().getContentFormat(),
(byte)supportProvider.getDeviceState().getContentFormat(),
notificationSpec.sender)
);
content.add(
new Notifications.NotificationActionRequest.TextElement(
(byte) Notifications.TextType.text,
(byte)supportProvider.getHuaweiCoordinator().getContentFormat(),
(byte)supportProvider.getDeviceState().getContentFormat(),
body)
);
@@ -146,7 +146,7 @@ public class SendNotificationRequest extends Request {
content.add(
new Notifications.NotificationActionRequest.TextElement(
(byte) Notifications.TextType.text,
(byte)supportProvider.getHuaweiCoordinator().getContentFormat(),
(byte)supportProvider.getDeviceState().getContentFormat(),
callSpec.name)
);
@@ -154,54 +154,54 @@ public class SendNotificationRequest extends Request {
sourceAppId = callSpec.sourceAppId;
params = new Notifications.NotificationActionRequest.AdditionalParams();
params.supportsReply = supportProvider.getHuaweiCoordinator().supportsNotificationsReply();
params.supportsRepeatedNotify = supportProvider.getHuaweiCoordinator().supportsNotificationsRepeatedNotify();
params.supportsRemoveSingle = supportProvider.getHuaweiCoordinator().supportsNotificationsRemoveSingle();
params.supportsReplyActions = supportProvider.getHuaweiCoordinator().supportsNotificationsReplyActions();
params.supportsTimestamp = supportProvider.getHuaweiCoordinator().supportsNotificationsAddIconTimestamp();
params.supportsReply = supportProvider.getDeviceState().supportsNotificationsReply();
params.supportsRepeatedNotify = supportProvider.getDeviceState().supportsNotificationsRepeatedNotify();
params.supportsRemoveSingle = supportProvider.getDeviceState().supportsNotificationsRemoveSingle();
params.supportsReplyActions = supportProvider.getDeviceState().supportsNotificationsReplyActions();
params.supportsTimestamp = supportProvider.getDeviceState().supportsNotificationsAddIconTimestamp();
params.notificationId = new Random().nextInt(Integer.MAX_VALUE - 1);
params.notificationKey = getCallSpecKey(callSpec, params.notificationId);
params.channelId = callSpec.channelId;
if(supportProvider.getHuaweiCoordinator().supportsVoipType3()) {
if(supportProvider.getDeviceState().supportsVoipType3()) {
params.category = "imcall";
} else {
params.category = callSpec.category;
}
params.address = null;
if(supportProvider.getHuaweiCoordinator().supportsVoipType2()) {
if(supportProvider.getDeviceState().supportsVoipType2()) {
params.voipType = 1;
}
if (supportProvider.getHuaweiCoordinator().supportsVoipType1() || supportProvider.getHuaweiCoordinator().supportsVoipType2()) {
if (supportProvider.getDeviceState().supportsVoipType1() || supportProvider.getDeviceState().supportsVoipType2()) {
notificationType = Notifications.NotificationType.generic;
content.add(
new Notifications.NotificationActionRequest.TextElement(
(byte) Notifications.TextType.title,
(byte) supportProvider.getHuaweiCoordinator().getContentFormat(),
(byte) supportProvider.getDeviceState().getContentFormat(),
callSpec.name)
);
content.add(
new Notifications.NotificationActionRequest.TextElement(
(byte) Notifications.TextType.sender,
(byte) supportProvider.getHuaweiCoordinator().getContentFormat(),
(byte) supportProvider.getDeviceState().getContentFormat(),
callSpec.name)
);
// TODO: Reject action, need to be parsed from the notification and added here. Then the watch send it back in the service id: 0x2 Command id: 0x11
// content.add(
// new Notifications.NotificationActionRequest.TextElement(
// (byte) 8,
// (byte) supportProvider.getHuaweiCoordinator().getContentFormat(),
// (byte) supportProvider.getDeviceState().getContentFormat(),
// "REJECT_CALL")
// );
}
}
if(supportProvider.getHuaweiCoordinator().supportsIncomingNumber()) {
if(supportProvider.getDeviceState().supportsIncomingNumber()) {
content.add(
new Notifications.NotificationActionRequest.TextElement(
(byte) Notifications.TextType.flight,
(byte) supportProvider.getHuaweiCoordinator().getIncomingNumberFormat(),
(byte) supportProvider.getDeviceState().getIncomingNumberFormat(),
callSpec.number)
);
}
@@ -37,7 +37,7 @@ public class SendNotifyHeartRateCapabilityRequest extends Request {
@Override
protected boolean requestSupported() {
return supportProvider.getHuaweiCoordinator().supportsWorkoutsTrustHeartRate();
return supportProvider.getDeviceState().supportsWorkoutsTrustHeartRate();
}
@Override
@@ -37,7 +37,7 @@ public class SendNotifyRestHeartRateCapabilityRequest extends Request {
@Override
protected boolean requestSupported() {
return supportProvider.getHuaweiCoordinator().supportsFitnessRestHeartRate();
return supportProvider.getDeviceState().supportsFitnessRestHeartRate();
}
@Override

Some files were not shown because too many files have changed in this diff Show More