diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
new file mode 100644
index 0000000..875eda3
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -0,0 +1,32 @@
+---
+name: Bug Report
+about: Report a bug to help us improve
+title: "[BUG] "
+labels: bug
+---
+
+**Describe the bug**
+A clear and concise description of what the bug is.
+
+**To Reproduce**
+Steps to reproduce the behavior:
+
+1. Go to '...'
+2. Click on '....'
+3. Scroll down to '....'
+4. See error
+
+**Expected behavior**
+A clear and concise description of what you expected to happen.
+
+**Screenshots**
+If applicable, add screenshots to help explain your problem.
+
+**Device Info:**
+
+- Android Version: [e.g. API 33 ]
+- Device Manufacturer [e.g. Samsung, Google]
+- Bluetooth Device: [ e.g. esp32 microcontroller, HC-05 bluetooth module ]
+
+**Additional context**
+Add any other context about the problem here.
\ No newline at end of file
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
new file mode 100644
index 0000000..562e60a
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -0,0 +1,16 @@
+---
+name: Feature Request
+about: Suggest an new idea for this project
+title: "[FEAT] "
+labels: enhancement
+assignees: ''
+---
+
+**Is your feature request related to a problem or this is a new thing? Please describe.**
+A clear and concise description of what the problem is or why this new feature is important
+
+**Describe the solution you'd like**
+A clear and concise description of what you want to happen.
+
+**Additional context**
+Add any other context or screenshots about the feature request here.
\ No newline at end of file
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
new file mode 100644
index 0000000..90837d4
--- /dev/null
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -0,0 +1,25 @@
+---
+name: Pull Request
+about: Propose changes for review and merge
+---
+
+## Description
+
+Please include a summary of the change and which issue is fixed or feature is added.
+List any dependencies that are required for this change.
+
+Mention the issues it closes #ISSUE_NUMBER_HERE (e.g., Closes #123)
+
+## Type of change
+
+Please delete options that are not relevant.
+
+- [ ] Bug fix (non-breaking change which fixes an issue)
+- [ ] New feature (non-breaking change which adds functionality)
+- [ ] Breaking change (fix or feature that would cause existing functionality to not work as
+ expected)
+- [ ] This change requires a documentation update
+
+## Screenshots (if applicable)
+
+---
\ No newline at end of file
diff --git a/.github/workflows/android_build.yml b/.github/workflows/android_build.yml
new file mode 100644
index 0000000..41cb13e
--- /dev/null
+++ b/.github/workflows/android_build.yml
@@ -0,0 +1,26 @@
+name: Android Build CI
+
+on:
+ pull_request:
+ branches:
+ - main
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+
+ - name: Set up JDK 17
+ uses: actions/setup-java@v4
+ with:
+ distribution: 'temurin'
+ java-version: '17'
+
+ - name: Grant execute permission to gradlew
+ run: chmod +x gradlew
+
+ - name: Build with Gradle
+ run: ./gradlew assembleDebug --stacktrace
\ No newline at end of file
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
new file mode 100644
index 0000000..9a768ef
--- /dev/null
+++ b/CODE_OF_CONDUCT.md
@@ -0,0 +1,127 @@
+# Contributor Covenant Code of Conduct
+
+## Our Pledge
+
+We as members, contributors, and leaders pledge to make participation in our
+community a harassment-free experience for everyone, regardless of age, body
+size, visible or invisible disability, ethnicity, sex characteristics, gender
+identity and expression, level of experience, education, socio-economic status,
+nationality, personal appearance, race, caste, color, religion, or sexual
+identity and orientation.
+
+We pledge to act and interact in ways that contribute to an open, welcoming,
+diverse, inclusive, and healthy community.
+
+## Our Standards
+
+Examples of behavior that contributes to a positive environment for our
+community include:
+
+- Demonstrating empathy and kindness toward other people
+- Being respectful of differing opinions, viewpoints, and experiences
+- Giving and gracefully accepting constructive feedback
+- Accepting responsibility and apologizing to those affected by our mistakes,
+ and learning from the experience
+- Focusing on what is best not just for us as individuals, but for the overall
+ community
+
+Examples of unacceptable behavior include:
+
+- The use of sexualized language or imagery, and sexual attention or advances of
+ any kind
+- Trolling, insulting or derogatory comments, and personal or political attacks
+- Public or private harassment
+- Publishing others' private information, such as a physical or email address,
+ without their explicit permission
+- Other conduct which could reasonably be considered inappropriate in a
+ professional setting
+
+## Enforcement Responsibilities
+
+Community leaders are responsible for clarifying and enforcing our standards of
+acceptable behavior and will take appropriate and fair corrective action in
+response to any behavior that they deem inappropriate, threatening, offensive,
+or harmful.
+
+Community leaders have the right and responsibility to remove, edit, or reject
+comments, commits, code, wiki edits, issues, and other contributions that are
+not aligned to this Code of Conduct, and will communicate reasons for moderation
+decisions when appropriate.
+
+## Scope
+
+This Code of Conduct applies within all community spaces, and also applies when
+an individual is officially representing the community in public spaces.
+Examples of representing our community include using an official email address,
+posting via an official social media account, or acting as an appointed
+representative at an online or offline event.
+
+## Enforcement
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may be
+reported to the community leaders responsible for enforcement at
+[mail](mailto://bhowmicktuhhin34@gmail.com).
+All complaints will be reviewed and investigated promptly and fairly.
+
+All community leaders are obligated to respect the privacy and security of the
+reporter of any incident.
+
+## Enforcement Guidelines
+
+Community leaders will follow these Community Impact Guidelines in determining
+the consequences for any action they deem in violation of this Code of Conduct:
+
+### 1. Correction
+
+**Community Impact**: Use of inappropriate language or other behavior deemed
+unprofessional or unwelcome in the community.
+
+**Consequence**: A private, written warning from community leaders, providing
+clarity around the nature of the violation and an explanation of why the
+behavior was inappropriate. A public apology may be requested.
+
+### 2. Warning
+
+**Community Impact**: A violation through a single incident or series of
+actions.
+
+**Consequence**: A warning with consequences for continued behavior. No
+interaction with the people involved, including unsolicited interaction with
+those enforcing the Code of Conduct, for a specified period of time. This
+includes avoiding interactions in community spaces as well as external channels
+like social media. Violating these terms may lead to a temporary or permanent
+ban.
+
+### 3. Temporary Ban
+
+**Community Impact**: A serious violation of community standards, including
+sustained inappropriate behavior.
+
+**Consequence**: A temporary ban from any sort of interaction or public
+communication with the community for a specified period of time. No public or
+private interaction with the people involved, including unsolicited interaction
+with those enforcing the Code of Conduct, is allowed during this period.
+Violating these terms may lead to a permanent ban.
+
+### 4. Permanent Ban
+
+**Community Impact**: Demonstrating a pattern of violation of community
+standards, including sustained inappropriate behavior, harassment of an
+individual, or aggression toward or disparagement of classes of individuals.
+
+**Consequence**: A permanent ban from any sort of public interaction within the
+community.
+
+## Attribution
+
+This Code of Conduct is adapted from the
+[Contributor Covenant](https://www.contributor-covenant.org/), version 2.1,
+available at
+.
+
+Community Impact Guidelines were inspired by
+[Mozilla's code of conduct enforcement ladder](https://github.com/mozilla/inclusion).
+
+For answers to common questions about this code of conduct, see the FAQ at
+. Translations are available at
+.
\ No newline at end of file
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..4844bcb
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,72 @@
+# Contributing to BTAndroidApp
+
+Contributions are welcome to `BTAndroidApp` project!
+Your help is invaluable in making this app better for everyone. To ensure a smooth and effective
+collaboration, please follow these guidelines carefully.
+
+---
+
+## Our Contribution Workflow
+
+To maintain project quality and coordination, we follow a specific workflow for contributions:
+
+1. **Open an Issue First:**
+ * Before starting any work, please **always open an issue** to discuss the bug, feature, or
+ change you intend to work on.
+ * This step is crucial for ensuring that the work aligns with project goals and avoids duplicate
+ efforts.
+
+2. **Discuss the Issue:**
+ * We will discuss the issue with you to clarify requirements, approach, and feasibility.
+ * Please participate actively in the discussion on the issue tracker.
+
+3. **Wait for Approval to Work:**
+ * Only after we have discussed the issue and explicitly ask you to proceed with implementing
+ a solution, should you start coding.
+ * This ensures that your valuable time is spent on features or fixes that the project needs and
+ approves.
+
+4. **Create a Dedicated Branch:**
+ * Once approved to work, please create a new branch from `main` using one of the following
+ conventions:
+ * For new features: `feat/`
+ * For bug fixes: `bug/`
+
+---
+
+## General Guidelines
+
+- **Code of Conduct:** Please review and adhere to our [Code of Conduct](CODE_OF_CONDUCT.md) in all
+ your interactions within this project.
+- **Pull Requests:**
+ - When submitting your code, please
+ use [Pull Request Template](/.github/PULL_REQUEST_TEMPLATE.md) and fill it out completely.
+ - Link your pull request to the issue you worked on (e.g., `Closes #123`).
+ - Be prepared for constructive feedback during the review process.
+
+## Setting up the Development Environment
+
+If you're unsure how to get the project running locally, here are the basic steps:
+
+1. **Prerequisites:**
+ * Java Development Kit (JDK) 17 or higher.
+ * Android Studio (latest stable version recommended).
+ * Android SDK Platform 34 (or the target API level of the app).
+
+2. **Clone the repository:**
+ ```bash
+ git clone https://github.com/tuuhin/BTAndroidApp.git
+ cd BTAndroidApp
+ ```
+
+3. **Open in Android Studio:**
+ Open the cloned project in Android Studio. Android Studio should guide you through syncing Gradle
+ files and downloading dependencies.
+
+4. **Build and Run:**
+ Ensure the project builds successfully (`./gradlew assembleDebug`) and runs on an emulator or
+ physical device.
+
+---
+
+Thank you for your understanding and for contributing to the `BTAndroidApp`!
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..f2b782b
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 Tuhin Bhowmick
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
\ No newline at end of file
diff --git a/README.md b/README.md
index 2f3de24..72871fe 100644
--- a/README.md
+++ b/README.md
@@ -73,13 +73,8 @@ an [issue](https://github.com/tuuhin/BTAndroidApp/issues/new)
### :man_cook: Contributing
-Contributions are alaways welcomed from the community
-
-- Fork the repository.
-- Create your feature branch (git checkout -b feature/YourFeature).
-- Commit your changes (git commit -am 'Add some feature').
-- Push to the branch (git push origin feature/YourFeature).
-- Create a new Pull Request.
+We welcome contributions to the `BTAndroidApp` project! Please take a moment to review
+our [Contribution Guidelines](CONTRIBUTING.md) before submitting pull requests or issues.
## :end: Conclusiion
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 0b81e36..4242efd 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -29,18 +29,21 @@ android {
}
signingConfigs {
-
+ // find if there is a properties file
val keySecretFile = rootProject.file("keystore.properties")
- if (keySecretFile.exists()) return@signingConfigs
+ if (!keySecretFile.exists()) return@signingConfigs
+ // load the properties
val properties = Properties()
+ keySecretFile.inputStream().use { properties.load(it) }
+ val userHome = System.getProperty("user.home")
val storeFileName = properties.getProperty("STORE_FILE_NAME")
- val keyStorePath = System.getenv("user.home")
- val keyStoreFolder = File(keyStorePath, "keystore")
- val keyStoreFile = File(keyStoreFolder, storeFileName)
+ val keyStoreFolder = File(userHome, "keystore")
+ if (!keyStoreFolder.exists()) return@signingConfigs
+ val keyStoreFile = File(keyStoreFolder, storeFileName)
if (!keyStoreFile.exists()) return@signingConfigs
create("release") {