Thank you for your interest in contributing to Echo Music! This document provides comprehensive guidelines and information for contributors.
- Code of Conduct
- Getting Started
- Development Setup
- Handling Sensitive Information
- Contributing Guidelines
- Pull Request Process
- Issue Guidelines
- Coding Standards
- Testing
- Documentation
- Release Process
- Community Guidelines
By participating in this project, you agree to abide by our Code of Conduct:
We are committed to providing a welcoming and inspiring community for all. We pledge to:
- Be respectful and inclusive
- Use welcoming and inclusive language
- Be respectful of differing viewpoints and experiences
- Accept constructive criticism gracefully
- Focus on what's best for the community
- Show empathy towards other community members
- Use welcoming and inclusive language
- Be respectful of differing viewpoints and experiences
- Gracefully accept constructive criticism
- Focus on what is best for the community
- Show empathy towards other community members
- The use of sexualized language or imagery
- Trolling, insulting/derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others' private information without explicit permission
- Other conduct which could reasonably be considered inappropriate in a professional setting
- Android Studio Hedgehog or later
- JDK 17 or later
- Android SDK 26 or later
- Git
- Basic knowledge of Kotlin and Android development
- Understanding of Jetpack Compose (preferred)
- Familiarity with MVVM architecture pattern
- Fork the repository on GitHub
- Clone your fork locally:
git clone https://github.com/YOUR_USERNAME/Echo-Music.git cd Echo-Music - Add the upstream repository:
git remote add upstream https://github.com/iad1tya/Echo-Music.git
-
Install Android Studio with the latest Android SDK
-
Set up local.properties:
cp local.properties.template local.properties
Edit
local.propertiesand add your Android SDK path:sdk.dir=/path/to/your/Android/sdkIMPORTANT: Never commit your
local.propertiesfile to the repository as it contains local configuration specific to your development environment. The.gitignorefile is configured to exclude this file.
If you want to test Firebase features:
- Create a Firebase project
- Add Android apps with package names:
iad1tya.echo.music(release)iad1tya.echo.music.debug(debug)
- Copy the template and configure it with your Firebase credentials:
cp app/google-services.json.template app/google-services.json
- Edit
app/google-services.jsonwith your Firebase project details
IMPORTANT: Never commit your actual
google-services.jsonfile to the repository as it contains sensitive API keys. The.gitignorefile is configured to exclude this file.
When contributing to Echo Music, it's crucial to handle sensitive information properly:
-
local.properties
- Contains your local SDK path
- Use the provided template (
local.properties.template) instead
-
google-services.json
- Contains Firebase API keys and project credentials
- Use the provided template (
app/google-services.json.template) instead
-
Build outputs
- Never commit
.apk,.aab,.class, or other build artifacts - These are automatically excluded by
.gitignore
- Never commit
-
IDE-specific files
- Most
.idea/directory contents should not be committed - Only commit IDE configuration files that are essential for project setup
- Most
- API Keys: Never hardcode API keys in the source code
- Credentials: Never include usernames, passwords, or tokens in commits
- Personal Information: Remove any personal information before committing
- Before Committing: Always review your changes to ensure no sensitive information is included
- If Accidentally Committed: If you accidentally commit sensitive information, contact a project maintainer immediately
./gradlew assembleDebugIMPORTANT: Never commit sensitive files to the repository:
google-services.json- Contains Firebase API keyslocal.properties- Contains local development paths*.keystore/*.jks- App signing keyssecrets.properties- API keys and secrets**/assets/po_token.html- YouTube authentication tokens
These files are automatically ignored by .gitignore but always double-check before committing.
We welcome various types of contributions:
- Bug Fixes: Fix existing issues and improve stability
- New Features: Add new functionality and capabilities
- Documentation: Improve documentation and guides
- UI/UX Improvements: Enhance user interface and experience
- Performance: Optimize app performance and memory usage
- Testing: Add or improve tests and test coverage
- Translations: Add new language support and improve existing translations
- Code Quality: Refactor code, improve architecture, and fix code smells
- Security: Identify and fix security vulnerabilities
- Check existing issues to see if your idea is already being discussed
- Create an issue for significant changes to discuss the approach
- Fork the repository and create a feature branch
- Follow the coding standards outlined below
git checkout -b feature/your-feature-name
# or
git checkout -b fix/issue-number-description- Write clean, readable code
- Follow the existing code style
- Add comments for complex logic
- Update documentation if needed
- Add tests for new features
# Run unit tests
./gradlew test
# Run instrumented tests
./gradlew connectedAndroidTest
# Run lint checks
./gradlew lint
# Build the project
./gradlew assembleDebugUse clear, descriptive commit messages:
git add .
git commit -m "feat: add dark mode toggle to settings
- Add dark mode preference in settings
- Update theme switching logic
- Add corresponding UI tests
Fixes #123"git push origin feature/your-feature-nameThen create a Pull Request on GitHub with:
- Clear title and description
- Reference to related issues
- Screenshots for UI changes
- Testing instructions
When reporting bugs, please include:
- Clear title describing the issue
- Steps to reproduce the bug
- Expected behavior vs actual behavior
- Screenshots or videos if applicable
- Device information (Android version, device model)
- App version and build type
- Logs if available
- Environment details (build variant, configuration)
When requesting features, please include:
- Clear title describing the feature
- Detailed description of the feature
- Use case and why it would be useful
- Mockups or examples if applicable
- Alternative solutions you've considered
- Impact assessment (user experience, performance, etc.)
We provide issue templates for:
- Bug reports
- Feature requests
- Documentation improvements
- Performance issues
- Security vulnerabilities
- Follow Kotlin Coding Conventions
- Use meaningful variable and function names
- Prefer
valovervarwhen possible - Use data classes for simple data holders
- Use sealed classes for state management
- Follow Android Code Style Guidelines
- Use Jetpack Compose for UI
- Implement MVVM architecture
- Use Repository pattern for data access
- Handle lifecycle properly
app/src/main/java/com/maxrave/echo/
├── ui/ # UI components and screens
│ ├── components/ # Reusable UI components
│ ├── screens/ # Screen-specific UI
│ └── theme/ # Theme and styling
├── data/ # Data layer
│ ├── repository/ # Repository implementations
│ ├── local/ # Local data sources
│ └── remote/ # Remote data sources
├── domain/ # Domain layer
│ ├── model/ # Domain models
│ ├── repository/ # Repository interfaces
│ └── usecase/ # Use cases
└── common/ # Common utilities
├── utils/ # Utility functions
└── extensions/ # Extension functions
- Classes: PascalCase (
MusicPlayer) - Functions: camelCase (
playMusic()) - Variables: camelCase (
currentSong) - Constants: UPPER_SNAKE_CASE (
MAX_VOLUME) - Packages: lowercase (
com.maxrave.echo.ui)
- Write unit tests for business logic
- Test repository implementations
- Test use cases and utilities
- Aim for high code coverage
- Write UI tests for critical user flows
- Test different screen sizes and orientations
- Test accessibility features
# Run all tests
./gradlew test
# Run specific test class
./gradlew test --tests "iad1tya.echo.MusicPlayerTest"
# Run tests with coverage
./gradlew testDebugUnitTestCoverage- Document public APIs with KDoc
- Add inline comments for complex logic
- Keep README files updated
- Document configuration changes
Follow the Conventional Commits specification:
feat:for new featuresfix:for bug fixesdocs:for documentation changesstyle:for formatting changesrefactor:for code refactoringtest:for adding testschore:for maintenance tasks
Examples:
feat: add playlist sharing functionality
fix: resolve crash when switching songs
docs: update API documentation
style: format code according to style guide
We follow Semantic Versioning:
- MAJOR: Incompatible API changes
- MINOR: New functionality (backward compatible)
- PATCH: Bug fixes (backward compatible)
- All tests pass
- Documentation is updated
- Changelog is updated
- Version numbers are bumped
- Release notes are prepared
- GitHub Discussions: For general questions and discussions
- GitHub Issues: For bug reports and feature requests
- Pull Requests: For code contributions and reviews
If you have questions about contributing:
- Check the GitHub Discussions
- Create a new discussion
- Contact maintainers directly through GitHub
Contributors will be recognized in:
- README.md contributors section
- Release notes
- GitHub contributors page
- App credits (if applicable)
If you have questions about contributing:
- Check the GitHub Discussions
- Create a new discussion
- Contact maintainers directly
Thank you for contributing to Echo Music!