The goal of this project is to convert a simple Java stopwatch to an Android application. The original java code can be found here.
- Modeling state-dependent behavior with state machine diagrams (see also here)
- Distinguishing between view states and (behavioral) model states
- Event-driven/asynchronous program execution
- User-triggered input events
- Internal events from background timers
- Concurrency issues: single-thread rule of accessing/updating the view in the GUI thread
- Key architectural issues and patterns
- Simple dependency injection (DI)
- Model-view-adapter (MVA) architectural pattern
- Mapping MVA to Android
- Difference between MVA and model-view-controller (MVC)
- Distinguishing among dumb, reactive, and autonomous model components
- Key design patterns
- Implementing event-driven behavior using the Observer pattern
- Implementing state-dependent behavior using the State pattern
- Command pattern for representing tasks as objects
- Façade pattern for hiding complexity in the model from the adapter
- Relevant class-level design principles
- Dependency Inversion Principle (DIP)
- Single Responsibility Principle (SRP)
- Interface Segregation Principle (ISP)
- Package-level architecture and relevant principles
- Dependency graph (see also here)
- Stable Dependencies Principle (SDP)
- Acyclic Dependencies Principle (ADP)
- Architectural journey
- Different types of testing
- Component-level unit testing
- System testing
- Instrumentation testing
- Mock-based testing
- Testcase Superclass pattern (uses Template Method pattern)
- Test coverage
Check out the project using Android Studio. This creates the local.properties
file
with the required line
sdk.dir=<root folder of Android Studio's Android SDK installation>
In Android Studio: Run > Run app
In Android Studio:
View > Tool Windows > Build Variants
Test Artifact: Unit Tests
- right-click on
app/java/edu.luc.etl.cs313... (test)
, then chooseRun Tests in edu.luc.etl.cs313...
You can also use Gradle:
$ ./gradlew testDebug
You can view the resulting test reports in HTML by opening this file in your browser:
app/build/reports/tests/debug/index.html
In Android Studio:
View > Tool Windows > Build Variants
Test Artifact: Android Instrumentation Tests
- right-click on
app/java/edu...simplestopwatch (androidTest)
, then chooseRun Tests in edu...
You can also use Gradle:
$ ./gradlew connectedDebugAndroidTest