diff --git a/app/src/main/java/xdsopl/robot36/Decoder.java b/app/src/main/java/xdsopl/robot36/Decoder.java
index 519657a..33808e3 100644
--- a/app/src/main/java/xdsopl/robot36/Decoder.java
+++ b/app/src/main/java/xdsopl/robot36/Decoder.java
@@ -437,23 +437,28 @@ public class Decoder {
}
public void forceMode(String name) {
- lockMode = true;
+ if (rawMode.getName().equals(name)) {
+ lockMode = true;
+ imageBuffer.line = -1;
+ currentMode = rawMode;
+ return;
+ }
Mode mode = findMode(syncPulse5msModes, name);
if (mode == null)
mode = findMode(syncPulse9msModes, name);
if (mode == null)
mode = findMode(syncPulse20msModes, name);
- if (mode == currentMode)
+ if (mode == currentMode) {
+ lockMode = true;
return;
- imageBuffer.line = -1;
- if (mode == null)
- mode = rawMode;
- else
+ }
+ if (mode != null) {
+ lockMode = true;
+ imageBuffer.line = -1;
+ currentMode = mode;
currentScanLineSamples = mode.getScanLineSamples();
- currentMode = mode;
- }
-
- public void autoMode() {
+ return;
+ }
lockMode = false;
}
}
diff --git a/app/src/main/java/xdsopl/robot36/MainActivity.java b/app/src/main/java/xdsopl/robot36/MainActivity.java
index 2f66138..77cb475 100644
--- a/app/src/main/java/xdsopl/robot36/MainActivity.java
+++ b/app/src/main/java/xdsopl/robot36/MainActivity.java
@@ -69,6 +69,7 @@ public class MainActivity extends AppCompatActivity {
private AudioRecord audioRecord;
private Decoder decoder;
private Menu menu;
+ private String forceMode;
private int recordRate;
private int recordChannel;
private int audioSource;
@@ -84,13 +85,24 @@ public class MainActivity extends AppCompatActivity {
}
private void forceMode(int id) {
+ menu.findItem(R.id.action_auto_mode).setIcon(R.drawable.baseline_lock_24);
+ forceMode = getString(id);
if (decoder != null)
- decoder.forceMode(getString(id));
+ decoder.forceMode(forceMode);
}
private void autoMode() {
+ int icon;
+ if (decoder == null || forceMode != null && !forceMode.equals(getString(R.string.auto_mode))) {
+ icon = R.drawable.baseline_auto_mode_24;
+ forceMode = getString(R.string.auto_mode);
+ } else {
+ icon = R.drawable.baseline_lock_24;
+ forceMode = decoder.currentMode.getName();
+ }
+ menu.findItem(R.id.action_auto_mode).setIcon(icon);
if (decoder != null)
- decoder.autoMode();
+ decoder.forceMode(forceMode);
}
private final AudioRecord.OnRecordPositionUpdateListener recordListener = new AudioRecord.OnRecordPositionUpdateListener() {
@@ -197,8 +209,10 @@ public class MainActivity extends AppCompatActivity {
if (audioRecord.getState() == AudioRecord.STATE_INITIALIZED) {
audioRecord.setRecordPositionUpdateListener(recordListener);
audioRecord.setPositionNotificationPeriod(frameCount);
- if (rateChanged)
+ if (rateChanged) {
decoder = new Decoder(scopeBuffer, imageBuffer, recordRate);
+ decoder.forceMode(forceMode);
+ }
startListening();
} else {
setStatus(R.string.audio_init_failed);
diff --git a/app/src/main/res/drawable/baseline_auto_mode_24.xml b/app/src/main/res/drawable/baseline_auto_mode_24.xml
new file mode 100644
index 0000000..8263db9
--- /dev/null
+++ b/app/src/main/res/drawable/baseline_auto_mode_24.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/baseline_lock_24.xml b/app/src/main/res/drawable/baseline_lock_24.xml
new file mode 100644
index 0000000..1813549
--- /dev/null
+++ b/app/src/main/res/drawable/baseline_lock_24.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml
index 9f3ea07..43ffe51 100644
--- a/app/src/main/res/menu/menu_main.xml
+++ b/app/src/main/res/menu/menu_main.xml
@@ -17,7 +17,10 @@
app:showAsAction="always" />
+ android:icon="@drawable/baseline_auto_mode_24"
+ android:title="@string/auto_mode"
+ app:iconTint="@color/tint"
+ app:showAsAction="always"/>
-