diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBApplication.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBApplication.java index cc79aec6f..06f171332 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBApplication.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBApplication.java @@ -114,7 +114,7 @@ public class GBApplication extends Application { private static SharedPreferences sharedPrefs; private static final String PREFS_VERSION = "shared_preferences_version"; //if preferences have to be migrated, increment the following and add the migration logic in migratePrefs below; see http://stackoverflow.com/questions/16397848/how-can-i-migrate-android-preferences-with-a-new-version - private static final int CURRENT_PREFS_VERSION = 17; + private static final int CURRENT_PREFS_VERSION = 18; private static LimitedQueue mIDSenderLookup = new LimitedQueue(16); private static Prefs prefs; @@ -1156,6 +1156,30 @@ public class GBApplication extends Application { editor.remove(GBPrefs.CALENDAR_BLACKLIST); } + if (oldVersion < 18) { + // Migrate the default value for Huami find band vibration pattern + try (DBHandler db = acquireDB()) { + final DaoSession daoSession = db.getDaoSession(); + final List activeDevices = DBHelper.getActiveDevices(daoSession); + + for (Device dbDevice : activeDevices) { + if (!dbDevice.getManufacturer().equals("Huami")) { + continue; + } + + final SharedPreferences deviceSharedPrefs = GBApplication.getDeviceSpecificSharedPrefs(dbDevice.getIdentifier()); + final SharedPreferences.Editor deviceSharedPrefsEdit = deviceSharedPrefs.edit(); + + deviceSharedPrefsEdit.putString("huami_vibration_profile_find_band", "long"); + deviceSharedPrefsEdit.putString("huami_vibration_count_find_band", "1"); + + deviceSharedPrefsEdit.apply(); + } + } catch (Exception e) { + Log.w(TAG, "error acquiring DB lock"); + } + } + editor.putString(PREFS_VERSION, Integer.toString(CURRENT_PREFS_VERSION)); editor.apply(); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/Huami2021Support.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/Huami2021Support.java index beb2bf47d..1fb1bfc71 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/Huami2021Support.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/Huami2021Support.java @@ -197,7 +197,7 @@ public abstract class Huami2021Support extends HuamiSupport { public void onTestNewFunction() { try { final TransactionBuilder builder = performInitialized("test"); - findBandOneShot(builder); + builder.queue(getQueue()); } catch (final Exception e) { LOG.error("Failed to test new function", e); @@ -213,19 +213,21 @@ public abstract class Huami2021Support extends HuamiSupport { writeToChunked2021("ack find phone", CHUNKED2021_ENDPOINT_FIND_DEVICE, cmd, true); } - protected void findBandOneShot(final TransactionBuilder builder) { + @Override + protected void sendFindDeviceCommand(boolean start) { + if (!start) { + return; + } + LOG.info("Sending one-shot find band"); - writeToChunked2021(builder, CHUNKED2021_ENDPOINT_FIND_DEVICE, new byte[]{FIND_BAND_ONESHOT}, true); - } - - @Override - public void onFindDevice(final boolean start) { - // FIXME: This does not work while band is in DND (#752) - final CallSpec callSpec = new CallSpec(); - callSpec.command = start ? CallSpec.CALL_INCOMING : CallSpec.CALL_END; - callSpec.name = "Gadgetbridge"; - onSetCallState(callSpec); + try { + final TransactionBuilder builder = performInitialized("find huami 2021"); + writeToChunked2021(builder, CHUNKED2021_ENDPOINT_FIND_DEVICE, new byte[]{FIND_BAND_ONESHOT}, true); + builder.queue(getQueue()); + } catch (IOException e) { + LOG.error("error while sending find Huami 2021 device command", e); + } } @Override diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiSupport.java index 047027dc6..33cc3d053 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiSupport.java @@ -1598,7 +1598,7 @@ public abstract class HuamiSupport extends AbstractBTLEDeviceSupport implements return findDeviceInterval; } - private void sendFindDeviceCommand(boolean start) { + protected void sendFindDeviceCommand(boolean start) { BluetoothGattCharacteristic characteristic = getCharacteristic(UUID_CHARACTERISTIC_ALERT_LEVEL); try { TransactionBuilder builder = performInitialized("find huami"); diff --git a/app/src/main/res/xml/devicesettings_vibrationpatterns.xml b/app/src/main/res/xml/devicesettings_vibrationpatterns.xml index 8945c2eb2..265023836 100644 --- a/app/src/main/res/xml/devicesettings_vibrationpatterns.xml +++ b/app/src/main/res/xml/devicesettings_vibrationpatterns.xml @@ -229,7 +229,7 @@