Overview
MorseIt follows the standard Android project structure with a single Activity architecture. The app is lightweight and focused on text-to-Morse translation with clipboard functionality.Directory Structure
Package Structure
The application uses a simple package structure undercom.subin.morseit:
- Package:
com.subin.morseit - Main Activity:
MainActivity.java - Application ID:
com.subin.morseit
As a single-Activity app, all UI logic and business logic are contained within
MainActivity.java.MainActivity Architecture
TheMainActivity class (app/src/main/java/com/subin/morseit/MainActivity.java) is the core of the application.
Class Structure
Key Components
UI Components
EditText- Input field for plain textTextView- Output display for Morse codeButton(Translate) - Triggers translationButton(Copy) - Copies result to clipboard
Core Functionality
translateToMorse()- Converts text to MorseClipboardManager- Handles copy operationsHashMap<Character, String>- Morse code mapping
Translation Logic
ThetranslateToMorse() method (MainActivity.java:62) implements the core translation algorithm:
- Creates a
HashMapmapping characters to Morse code patterns - Iterates through input text character by character
- Looks up each character in the map
- Appends Morse code or original character (if not found)
- Returns the complete Morse code string
Supported Characters
Supported Characters
The translation map includes:
- Uppercase letters (A-Z)
- Lowercase letters (a-z)
- Digits (0-9)
- Punctuation (. , ? =)
- Spaces and unsupported characters are preserved as-is
Event Handlers
Two primary click listeners handle user interactions: Translate Button (MainActivity.java:32-41):
MainActivity.java:46-59):
Resource Files (res/)
Layout Files
activity_main.xml (app/src/main/res/layout/activity_main.xml):
- Uses
ConstraintLayoutas the root layout - Contains input
EditTextwith ID@+id/editText - Contains output
TextViewwith ID@+id/textView - Two
Buttonelements with custom backgrounds - All components use constraint-based positioning
Drawable Resources
Custom drawable shapes for buttons:button_shape_1.xml- Translate and Copy button stylingbutton_shape_2.xml- Input/output field backgroundsic_launcher_background.xml- App icon backgroundic_launcher_foreground.xml- App icon foreground
Font Resources
The app includes custom fonts:domine.xml- Domine font familyroboto.xml- Roboto font (used in output TextView)
Values Resources
AndroidManifest.xml
The manifest file (app/src/main/AndroidManifest.xml) defines:
No special permissions are required as the app only uses standard UI components and clipboard access.
Build Configuration
app/build.gradle
Key configuration settings:Root build.gradle
Project-level Gradle configuration:Testing Structure
Unit Tests
Location:app/src/test/java/com/subin/morseit/ExampleUnitTest.java
- JUnit-based tests
- Run on the JVM without requiring an Android device
Instrumented Tests
Location:app/src/androidTest/java/com/subin/morseit/ExampleInstrumentedTest.java
- Espresso-based UI tests
- Require a connected device or emulator
- Use AndroidJUnitRunner
Architecture Patterns
MorseIt uses a simple, straightforward architecture:- Pattern: Single Activity with inline event handlers
- UI Framework: Android Views with ConstraintLayout
- Data: In-memory HashMap for character mapping
- State Management: Direct view manipulation
Key Files Reference
| File | Location | Purpose |
|---|---|---|
| MainActivity.java | app/src/main/java/com/subin/morseit/ | Core application logic |
| activity_main.xml | app/src/main/res/layout/ | Main UI layout |
| AndroidManifest.xml | app/src/main/ | App configuration |
| build.gradle (app) | app/ | Module-level build config |
| build.gradle (project) | Root | Project-level build config |
Next Steps
- Review the Setup Guide for environment configuration
- Learn how to Build and Run the application
- Explore the source code in
app/src/main/java/com/subin/morseit/