1
0
mirror of https://codeberg.org/Freeyourgadget/Gadgetbridge synced 2024-06-11 07:38:29 +02:00
Gadgetbridge/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/qhybrid/HybridHRWatchfaceWidgetActivity.java
2022-10-02 16:04:14 +02:00

257 lines
14 KiB
Java

/* Copyright (C) 2022 Arjan Schrijver
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 <http://www.gnu.org/licenses/>. */
package nodomain.freeyourgadget.gadgetbridge.devices.qhybrid;
import android.content.Intent;
import android.os.Bundle;
import android.preference.EditTextPreference;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceCategory;
import android.preference.PreferenceFragment;
import android.preference.SwitchPreference;
import android.view.MenuItem;
import java.util.LinkedHashMap;
import java.util.TimeZone;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.activities.AbstractSettingsActivity;
public class HybridHRWatchfaceWidgetActivity extends AbstractSettingsActivity {
private static int widgetIndex;
private static HybridHRWatchfaceWidget widget;
private static LinkedHashMap<String, String> widgetTypes;
private static String[] widgetColors;
private static final String WIDGET_2NDTZ_DEFAULT_TZ = "Etc/UTC";
private static final int WIDGET_2NDTZ_DEFAULT_TIMEOUT = 15;
private static final int WIDGET_CUSTOM_DEFAULT_TIMEOUT = 60;
private static final Boolean WIDGET_CUSTOM_DEFAULT_HIDE_TEXT = true;
private static final Boolean WIDGET_CUSTOM_DEFAULT_SHOW_CIRCLE = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
if (bundle != null) {
widgetIndex = (int) bundle.getSerializable("widgetIndex");
widget = (HybridHRWatchfaceWidget) bundle.getSerializable("widgetSettings");
} else {
throw new IllegalArgumentException("Must provide a widget object when invoking this activity");
}
getFragmentManager().beginTransaction().replace(android.R.id.content, new HybridHRWatchfaceWidgetFragment()).commit();
}
@Override
public void onBackPressed() {
// Hardware back button
Intent output = new Intent();
output.putExtra("widgetIndex", widgetIndex);
output.putExtra("widgetSettings", widget);
setResult(RESULT_OK, output);
finish();
super.onBackPressed();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
// Action bar back button
Intent output = new Intent();
output.putExtra("widgetIndex", widgetIndex);
output.putExtra("widgetSettings", widget);
setResult(RESULT_OK, output);
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
public static class HybridHRWatchfaceWidgetFragment extends PreferenceFragment implements Preference.OnPreferenceChangeListener
{
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.fossil_hr_widget_settings);
widgetTypes = HybridHRWatchfaceWidget.getAvailableWidgetTypes(getActivity().getBaseContext());
ListPreference widgetType = (ListPreference) findPreference("pref_hybridhr_widget_type");
widgetType.setOnPreferenceChangeListener(this);
widgetType.setEntries(widgetTypes.values().toArray(new String[0]));
widgetType.setEntryValues(widgetTypes.keySet().toArray(new String[0]));
widgetType.setValue(widget.getWidgetType());
widgetType.setSummary(widgetTypes.get(widget.getWidgetType()));
updateEnabledCategories();
widgetColors = new String[]{getString(R.string.watchface_dialog_widget_color_white), getString(R.string.watchface_dialog_widget_color_black)};
ListPreference widgetColor = (ListPreference) findPreference("pref_hybridhr_widget_color");
widgetColor.setOnPreferenceChangeListener(this);
widgetColor.setEntries(widgetColors);
widgetColor.setEntryValues(new String[]{"0", "1"});
widgetColor.setValueIndex(widget.getColor());
widgetColor.setSummary(widgetColors[widget.getColor()]);
ListPreference widgetBg = (ListPreference) findPreference("pref_hybridhr_widget_background");
widgetBg.setOnPreferenceChangeListener(this);
widgetBg.setValue(widget.getBackground());
widgetBg.setSummary(widgetBg.getEntry());
EditTextPreference posX = (EditTextPreference) findPreference("pref_hybridhr_widget_pos_x");
posX.setOnPreferenceChangeListener(this);
posX.setText(Integer.toString(widget.getPosX()));
posX.setSummary(Integer.toString(widget.getPosX()));
EditTextPreference posY = (EditTextPreference) findPreference("pref_hybridhr_widget_pos_y");
posY.setOnPreferenceChangeListener(this);
posY.setText(Integer.toString(widget.getPosY()));
posY.setSummary(Integer.toString(widget.getPosY()));
LinkedHashMap<String, String> positionPresets = new LinkedHashMap<String, String>();
for (final HybridHRWidgetPosition position : widget.defaultPositions) {
positionPresets.put(String.valueOf(position.hintStringResource), getString(position.hintStringResource));
}
ListPreference widgetPositionPreset = (ListPreference) findPreference("pref_hybridhr_widget_pos_preset");
widgetPositionPreset.setOnPreferenceChangeListener(this);
widgetPositionPreset.setEntries(positionPresets.values().toArray(new String[0]));
widgetPositionPreset.setEntryValues(positionPresets.keySet().toArray(new String[0]));
String[] timezonesList = TimeZone.getAvailableIDs();
ListPreference widgetTimezone = (ListPreference) findPreference("pref_hybridhr_widget_timezone");
widgetTimezone.setOnPreferenceChangeListener(this);
widgetTimezone.setEntries(timezonesList);
widgetTimezone.setEntryValues(timezonesList);
widgetTimezone.setValue(widget.getExtraConfigString("tzName", WIDGET_2NDTZ_DEFAULT_TZ));
widgetTimezone.setSummary(widget.getExtraConfigString("tzName", WIDGET_2NDTZ_DEFAULT_TZ));
EditTextPreference timezoneDuration = (EditTextPreference) findPreference("pref_hybridhr_widget_timezone_timeout");
timezoneDuration.setOnPreferenceChangeListener(this);
timezoneDuration.setText(Integer.toString(widget.getExtraConfigInt("timeout_secs", WIDGET_2NDTZ_DEFAULT_TIMEOUT)));
timezoneDuration.setSummary(Integer.toString(widget.getExtraConfigInt("timeout_secs", WIDGET_2NDTZ_DEFAULT_TIMEOUT)));
EditTextPreference width = (EditTextPreference) findPreference("pref_hybridhr_widget_width");
width.setOnPreferenceChangeListener(this);
width.setText(Integer.toString(widget.getWidth()));
width.setSummary(Integer.toString(widget.getWidth()));
EditTextPreference customWidgetTimeout = (EditTextPreference) findPreference("pref_hybridhr_widget_custom_timeout");
customWidgetTimeout.setOnPreferenceChangeListener(this);
customWidgetTimeout.setText(Integer.toString(widget.getExtraConfigInt("update_timeout", WIDGET_CUSTOM_DEFAULT_TIMEOUT)));
customWidgetTimeout.setSummary(Integer.toString(widget.getExtraConfigInt("update_timeout", WIDGET_CUSTOM_DEFAULT_TIMEOUT)));
SwitchPreference customWidgetHideText = (SwitchPreference) findPreference("pref_hybridhr_widget_custom_hide_text");
customWidgetHideText.setOnPreferenceChangeListener(this);
customWidgetHideText.setChecked(widget.getExtraConfigBoolean("timeout_hide_text", WIDGET_CUSTOM_DEFAULT_HIDE_TEXT));
SwitchPreference customWidgetShowCircle = (SwitchPreference) findPreference("pref_hybridhr_widget_custom_show_circle");
customWidgetShowCircle.setOnPreferenceChangeListener(this);
customWidgetShowCircle.setChecked(widget.getExtraConfigBoolean("timeout_show_circle", WIDGET_CUSTOM_DEFAULT_SHOW_CIRCLE));
}
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
switch (preference.getKey()) {
case "pref_hybridhr_widget_type":
widget.setWidgetType(newValue.toString());
preference.setSummary(widgetTypes.get(widget.getWidgetType()));
updateEnabledCategories();
if (newValue.toString().equals("widget2ndTZ")) {
widget.setExtraConfigString("tzName", widget.getExtraConfigString("tzName", WIDGET_2NDTZ_DEFAULT_TZ));
widget.setExtraConfigInt("timeout_secs", widget.getExtraConfigInt("timeout_secs", WIDGET_2NDTZ_DEFAULT_TIMEOUT));
} else if (newValue.toString().equals("widgetCustom")) {
widget.setExtraConfigInt("update_timeout", widget.getExtraConfigInt("update_timeout", WIDGET_CUSTOM_DEFAULT_TIMEOUT));
widget.setExtraConfigBoolean("timeout_hide_text", widget.getExtraConfigBoolean("timeout_hide_text", WIDGET_CUSTOM_DEFAULT_HIDE_TEXT));
widget.setExtraConfigBoolean("timeout_show_circle", widget.getExtraConfigBoolean("timeout_show_circle", WIDGET_CUSTOM_DEFAULT_SHOW_CIRCLE));
}
break;
case "pref_hybridhr_widget_color":
widget.setColor(Integer.parseInt(newValue.toString()));
preference.setSummary(widgetColors[widget.getColor()]);
break;
case "pref_hybridhr_widget_background":
widget.setBackground(newValue.toString());
((ListPreference)preference).setValue(newValue.toString());
preference.setSummary(((ListPreference)preference).getEntry());
break;
case "pref_hybridhr_widget_pos_x":
widget.setPosX(Integer.parseInt(newValue.toString()));
preference.setSummary(newValue.toString());
break;
case "pref_hybridhr_widget_pos_y":
widget.setPosY(Integer.parseInt(newValue.toString()));
preference.setSummary(newValue.toString());
break;
case "pref_hybridhr_widget_pos_preset":
LinkedHashMap<String, String> positionPresets = new LinkedHashMap<String, String>();
for (final HybridHRWidgetPosition position : widget.defaultPositions){
if (newValue.toString().equals(String.valueOf(position.hintStringResource))) {
widget.setPosX(position.posX);
widget.setPosY(position.posY);
EditTextPreference prefPosX = (EditTextPreference) findPreference("pref_hybridhr_widget_pos_x");
EditTextPreference prefPosY = (EditTextPreference) findPreference("pref_hybridhr_widget_pos_y");
prefPosX.setSummary(String.valueOf(position.posX));
prefPosY.setSummary(String.valueOf(position.posY));
}
}
break;
case "pref_hybridhr_widget_timezone":
widget.setExtraConfigString("tzName", newValue.toString());
preference.setSummary(newValue.toString());
break;
case "pref_hybridhr_widget_timezone_timeout":
widget.setExtraConfigInt("timeout_secs", Integer.parseInt(newValue.toString()));
preference.setSummary(newValue.toString());
break;
case "pref_hybridhr_widget_width":
widget.setWidth(Integer.parseInt(newValue.toString()));
preference.setSummary(newValue.toString());
break;
case "pref_hybridhr_widget_custom_timeout":
widget.setExtraConfigInt("update_timeout", Integer.parseInt(newValue.toString()));
preference.setSummary(newValue.toString());
break;
case "pref_hybridhr_widget_custom_hide_text":
widget.setExtraConfigBoolean("timeout_hide_text", (boolean) newValue);
break;
case "pref_hybridhr_widget_custom_show_circle":
widget.setExtraConfigBoolean("timeout_show_circle", (boolean) newValue);
break;
}
return true;
}
private void updateEnabledCategories() {
PreferenceCategory cat2ndTZ = (PreferenceCategory) findPreference("widget_pref_category_2nd_tz_widget");
if (widget.getWidgetType().equals("widget2ndTZ")) {
cat2ndTZ.setEnabled(true);
} else {
cat2ndTZ.setEnabled(false);
}
PreferenceCategory catCustom = (PreferenceCategory) findPreference("widget_pref_category_custom_widget");
if (widget.getWidgetType().equals("widgetCustom")) {
catCustom.setEnabled(true);
} else {
catCustom.setEnabled(false);
}
}
}
}