package nodomain.freeyourgadget.gadgetbridge.devices.miband; import android.content.Intent; import android.os.Bundle; import android.preference.Preference; import android.support.v4.content.LocalBroadcastManager; import android.widget.Toast; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.R; import nodomain.freeyourgadget.gadgetbridge.activities.AbstractSettingsActivity; import nodomain.freeyourgadget.gadgetbridge.devices.DeviceManager; import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec; import nodomain.freeyourgadget.gadgetbridge.model.NotificationType; import nodomain.freeyourgadget.gadgetbridge.util.GB; import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.ORIGIN_INCOMING_CALL; import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_MIBAND_ADDRESS; import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_MIBAND_DEVICE_TIME_OFFSET_HOURS; import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_MIBAND_FITNESS_GOAL; import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_MIBAND_RESERVE_ALARM_FOR_CALENDAR; import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_MIBAND_USE_HR_FOR_SLEEP_DETECTION; import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_USER_ALIAS; import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.VIBRATION_COUNT; import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.getNotificationPrefKey; public class MiBandPreferencesActivity extends AbstractSettingsActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.miband_preferences); final Preference developmentMiaddr = findPreference(PREF_MIBAND_ADDRESS); developmentMiaddr.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newVal) { Intent refreshIntent = new Intent(DeviceManager.ACTION_REFRESH_DEVICELIST); LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(refreshIntent); preference.setSummary(newVal.toString()); return true; } }); addTryListeners(); final Preference enableHeartrateSleepSupport = findPreference(PREF_MIBAND_USE_HR_FOR_SLEEP_DETECTION); enableHeartrateSleepSupport.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newVal) { GBApplication.deviceService().onEnableHeartRateSleepSupport(Boolean.TRUE.equals(newVal)); return true; } }); } private void addTryListeners() { for (final NotificationType type : NotificationType.values()) { String prefKey = "mi_try_" + type.getGenericType(); final Preference tryPref = findPreference(prefKey); if (tryPref != null) { tryPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { tryVibration(type); return true; } }); } else { GB.toast(getBaseContext(), "Unable to find preference key: " + prefKey + ", trying the vibration won't work", Toast.LENGTH_LONG, GB.WARN); } } } private void tryVibration(NotificationType type) { NotificationSpec spec = new NotificationSpec(); spec.type = type; GBApplication.deviceService().onNotification(spec); } @Override protected String[] getPreferenceKeysWithSummary() { String[] strings1 = { PREF_USER_ALIAS, PREF_MIBAND_ADDRESS, PREF_MIBAND_FITNESS_GOAL, PREF_MIBAND_RESERVE_ALARM_FOR_CALENDAR, PREF_MIBAND_DEVICE_TIME_OFFSET_HOURS, getNotificationPrefKey(VIBRATION_COUNT, ORIGIN_INCOMING_CALL) }; String[] strings2 = new String[NotificationType.values().length]; int i = 0; for (NotificationType type : NotificationType.values()) { strings2[i++] = type.getFixedValue(); } return org.apache.commons.lang3.ArrayUtils.addAll(strings1, strings2); } }