feat: add CW decoder and linear calculator page

This commit is contained in:
atsunatsu committed 2026-08-04 17:49:28 +08:00
1 parent a7b41c95c7
commit a333192df5
70 files changed
+12470 -94

No files matched your search

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:tint="?attr/colorControlNormal"
android:height="24dp"
android:width="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M6,19c0,1.1 0.9,2 2,2h8c1.1,0 2,-0.9 2,-2V7H6v12zM19,4h-3.5l-1,-1h-5l-1,1H5v2h14V4z"/>
</vector>
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:tint="?attr/colorControlNormal"
android:height="24dp"
android:width="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M6,19h4L10,5L6,5v14zM14,5v14h4L18,5h-4z"/>
</vector>
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:tint="?attr/colorControlNormal"
android:height="24dp"
android:width="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M17,3L5,3c-1.11,0 -2,0.9 -2,2v14c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2L21,7l-4,-4zM12,19c-1.66,0 -3,-1.34 -3,-3s1.34,-3 3,-3 3,1.34 3,3 -1.34,3 -3,3zM15,9L5,9L5,5h10v4z"/>
</vector>
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:tint="?attr/colorControlNormal"
android:height="24dp"
android:width="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M18,16.08c-0.76,0 -1.44,0.3 -1.96,0.77L8.91,12.7c0.05,-0.23 0.09,-0.46 0.09,-0.7s-0.04,-0.47 -0.09,-0.7l7.05,-4.11c0.54,0.5 1.25,0.81 2.04,0.81 1.66,0 3,-1.34 3,-3s-1.34,-3 -3,-3 -3,1.34 -3,3c0,0.24 0.04,0.47 0.09,0.7L8.04,9.81C7.5,9.31 6.79,9 6,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3c0.79,0 1.5,-0.31 2.04,-0.81l7.12,4.16c-0.05,0.21 -0.08,0.43 -0.08,0.65 0,1.61 1.31,2.92 2.92,2.92 1.61,0 2.92,-1.31 2.92,-2.92s-1.31,-2.92 -2.92,-2.92z"/>
</vector>
@@ -0,0 +1,55 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"
android:fitsSystemWindows="true"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:id="@+id/verticalLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:keepScreenOn="true">
<TextView
android:textColor="#ffffff"
android:id="@+id/statusTextView"
android:background="@color/purple_500"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/idle"/>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="100dp">
<com.ve3nea.morse_expert.WaterfallSurfaceView
android:id="@+id/waterfallView"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:contentDescription="@string/waterfall_display"/>
<com.ve3nea.morse_expert.ScaleView
android:id="@+id/scaleView"
android:background="#24545a"
android:layout_width="12dp"
android:layout_height="match_parent"
android:layout_weight="0"
android:contentDescription="@string/frequency_scale"/>
</LinearLayout>
<com.ve3nea.morse_expert.DecodedTextView
android:textSize="18sp"
android:typeface="monospace"
android:textColor="#444444"
android:textColorHint="#888888"
android:gravity="start|top"
android:id="@+id/decodedTextView"
android:background="#d1f0f4"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="0dp"
android:hint="@string/decoded_text"
android:freezesText="false"
android:layout_weight="1"
android:inputType="none"
android:fadeScrollbars="false"
android:textIsSelectable="true"/>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
@@ -0,0 +1,59 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:id="@+id/verticalLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:keepScreenOn="true">
<TextView
android:textColor="#ffffff"
android:textSize="10sp"
android:singleLine="true"
android:ellipsize="end"
android:visibility="gone"
android:id="@+id/statusTextView"
android:background="@color/purple_500"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/idle"/>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="80dp">
<com.ve3nea.morse_expert.WaterfallSurfaceView
android:id="@+id/waterfallView"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:contentDescription="@string/waterfall_display"/>
<com.ve3nea.morse_expert.ScaleView
android:id="@+id/scaleView"
android:background="#24545a"
android:layout_width="8dp"
android:layout_height="match_parent"
android:layout_weight="0"
android:contentDescription="@string/frequency_scale"/>
</LinearLayout>
<com.ve3nea.morse_expert.DecodedTextView
android:textSize="12sp"
android:typeface="monospace"
android:textColor="#444444"
android:textColorHint="#888888"
android:gravity="start|top"
android:id="@+id/decodedTextView"
android:background="#d1f0f4"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="0dp"
android:hint="@string/decoded_text"
android:freezesText="false"
android:layout_weight="1"
android:minHeight="48dp"
android:inputType="none"
android:fadeScrollbars="false"
android:textIsSelectable="true"/>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:icon="@drawable/ic_baseline_pause_24"
android:id="@+id/pause_mnu"
android:title="@string/pause"
app:showAsAction="ifRoom"/>
<item
android:icon="@drawable/ic_baseline_delete_24"
android:id="@+id/clear_mnu"
android:title="@string/clear"
app:showAsAction="ifRoom"/>
<item
android:icon="@drawable/ic_baseline_save_24"
android:id="@+id/save_mnu"
android:title="@string/save_text"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/record_signals_mnu"
android:title="@string/record_signals"/>
<item
android:id="@+id/settings_mnu"
android:title="@string/settings"/>
<item
android:id="@+id/help_mnu"
android:title="@string/help"/>
<item
android:id="@+id/rate_mnu"
android:title="@string/rate"/>
<item
android:id="@+id/premium_mnu"
android:title="@string/premium"/>
</menu>
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="purple_500">#ff6200ee</color>
<integer name="default_font_size">18</integer>
<string name="idle">Idle</string>
<string name="waterfall_display">Waterfall display</string>
<string name="frequency_scale">Frequency scale</string>
<string name="decoded_text">Decoded text</string>
<string name="clear">Clear</string>
<string name="pause">Pause Decoding</string>
<string name="save_text">Save Text</string>
<string name="record_signals">Record Signals</string>
<string name="settings">Settings</string>
<string name="help">Online Help</string>
<string name="rate">Rate this App</string>
<string name="premium">Get Premium Version</string>
<string name="tap_back_again_to_close">Tap Back again to close the app</string>
<string name="message_type">Message Type</string>
</resources>