1
0
mirror of https://codeberg.org/Freeyourgadget/Gadgetbridge synced 2024-12-17 22:27:46 +01:00

Fossil Hybrid HR: Add update timeout to custom widget

This commit is contained in:
Arjan Schrijver 2021-11-17 13:42:14 +01:00
parent dde34a35db
commit d1062a30b2
7 changed files with 76 additions and 11 deletions

View File

@ -352,6 +352,7 @@ public class HybridHRWatchfaceDesignerActivity extends AbstractGBActivity implem
if (layoutItem.getString("type").equals("comp")) { if (layoutItem.getString("type").equals("comp")) {
String widgetName = layoutItem.getString("name"); String widgetName = layoutItem.getString("name");
String widgetTimezone = null; String widgetTimezone = null;
int widgetUpdateTimeout = -1;
switch (widgetName) { switch (widgetName) {
case "dateSSE": case "dateSSE":
widgetName = "widgetDate"; widgetName = "widgetDate";
@ -381,24 +382,35 @@ public class HybridHRWatchfaceDesignerActivity extends AbstractGBActivity implem
widgetName = "widget2ndTZ"; widgetName = "widget2ndTZ";
break; break;
} }
int widgetColor = layoutItem.getString("color").equals("white") ? HybridHRWatchfaceWidget.COLOR_WHITE : HybridHRWatchfaceWidget.COLOR_BLACK;
if (widgetName.startsWith("widget2ndTZ")) { if (widgetName.startsWith("widget2ndTZ")) {
try { try {
widgetName = "widget2ndTZ"; widgetName = "widget2ndTZ";
JSONObject widgetData = layoutItem.getJSONObject("data"); JSONObject widgetData = layoutItem.getJSONObject("data");
widgetTimezone = widgetData.getString("tzName"); widgetTimezone = widgetData.getString("tzName");
widgets.add(new HybridHRWatchfaceWidget(widgetName,
layoutItem.getJSONObject("pos").getInt("x"),
layoutItem.getJSONObject("pos").getInt("y"),
widgetColor,
widgetTimezone));
} catch (JSONException e) { } catch (JSONException e) {
LOG.error("Couldn't determine tzName!", e); LOG.error("Couldn't determine tzName!", e);
} }
} } else if (widgetName.startsWith("widgetCustom")) {
if (widgetName.startsWith("widgetCustom")) {
widgetName = "widgetCustom"; widgetName = "widgetCustom";
JSONObject widgetData = layoutItem.getJSONObject("data");
widgetUpdateTimeout = widgetData.getInt("update_timeout");
widgets.add(new HybridHRWatchfaceWidget(widgetName,
layoutItem.getJSONObject("pos").getInt("x"),
layoutItem.getJSONObject("pos").getInt("y"),
widgetColor,
widgetUpdateTimeout));
} else {
widgets.add(new HybridHRWatchfaceWidget(widgetName,
layoutItem.getJSONObject("pos").getInt("x"),
layoutItem.getJSONObject("pos").getInt("y"),
widgetColor));
} }
int widgetColor = layoutItem.getString("color").equals("white") ? HybridHRWatchfaceWidget.COLOR_WHITE : HybridHRWatchfaceWidget.COLOR_BLACK;
widgets.add(new HybridHRWatchfaceWidget(widgetName,
layoutItem.getJSONObject("pos").getInt("x"),
layoutItem.getJSONObject("pos").getInt("y"),
widgetColor,
widgetTimezone));
} }
} }
} catch (JSONException e) { } catch (JSONException e) {
@ -596,7 +608,14 @@ public class HybridHRWatchfaceDesignerActivity extends AbstractGBActivity implem
} else { } else {
tzSpinner.setSelection(Arrays.asList(timezonesList).indexOf("Etc/UTC")); tzSpinner.setSelection(Arrays.asList(timezonesList).indexOf("Etc/UTC"));
} }
// Show timezone spinner only when 2nd TZ widget is selected // Set update timeout value
final LinearLayout updateTimeoutLayout = layout.findViewById(R.id.watchface_widget_update_timeout_layout);
updateTimeoutLayout.setVisibility(View.GONE);
final EditText updateTimeout = layout.findViewById(R.id.watchface_widget_update_timeout);
if ((widget != null) && (widget.getUpdateTimeout() >= 0)) {
updateTimeout.setText(Integer.toString(widget.getUpdateTimeout()));
}
// Show certain input fields only when the relevant TZ widget is selected
typeSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { typeSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override @Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
@ -606,6 +625,11 @@ public class HybridHRWatchfaceDesignerActivity extends AbstractGBActivity implem
} else { } else {
timezoneLayout.setVisibility(View.GONE); timezoneLayout.setVisibility(View.GONE);
} }
if (selectedType.equals("widgetCustom")) {
updateTimeoutLayout.setVisibility(View.VISIBLE);
} else {
updateTimeoutLayout.setVisibility(View.GONE);
}
} }
@Override @Override
public void onNothingSelected(AdapterView<?> parent) { } public void onNothingSelected(AdapterView<?> parent) { }
@ -641,9 +665,19 @@ public class HybridHRWatchfaceDesignerActivity extends AbstractGBActivity implem
if (selectedPosY > 240) selectedPosY = 240; if (selectedPosY > 240) selectedPosY = 240;
String selectedType = widgetTypesArray.get(typeSpinner.getSelectedItemPosition()); String selectedType = widgetTypesArray.get(typeSpinner.getSelectedItemPosition());
String selectedTZ = tzSpinner.getSelectedItem().toString(); String selectedTZ = tzSpinner.getSelectedItem().toString();
int selectedUpdateTimeout;
try {
selectedUpdateTimeout = Integer.parseInt(updateTimeout.getText().toString());
} catch (NumberFormatException e) {
GB.toast(getString(R.string.watchface_toast_settings_incomplete), Toast.LENGTH_SHORT, GB.WARN);
LOG.warn("Error parsing input", e);
return;
}
HybridHRWatchfaceWidget widgetConfig; HybridHRWatchfaceWidget widgetConfig;
if (selectedType.equals("widget2ndTZ")) { if (selectedType.equals("widget2ndTZ")) {
widgetConfig = new HybridHRWatchfaceWidget(selectedType, selectedPosX, selectedPosY, colorSpinner.getSelectedItemPosition(), selectedTZ); widgetConfig = new HybridHRWatchfaceWidget(selectedType, selectedPosX, selectedPosY, colorSpinner.getSelectedItemPosition(), selectedTZ);
} else if (selectedType.equals("widgetCustom")) {
widgetConfig = new HybridHRWatchfaceWidget(selectedType, selectedPosX, selectedPosY, colorSpinner.getSelectedItemPosition(), selectedUpdateTimeout);
} else { } else {
widgetConfig = new HybridHRWatchfaceWidget(selectedType, selectedPosX, selectedPosY, colorSpinner.getSelectedItemPosition()); widgetConfig = new HybridHRWatchfaceWidget(selectedType, selectedPosX, selectedPosY, colorSpinner.getSelectedItemPosition());
} }

