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"/>