diff --git a/app/src/main/java/com/openipc/pixelpilot/osd/OSDElement.java b/app/src/main/java/com/openipc/pixelpilot/osd/OSDElement.java index fd73d37b..a42052b3 100644 --- a/app/src/main/java/com/openipc/pixelpilot/osd/OSDElement.java +++ b/app/src/main/java/com/openipc/pixelpilot/osd/OSDElement.java @@ -1,12 +1,29 @@ package com.openipc.pixelpilot.osd; +import android.view.View; + public class OSDElement { public String name; - public MovableLayout layout; + public MovableLayout layout; // null for a fixed item + public View fixedView; // fixed item, e.g. the centre dot + public boolean defaultEnabled; public OSDElement(String n, MovableLayout l) { name = n; layout = l; + fixedView = null; + defaultEnabled = false; + } + + public OSDElement(String n, View fixed, boolean enabledByDefault) { + name = n; + layout = null; + fixedView = fixed; + defaultEnabled = enabledByDefault; + } + + public View view() { + return layout != null ? layout : fixedView; } public String prefName() { diff --git a/app/src/main/java/com/openipc/pixelpilot/osd/OSDManager.java b/app/src/main/java/com/openipc/pixelpilot/osd/OSDManager.java index 68e9c088..2cc32051 100644 --- a/app/src/main/java/com/openipc/pixelpilot/osd/OSDManager.java +++ b/app/src/main/java/com/openipc/pixelpilot/osd/OSDManager.java @@ -38,7 +38,8 @@ public OSDManager(Context context, ActivityVideoBinding binding) { public void lockOSD(Boolean isLocked) { for (int i = 0; i < listOSDItems.size(); i++) { - listOSDItems.get(i).layout.setMovable(!isLocked); + MovableLayout layout = listOSDItems.get(i).layout; + if (layout != null) layout.setMovable(!isLocked); } osdLocked = isLocked; } @@ -52,8 +53,12 @@ public String getTitle() { } public void onOSDItemCheckChanged(OSDElement element, boolean isChecked) { - // Show or hide the ImageView corresponding to the checkbox position - element.layout.setVisibility(isChecked ? View.VISIBLE : View.GONE); + // Show or hide the ImageView corresponding to the checkbox position. + // The centre dot stays hidden in VR mode, where there is no single video view. + boolean show = isChecked && (element.layout != null + || binding.mainVideoSurface.getVisibility() == View.VISIBLE + || binding.mainVideo.getVisibility() == View.VISIBLE); + element.view().setVisibility(show ? View.VISIBLE : View.GONE); SharedPreferences prefs = context.getSharedPreferences("osd_config", MODE_PRIVATE); SharedPreferences.Editor editor = prefs.edit(); editor.putBoolean(element.prefName() + "_enabled", isChecked); @@ -81,6 +86,7 @@ public void onFinish() { listOSDItems.add(new OSDElement("Battery Air", binding.itemBat)); listOSDItems.add(new OSDElement("Battery Cell Air", binding.itemBatCell)); listOSDItems.add(new OSDElement("Battery GS", binding.itemGSBattery)); + listOSDItems.add(new OSDElement("Center Dot", binding.imgCenterDot, true)); listOSDItems.add(new OSDElement("Current", binding.itemCurrent)); listOSDItems.add(new OSDElement("Flight Mode", binding.itemFlightMode)); listOSDItems.add(new OSDElement("Ground Speed", binding.itemGndSpeed)); @@ -106,14 +112,13 @@ public void onFinish() { public boolean isElementEnabled(OSDElement elem) { SharedPreferences prefs = context.getSharedPreferences("osd_config", MODE_PRIVATE); - return prefs.getBoolean(elem.prefName() + "_enabled", false); + return prefs.getBoolean(elem.prefName() + "_enabled", elem.defaultEnabled); } public void restoreOSDConfig() { - SharedPreferences prefs = context.getSharedPreferences("osd_config", MODE_PRIVATE); for (OSDElement element : listOSDItems) { - boolean enabled = prefs.getBoolean(element.prefName() + "_enabled", false); - onOSDItemCheckChanged(element, enabled); + onOSDItemCheckChanged(element, isElementEnabled(element)); + if (element.layout == null) continue; // fixed item: no saved position element.layout.restorePosition(element.prefName()); element.layout.setMovable(!isOSDLocked()); } diff --git a/app/src/main/res/drawable/osd_center_dot.xml b/app/src/main/res/drawable/osd_center_dot.xml new file mode 100644 index 00000000..3bb0e336 --- /dev/null +++ b/app/src/main/res/drawable/osd_center_dot.xml @@ -0,0 +1,12 @@ + + + + + + + diff --git a/app/src/main/res/layout/activity_video.xml b/app/src/main/res/layout/activity_video.xml index 8aa7e519..ccd34212 100644 --- a/app/src/main/res/layout/activity_video.xml +++ b/app/src/main/res/layout/activity_video.xml @@ -733,4 +733,18 @@ + + +