View File

@ -76,6 +76,11 @@ public class HybridHRWatchfaceFactory {
widget.put("name", widgetDesc.getWidgetType()); widget.put("name", widgetDesc.getWidgetType());
widget.put("goal_ring", false); widget.put("goal_ring", false);
widget.put("color", widgetDesc.getColor() == HybridHRWatchfaceWidget.COLOR_WHITE ? "white" : "black"); widget.put("color", widgetDesc.getColor() == HybridHRWatchfaceWidget.COLOR_WHITE ? "white" : "black");
if (widgetDesc.getUpdateTimeout() >= 0) {
JSONObject data = new JSONObject();
data.put("update_timeout", widgetDesc.getUpdateTimeout());
widget.put("data", data);
}
break; break;
case "widget2ndTZ": case "widget2ndTZ":
widget.put("type", "comp"); widget.put("type", "comp");

View File

@ -33,6 +33,7 @@ public class HybridHRWatchfaceWidget {
private int posY; private int posY;
private int color = 0; private int color = 0;
private String timezone; private String timezone;
private int updateTimeout = -1;
public static int COLOR_WHITE = 0; public static int COLOR_WHITE = 0;
public static int COLOR_BLACK = 1; public static int COLOR_BLACK = 1;
@ -47,6 +48,10 @@ public class HybridHRWatchfaceWidget {
this(widgetType, posX, posY, color); this(widgetType, posX, posY, color);
this.timezone = timezone; this.timezone = timezone;
} }
public HybridHRWatchfaceWidget(String widgetType, int posX, int posY, int color, int updateTimeout) {
this(widgetType, posX, posY, color);
this.updateTimeout = updateTimeout;
}
public static LinkedHashMap<String, String> getAvailableWidgetTypes(Context context) { public static LinkedHashMap<String, String> getAvailableWidgetTypes(Context context) {
@ -98,4 +103,7 @@ public class HybridHRWatchfaceWidget {
public String getTimezone() { public String getTimezone() {
return timezone; return timezone;
} }
public int getUpdateTimeout() {
return updateTimeout;
}
} }

View File

@ -84,11 +84,27 @@
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Time zone:" /> android:text="@string/watchface_dialog_widget_timezone" />
<Spinner <Spinner
android:id="@+id/watchface_widget_timezone_spinner" android:id="@+id/watchface_widget_timezone_spinner"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" /> android:layout_height="wrap_content" />
</LinearLayout> </LinearLayout>
<LinearLayout
android:id="@+id/watchface_widget_update_timeout_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/watchface_dialog_widget_update_timeout" />
<EditText
android:id="@+id/watchface_widget_update_timeout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number"/>
</LinearLayout>
</LinearLayout> </LinearLayout>

View File

@ -1388,5 +1388,7 @@
<string name="sony_automatic_power_off_3_hour">3 hours</string> <string name="sony_automatic_power_off_3_hour">3 hours</string>
<string name="sony_automatic_power_off_when_taken_off">When taken off</string> <string name="sony_automatic_power_off_when_taken_off">When taken off</string>
<string name="watchface_widget_type_custom">Custom widget</string> <string name="watchface_widget_type_custom">Custom widget</string>
<string name="watchface_dialog_widget_timezone">Time zone:</string>
<string name="watchface_dialog_widget_update_timeout">Update timeout in minutes:</string>
</resources> </resources>

@ -1 +1 @@
Subproject commit 6270e0478c1aa5cd3fde75567d9a1f00bdddb9c5 Subproject commit 8855d1735b07939f483759cb7e836a8418f30515