Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2e10cc5d11 | ||
|
|
f06b6d442f | ||
|
|
4fd8832d90 | ||
|
|
61e3d49670 | ||
|
|
8610ad9a03 | ||
|
|
83f9bcdf88 | ||
|
|
0d7ea6174d | ||
|
|
5aab372920 | ||
|
|
32e5bfa36d | ||
|
|
3a90b17301 | ||
|
|
b706f679a9 |
38
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
38
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**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.
|
||||
|
||||
**Desktop (please complete the following information):**
|
||||
- OS: [e.g. iOS]
|
||||
- Browser [e.g. chrome, safari]
|
||||
- Version [e.g. 22]
|
||||
|
||||
**Smartphone (please complete the following information):**
|
||||
- Device: [e.g. iPhone6]
|
||||
- OS: [e.g. iOS8.1]
|
||||
- Browser [e.g. stock browser, safari]
|
||||
- Version [e.g. 22]
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
||||
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
|
||||
**Describe the solution you'd like**
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
**Additional context**
|
||||
Add any other context or screenshots about the feature request here.
|
||||
11
.github/ISSUE_TEMPLATE/give-me-some-idea-for-this-app.md
vendored
Normal file
11
.github/ISSUE_TEMPLATE/give-me-some-idea-for-this-app.md
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
name: Give Me Some Idea For This App
|
||||
about: If your idea is unique i will definitely implement the Idea and mention you
|
||||
in my repo and add the feature to the app
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
|
||||
169
README.md
169
README.md
@@ -1,15 +1,14 @@
|
||||
<div align="center">
|
||||
<img src="app/src/main/assets/logo.png" alt="Calculator Hide File App Logo" width="200" />
|
||||
|
||||
|
||||
# Calculator Hide File App
|
||||
# 📂 Calculator Hide File App for Android 📂
|
||||
|
||||
<a href="https://github.com/Binondi/Calculator-Hide-Files/releases/latest">
|
||||
<img alt="Latest release" src="https://img.shields.io/badge/Releases-v1.0-blue?logo=github&style=for-the-badge">
|
||||
</a>
|
||||
|
||||
<a href="https://github.com/Binondi/Calculator-Hide-Files/releases/latest">
|
||||
<img alt="Downloads" src="https://img.shields.io/badge/Downloads-1.2k-blue?logo=github&style=for-the-badge">
|
||||
<img alt="Downloads" src="https://img.shields.io/badge/Downloads-1.3k-blue?logo=github&style=for-the-badge">
|
||||
</a>
|
||||
|
||||
<a href="LICENSE">
|
||||
@@ -19,131 +18,137 @@
|
||||
</div>
|
||||
|
||||
---
|
||||
Welcome to the **Calculator Hide File App**! This app is a unique and secure way to hide your sensitive files under the disguise of a fully functional calculator.
|
||||
|
||||
## 😍 Why Choose This App?
|
||||
The **Calculator Hide File App** is an **open-source** application, allowing you to inspect the code yourself. This ensures **complete transparency** and guarantees that your **privacy remains uncompromised**. 🔒✅
|
||||
|
||||
|
||||
---
|
||||
|
||||
## Features
|
||||
## 🔥 About Calculator Hide File App
|
||||
|
||||
- **Dual Functionality**: Operates as a regular calculator and a file hiding app.
|
||||
- **User-Friendly Interface**: Simple and intuitive design for easy use.
|
||||
- **Secure File Storage**: Protects your hidden files with a passcode.
|
||||
- **Passcode Protection**: Access the hidden files by entering a secret passcode in the calculator.
|
||||
- **File Management**: Easily hide, unhide, and manage files within the app.
|
||||
The **Calculator Hide File App** is an innovative **Android file-hiding app** that disguises itself as a **fully functional calculator**. It helps you **securely store** private files and protect them with a **hidden passcode**.
|
||||
|
||||
> **⭐ Why Choose This App?**
|
||||
> - Hide images, videos, documents & other files securely.
|
||||
> - Works like a **real calculator** with hidden storage mode.
|
||||
> - No one will suspect it’s a file vault!
|
||||
|
||||
---
|
||||
|
||||
## Screenshots
|
||||
<div>
|
||||
|
||||
<img src="app/src/main/assets/Screenshot_1.jpg" alt="Screenshot 1" width="24%">
|
||||
<img src="app/src/main/assets/Screenshot_2.jpg" alt="Screenshot 2" width="24%">
|
||||
<img src="app/src/main/assets/Screenshot_3.jpg" alt="Screenshot 3" width="24%">
|
||||
<img src="app/src/main/assets/Screenshot_4.jpg" alt="Screenshot 4" width="24%">
|
||||
## 🚀 Features
|
||||
|
||||
</div>
|
||||
<div>
|
||||
<img src="app/src/main/assets/Screenshot_5.jpg" alt="Screenshot 5" width="24%">
|
||||
<img src="app/src/main/assets/Screenshot_6.jpg" alt="Screenshot 6" width="24%">
|
||||
<img src="app/src/main/assets/Screenshot_7.jpg" alt="Screenshot 7" width="24%">
|
||||
<img src="app/src/main/assets/Screenshot_8.jpg" alt="Screenshot 8" width="24%">
|
||||
✅ **Dual Functionality** – A working **calculator** & a **file vault** in one app.
|
||||
✅ **Secret Passcode** – Unlock hidden files by entering a secret code.
|
||||
✅ **Secure File Manager** – Hide/unhide files easily.
|
||||
✅ **Fast & Lightweight** – Smooth performance on all Android devices.
|
||||
✅ **No Root Required** – Works without rooting your phone.
|
||||
|
||||
---
|
||||
|
||||
## 🖼️ Screenshots
|
||||
|
||||
<div align="center">
|
||||
<img src="app/src/main/assets/Screenshot_1.jpg" alt="Calculator Hide File App - Home Screen" width="24%">
|
||||
<img src="app/src/main/assets/Screenshot_2.jpg" alt="Calculator Hide File App - Secure File Storage" width="24%">
|
||||
<img src="app/src/main/assets/Screenshot_3.jpg" alt="Calculator Hide File App - Passcode Protection" width="24%">
|
||||
<img src="app/src/main/assets/Screenshot_4.jpg" alt="Calculator Hide File App - Hidden Files Manager" width="24%">
|
||||
</div>
|
||||
---
|
||||
|
||||
## How It Works
|
||||
|
||||
1. **Calculator Mode**:
|
||||
- Perform basic arithmetic operations just like any regular calculator.
|
||||
2. **Hidden Mode**:
|
||||
- Enter `123456` and hit the `=` button to setup your password.
|
||||
- Enter your secret passcode and hit the `=` button to unlock the hidden file manager.
|
||||
4. **File Management**:
|
||||
- Add files to hide them securely.
|
||||
- Retrieve or unhide files as needed.
|
||||
|
||||
---
|
||||
|
||||
## ☕ Support
|
||||
## 🔑 How It Works
|
||||
|
||||
Support My development by donating money. Thank you very much for your help! ❤️
|
||||
1. **Use as a Regular Calculator**
|
||||
- Perform standard arithmetic operations like a normal calculator.
|
||||
|
||||
[<img src="https://img.shields.io/badge/sponsor-30363D?style=for-the-badge&logo=GitHub-Sponsors&logoColor=#EA4AAA"
|
||||
alt="Sponsor the project on GitHub"
|
||||
height="40">](https://github.com/sponsors/Binondi) [<img src="https://img.shields.io/badge/PayPal-00457C?style=for-the-badge&logo=paypal&logoColor=white"
|
||||
alt="Donate with PayPal"
|
||||
height="40">](https://paypal.me/BinondiBorthakur56) [<img src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-ffdd00?style=for-the-badge&logo=buy-me-a-coffee&logoColor=black"
|
||||
alt="Donate with buymeacoffee"
|
||||
height="40">](https://buymeacoffee.com/binondi)
|
||||
2. **Enter Secret Passcode**
|
||||
- Type `123456` and press `=` to set up your password.
|
||||
- Enter your **custom passcode** and hit `=` to unlock the hidden file manager.
|
||||
|
||||
|
||||
---
|
||||
## Installation
|
||||
|
||||
### Prerequisites
|
||||
- Android Studio (for development)
|
||||
- A device or emulator running Android 6.0 or higher
|
||||
|
||||
### Steps
|
||||
1. Clone the repository:
|
||||
```bash
|
||||
git clone https://github.com/YourUsername/CalculatorHideFileApp.git
|
||||
```
|
||||
2. Open the project in Android Studio.
|
||||
3. Build and run the app on your device or emulator.
|
||||
3. **Manage Hidden Files**
|
||||
- Add, remove, and restore hidden files.
|
||||
- Files stay protected even after closing the app.
|
||||
|
||||
---
|
||||
|
||||
## Technologies Used
|
||||
## 📥 Download & Installation
|
||||
|
||||
- **Programming Language**: Java/Kotlin
|
||||
- **Development Platform**: Android Studio
|
||||
- **UI Framework**: Android XML layouts
|
||||
- **File Storage**: Secure internal storage and MediaStore API
|
||||
### 🔗 **[Download the Latest Version Here](https://github.com/Binondi/Calculator-Hide-Files/releases/latest)**
|
||||
|
||||
### 🔹 Prerequisites
|
||||
- **Android 6.0 or higher**
|
||||
- **Storage permissions enabled**
|
||||
|
||||
### 🔹 Installation Steps
|
||||
```bash
|
||||
git clone https://github.com/Binondi/Calculator-Hide-Files.git
|
||||
```
|
||||
- Open **Android Studio** and build the project.
|
||||
- Install the APK on your **Android device or emulator**.
|
||||
|
||||
---
|
||||
|
||||
## Usage Instructions
|
||||
## 🛠️ Technologies Used
|
||||
|
||||
1. Open the app.
|
||||
2. Use the calculator as normal.
|
||||
3. Enter the secret passcode and press `=` to switch to the hidden file manager.
|
||||
4. Add or manage your hidden files.
|
||||
- **Programming Language**: Kotlin
|
||||
- **UI Framework**: XML (For UI)
|
||||
- **File Storage**: Secure internal storage & MediaStore API
|
||||
|
||||
---
|
||||
|
||||
## Contributing
|
||||
## 🎯 Why Use Calculator Hide File App?
|
||||
|
||||
- **No One Can Detect Your Files** – Works like a real calculator.
|
||||
- **100% Secure** – Your private files stay hidden, even if someone opens the app.
|
||||
- **Completely Free & Open Source** – Modify or contribute to the project.
|
||||
|
||||
---
|
||||
|
||||
## ❤️ Support the Project
|
||||
|
||||
If you find this app useful, please consider supporting the development. 🙏
|
||||
|
||||
[](https://github.com/sponsors/Binondi)
|
||||
[](https://paypal.me/BinondiBorthakur56)
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Contributing
|
||||
|
||||
We welcome contributions! To contribute:
|
||||
|
||||
1. Fork the repository.
|
||||
2. Create a new branch for your feature or bugfix:
|
||||
1. **Fork the repository**
|
||||
2. **Create a new branch**
|
||||
```bash
|
||||
git checkout -b feature-name
|
||||
```
|
||||
3. Commit your changes:
|
||||
3. **Commit your changes**
|
||||
```bash
|
||||
git commit -m "Add a new feature"
|
||||
```
|
||||
4. Push to the branch:
|
||||
4. **Push to GitHub**
|
||||
```bash
|
||||
git push origin feature-name
|
||||
```
|
||||
5. Open a Pull Request.
|
||||
5. **Create a Pull Request**
|
||||
|
||||
---
|
||||
|
||||
## License
|
||||
## 📜 License
|
||||
|
||||
This project is licensed under the Apache License 2.0. See the [LICENSE](LICENSE) file for details.
|
||||
This project is licensed under the **Apache License 2.0**.
|
||||
See the full license [here](LICENSE).
|
||||
|
||||
---
|
||||
|
||||
## Contact
|
||||
## 📧 Contact
|
||||
|
||||
For any inquiries or feedback, reach out to:
|
||||
- **Email**: binondiborthakur56@gmail.com
|
||||
- **GitHub**: [Binondi](https://github.com/Binondi)
|
||||
For any questions or feedback:
|
||||
📩 **Email**: binondiborthakur56@gmail.com
|
||||
🐙 **GitHub**: [Binondi](https://github.com/Binondi)
|
||||
|
||||
---
|
||||
|
||||
Thank you for using the **Calculator Hide File App**! We hope you find it secure and easy to use.
|
||||
### 🎉 Thank You for Using Calculator Hide File App! 🎉
|
||||
🚀 **Keep your files secure and hidden!** 🚀
|
||||
|
||||
@@ -11,8 +11,8 @@ android {
|
||||
applicationId = "devs.org.calculator"
|
||||
minSdk = 26
|
||||
targetSdk = 34
|
||||
versionCode = 2
|
||||
versionName = "1.1"
|
||||
versionCode = 3
|
||||
versionName = "1.2"
|
||||
|
||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import android.widget.Toast
|
||||
import androidx.activity.result.ActivityResultLauncher
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import devs.org.calculator.R
|
||||
import devs.org.calculator.callbacks.FileProcessCallback
|
||||
import devs.org.calculator.utils.FileManager
|
||||
import kotlinx.coroutines.launch
|
||||
@@ -43,7 +44,7 @@ class AudioGalleryActivity : BaseGalleryActivity(), FileProcessCallback {
|
||||
).processMultipleFiles(uriList, fileType, this@AudioGalleryActivity)
|
||||
}
|
||||
} else {
|
||||
Toast.makeText(this, "No files selected", Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(this, getString(R.string.no_files_selected), Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -52,7 +53,7 @@ class AudioGalleryActivity : BaseGalleryActivity(), FileProcessCallback {
|
||||
override fun onFilesProcessedSuccessfully(copiedFiles: List<File>) {
|
||||
Toast.makeText(
|
||||
this@AudioGalleryActivity,
|
||||
"${copiedFiles.size} Audios hidden successfully",
|
||||
"${copiedFiles.size} ${getString(R.string.audio_hidded_successfully)} ",
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
loadFiles()
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package devs.org.calculator.activities
|
||||
|
||||
import android.Manifest
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Intent
|
||||
import android.content.pm.PackageManager
|
||||
import android.net.Uri
|
||||
@@ -8,6 +9,7 @@ import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.os.Environment
|
||||
import android.provider.Settings
|
||||
import android.view.View
|
||||
import androidx.activity.result.ActivityResultLauncher
|
||||
import androidx.activity.result.IntentSenderRequest
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
@@ -39,6 +41,7 @@ abstract class BaseGalleryActivity : AppCompatActivity() {
|
||||
|
||||
abstract val fileType: FileManager.FileType
|
||||
|
||||
@SuppressLint("SetTextI18n")
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setupIntentSenderLauncher()
|
||||
@@ -47,18 +50,27 @@ abstract class BaseGalleryActivity : AppCompatActivity() {
|
||||
|
||||
fileManager = FileManager(this, this)
|
||||
|
||||
binding.fabAdd.text = when(fileType){
|
||||
when(fileType){
|
||||
FileManager.FileType.IMAGE -> {
|
||||
getString(R.string.add_image)
|
||||
val image = getString(R.string.add_image)
|
||||
binding.fabAdd.text = image
|
||||
binding.noItemsTxt.text = "${getString(R.string.no_items_available_add_one_by_clicking_on_the_plus_button)} '$image' button"
|
||||
}
|
||||
FileManager.FileType.AUDIO -> {
|
||||
getString(R.string.add_audio)
|
||||
val text = getString(R.string.add_audio)
|
||||
binding.fabAdd.text = text
|
||||
binding.noItemsTxt.text = "${getString(R.string.no_items_available_add_one_by_clicking_on_the_plus_button)} '$text' button"
|
||||
|
||||
}
|
||||
FileManager.FileType.VIDEO -> {
|
||||
getString(R.string.add_video)
|
||||
val text = getString(R.string.add_video)
|
||||
binding.fabAdd.text = text
|
||||
binding.noItemsTxt.text = "${getString(R.string.no_items_available_add_one_by_clicking_on_the_plus_button)} '$text' button"
|
||||
}
|
||||
FileManager.FileType.DOCUMENT -> {
|
||||
getString(R.string.add_files)
|
||||
val text = getString(R.string.add_files)
|
||||
binding.fabAdd.text = text
|
||||
binding.noItemsTxt.text = "${getString(R.string.no_items_available_add_one_by_clicking_on_the_plus_button)} '$text' button"
|
||||
}
|
||||
}
|
||||
binding.recyclerView.setOnScrollChangeListener { _, _, scrollY, _, oldScrollY ->
|
||||
@@ -116,6 +128,15 @@ abstract class BaseGalleryActivity : AppCompatActivity() {
|
||||
protected open fun loadFiles() {
|
||||
files = fileManager.getFilesInHiddenDir(fileType)
|
||||
adapter.submitList(files)
|
||||
if (files.isEmpty()){
|
||||
binding.recyclerView.visibility = View.GONE
|
||||
binding.loading.visibility = View.GONE
|
||||
binding.noItems.visibility = View.VISIBLE
|
||||
}else{
|
||||
binding.recyclerView.visibility = View.VISIBLE
|
||||
binding.loading.visibility = View.GONE
|
||||
binding.noItems.visibility = View.GONE
|
||||
}
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
|
||||
@@ -47,8 +47,8 @@ class DocumentsActivity : BaseGalleryActivity(), FileProcessCallback {
|
||||
}
|
||||
|
||||
override fun onFilesProcessedSuccessfully(copiedFiles: List<File>) {
|
||||
Toast.makeText(this@DocumentsActivity,copiedFiles.size.toString() +
|
||||
getString(R.string.documents_hidden_successfully ), Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(this@DocumentsActivity,"${copiedFiles.size} ${getString(R.string.documents_hidden_successfully )}"
|
||||
, Toast.LENGTH_SHORT).show()
|
||||
loadFiles()
|
||||
}
|
||||
|
||||
|
||||
@@ -66,8 +66,7 @@ class ImageGalleryActivity : BaseGalleryActivity(), FileProcessCallback {
|
||||
}
|
||||
|
||||
override fun onFilesProcessedSuccessfully(copiedFiles: List<File>) {
|
||||
Toast.makeText(this@ImageGalleryActivity, copiedFiles.size.toString() +
|
||||
getString(R.string.images_hidden_successfully), Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(this@ImageGalleryActivity, "${copiedFiles.size} ${getString(R.string.images_hidden_successfully)}", Toast.LENGTH_SHORT).show()
|
||||
loadFiles()
|
||||
}
|
||||
|
||||
|
||||
@@ -49,8 +49,8 @@ class VideoGalleryActivity : BaseGalleryActivity(), FileProcessCallback {
|
||||
}
|
||||
|
||||
override fun onFilesProcessedSuccessfully(copiedFiles: List<File>) {
|
||||
Toast.makeText(this@VideoGalleryActivity, copiedFiles.size.toString() +
|
||||
getString(R.string.videos_hidden_successfully), Toast.LENGTH_SHORT).show()
|
||||
Toast.makeText(this@VideoGalleryActivity, "${copiedFiles.size} ${getString(R.string.videos_hidden_successfully)}"
|
||||
, Toast.LENGTH_SHORT).show()
|
||||
loadFiles()
|
||||
}
|
||||
|
||||
|
||||
@@ -60,7 +60,7 @@ class FileManager(private val context: Context, private val lifecycleOwner: Life
|
||||
}
|
||||
}
|
||||
|
||||
fun copyFileToHiddenDir(uri: Uri, type: FileType): File? {
|
||||
private fun copyFileToHiddenDir(uri: Uri, type: FileType): File? {
|
||||
return try {
|
||||
val contentResolver = context.contentResolver
|
||||
|
||||
|
||||
@@ -8,20 +8,41 @@
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/recyclerView"
|
||||
android:visibility="gone"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:padding="8dp" />
|
||||
|
||||
<!-- <com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton-->
|
||||
<!-- android:id="@+id/fabAdd"-->
|
||||
<!-- android:layout_width="wrap_content"-->
|
||||
<!-- android:layout_height="wrap_content"-->
|
||||
<!-- android:layout_gravity="bottom|end"-->
|
||||
<!-- android:layout_margin="16dp"-->
|
||||
<!-- android:contentDescription="Compose"-->
|
||||
<!-- android:icon="@drawable/plus"-->
|
||||
<!-- android:text="Add File"-->
|
||||
<!-- app:elevation="6dp"/>-->
|
||||
<LinearLayout
|
||||
android:id="@+id/loading"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="center"
|
||||
android:visibility="visible"
|
||||
android:gravity="center"
|
||||
android:orientation="vertical">
|
||||
<ProgressBar
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/noItems"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="center"
|
||||
android:gravity="center"
|
||||
android:visibility="gone"
|
||||
android:orientation="vertical">
|
||||
<TextView
|
||||
android:id="@+id/noItemsTxt"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="16sp"
|
||||
android:gravity="center"
|
||||
android:padding="25dp"
|
||||
android:text="@string/no_items_available_add_one_by_clicking_on_the_plus_button"/>
|
||||
</LinearLayout>
|
||||
|
||||
<com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
|
||||
android:id="@+id/fabAdd"
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
android:layout_height="match_parent"
|
||||
android:padding="8dp" />
|
||||
|
||||
|
||||
|
||||
<com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||
android:id="@+id/fabAdd"
|
||||
android:layout_width="60dp"
|
||||
|
||||
@@ -13,47 +13,65 @@
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:layout_margin="16dp"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHeight_percent="0.3">
|
||||
app:layout_constraintHeight_percent="0.3"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/display"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
<LinearLayout
|
||||
android:id="@+id/scrollView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:scrollbars="none"
|
||||
android:gravity="end|bottom"
|
||||
android:padding="10dp"
|
||||
android:text="0"
|
||||
android:textSize="48sp"
|
||||
android:autoSizeTextType="uniform"
|
||||
android:autoSizeMinTextSize="16sp"
|
||||
android:autoSizeMaxTextSize="48sp"
|
||||
android:autoSizeStepGranularity="2sp"
|
||||
app:layout_constraintBottom_toTopOf="@+id/total"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintVertical_chainStyle="packed"
|
||||
tools:ignore="Suspicious0dp" />
|
||||
app:layout_constraintVertical_chainStyle="packed">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="bottom"
|
||||
android:gravity="end|bottom"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/display"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:autoSizeMaxTextSize="48sp"
|
||||
android:autoSizeMinTextSize="16sp"
|
||||
android:autoSizeStepGranularity="2sp"
|
||||
android:gravity="end|bottom"
|
||||
android:autoSizeTextType="uniform"
|
||||
android:padding="10dp"
|
||||
android:text="0"
|
||||
android:textSize="48sp"
|
||||
tools:ignore="Suspicious0dp" />
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/total"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:autoSizeMaxTextSize="26sp"
|
||||
android:autoSizeMinTextSize="24sp"
|
||||
android:autoSizeStepGranularity="2sp"
|
||||
android:autoSizeTextType="uniform"
|
||||
android:gravity="end|bottom"
|
||||
android:paddingRight="10dp"
|
||||
android:paddingBottom="10dp"
|
||||
android:text=""
|
||||
android:textSize="26sp"
|
||||
android:autoSizeTextType="uniform"
|
||||
android:autoSizeMinTextSize="12sp"
|
||||
android:autoSizeMaxTextSize="26sp"
|
||||
android:autoSizeStepGranularity="2sp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/display"
|
||||
app:layout_constraintTop_toBottomOf="@+id/scrollView"
|
||||
tools:ignore="Suspicious0dp" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
@@ -64,209 +82,209 @@
|
||||
android:layout_height="0dp"
|
||||
android:layout_margin="8dp"
|
||||
app:columnCount="4"
|
||||
app:rowCount="5"
|
||||
app:layout_constraintTop_toBottomOf="@id/displayContainer"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent">
|
||||
app:layout_constraintTop_toBottomOf="@id/displayContainer"
|
||||
app:rowCount="5">
|
||||
|
||||
<!-- Row 1 -->
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/btnClear"
|
||||
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
app:layout_rowWeight="1"
|
||||
app:layout_columnWeight="1"
|
||||
android:layout_margin="4dp"
|
||||
android:textSize="30sp"
|
||||
android:text="C"
|
||||
android:textSize="30sp"
|
||||
app:cornerRadius="15dp"
|
||||
style="@style/Widget.MaterialComponents.Button.OutlinedButton"/>
|
||||
app:layout_columnWeight="1"
|
||||
app:layout_rowWeight="1" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/btnPercent"
|
||||
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
app:layout_rowWeight="1"
|
||||
app:layout_columnWeight="1"
|
||||
android:textSize="30sp"
|
||||
android:layout_margin="4dp"
|
||||
android:text="%"
|
||||
android:textSize="30sp"
|
||||
app:cornerRadius="15dp"
|
||||
style="@style/Widget.MaterialComponents.Button.OutlinedButton"/>
|
||||
app:layout_columnWeight="1"
|
||||
app:layout_rowWeight="1" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/btnDivide"
|
||||
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
app:layout_rowWeight="1"
|
||||
app:layout_columnWeight="1"
|
||||
android:textSize="30sp"
|
||||
android:layout_margin="4dp"
|
||||
android:text="÷"
|
||||
android:textSize="30sp"
|
||||
app:cornerRadius="15dp"
|
||||
style="@style/Widget.MaterialComponents.Button.OutlinedButton"/>
|
||||
app:layout_columnWeight="1"
|
||||
app:layout_rowWeight="1" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/cut"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
app:layout_rowWeight="1"
|
||||
app:layout_columnWeight="1"
|
||||
android:textSize="30sp"
|
||||
android:gravity="center"
|
||||
android:layout_margin="4dp"
|
||||
app:icon="@drawable/backspace"
|
||||
android:gravity="center"
|
||||
android:textAlignment="center"
|
||||
android:textSize="30sp"
|
||||
app:cornerRadius="15dp"
|
||||
app:icon="@drawable/backspace"
|
||||
app:iconSize="32dp"
|
||||
app:cornerRadius="15dp"/>
|
||||
app:layout_columnWeight="1"
|
||||
app:layout_rowWeight="1" />
|
||||
|
||||
<!-- Row 2 -->
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/btn7"
|
||||
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
app:layout_rowWeight="1"
|
||||
app:layout_columnWeight="1"
|
||||
android:textSize="30sp"
|
||||
android:layout_margin="4dp"
|
||||
android:text="7"
|
||||
android:textSize="30sp"
|
||||
app:cornerRadius="15dp"
|
||||
style="@style/Widget.MaterialComponents.Button.OutlinedButton"/>
|
||||
app:layout_columnWeight="1"
|
||||
app:layout_rowWeight="1" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/btn8"
|
||||
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
app:layout_rowWeight="1"
|
||||
app:layout_columnWeight="1"
|
||||
android:textSize="30sp"
|
||||
android:layout_margin="4dp"
|
||||
android:text="8"
|
||||
android:textSize="30sp"
|
||||
app:cornerRadius="15dp"
|
||||
style="@style/Widget.MaterialComponents.Button.OutlinedButton"/>
|
||||
app:layout_columnWeight="1"
|
||||
app:layout_rowWeight="1" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/btn9"
|
||||
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
app:layout_rowWeight="1"
|
||||
app:layout_columnWeight="1"
|
||||
android:layout_margin="4dp"
|
||||
android:textSize="30sp"
|
||||
android:text="9"
|
||||
android:textSize="30sp"
|
||||
app:cornerRadius="15dp"
|
||||
style="@style/Widget.MaterialComponents.Button.OutlinedButton"/>
|
||||
app:layout_columnWeight="1"
|
||||
app:layout_rowWeight="1" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/btnMultiply"
|
||||
style="@style/Widget.MaterialComponents.Button"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
app:layout_rowWeight="1"
|
||||
app:layout_columnWeight="1"
|
||||
android:layout_margin="4dp"
|
||||
android:textSize="30sp"
|
||||
android:text="×"
|
||||
android:textSize="30sp"
|
||||
app:cornerRadius="15dp"
|
||||
style="@style/Widget.MaterialComponents.Button"/>
|
||||
app:layout_columnWeight="1"
|
||||
app:layout_rowWeight="1" />
|
||||
|
||||
<!-- Row 3 -->
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/btn4"
|
||||
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
app:layout_rowWeight="1"
|
||||
app:layout_columnWeight="1"
|
||||
android:textSize="30sp"
|
||||
android:layout_margin="4dp"
|
||||
app:cornerRadius="15dp"
|
||||
android:text="4"
|
||||
style="@style/Widget.MaterialComponents.Button.OutlinedButton"/>
|
||||
android:textSize="30sp"
|
||||
app:cornerRadius="15dp"
|
||||
app:layout_columnWeight="1"
|
||||
app:layout_rowWeight="1" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/btn5"
|
||||
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
app:layout_rowWeight="1"
|
||||
app:layout_columnWeight="1"
|
||||
android:textSize="30sp"
|
||||
android:layout_margin="4dp"
|
||||
android:text="5"
|
||||
android:textSize="30sp"
|
||||
app:cornerRadius="15dp"
|
||||
style="@style/Widget.MaterialComponents.Button.OutlinedButton"/>
|
||||
app:layout_columnWeight="1"
|
||||
app:layout_rowWeight="1" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/btn6"
|
||||
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
app:layout_rowWeight="1"
|
||||
app:layout_columnWeight="1"
|
||||
android:textSize="30sp"
|
||||
android:layout_margin="4dp"
|
||||
android:text="6"
|
||||
android:textSize="30sp"
|
||||
app:cornerRadius="15dp"
|
||||
style="@style/Widget.MaterialComponents.Button.OutlinedButton"/>
|
||||
app:layout_columnWeight="1"
|
||||
app:layout_rowWeight="1" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/btnMinus"
|
||||
style="@style/Widget.MaterialComponents.Button"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
app:layout_rowWeight="1"
|
||||
app:layout_columnWeight="1"
|
||||
android:textSize="30sp"
|
||||
android:layout_margin="4dp"
|
||||
android:text="-"
|
||||
android:textSize="30sp"
|
||||
app:cornerRadius="15dp"
|
||||
style="@style/Widget.MaterialComponents.Button"/>
|
||||
app:layout_columnWeight="1"
|
||||
app:layout_rowWeight="1" />
|
||||
|
||||
<!-- Row 4 -->
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/btn1"
|
||||
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
app:layout_rowWeight="1"
|
||||
app:layout_columnWeight="1"
|
||||
android:textSize="30sp"
|
||||
android:layout_margin="4dp"
|
||||
android:text="1"
|
||||
android:textSize="30sp"
|
||||
app:cornerRadius="15dp"
|
||||
style="@style/Widget.MaterialComponents.Button.OutlinedButton"/>
|
||||
app:layout_columnWeight="1"
|
||||
app:layout_rowWeight="1" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/btn2"
|
||||
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
app:layout_rowWeight="1"
|
||||
app:layout_columnWeight="1"
|
||||
android:textSize="30sp"
|
||||
android:layout_margin="4dp"
|
||||
android:text="2"
|
||||
android:textSize="30sp"
|
||||
app:cornerRadius="15dp"
|
||||
style="@style/Widget.MaterialComponents.Button.OutlinedButton"/>
|
||||
app:layout_columnWeight="1"
|
||||
app:layout_rowWeight="1" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/btn3"
|
||||
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
app:layout_rowWeight="1"
|
||||
app:layout_columnWeight="1"
|
||||
android:textSize="30sp"
|
||||
android:layout_margin="4dp"
|
||||
android:text="3"
|
||||
android:textSize="30sp"
|
||||
app:cornerRadius="15dp"
|
||||
style="@style/Widget.MaterialComponents.Button.OutlinedButton"/>
|
||||
app:layout_columnWeight="1"
|
||||
app:layout_rowWeight="1" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/btnPlus"
|
||||
style="@style/Widget.MaterialComponents.Button"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
app:layout_rowWeight="1"
|
||||
app:layout_columnWeight="1"
|
||||
android:textSize="30sp"
|
||||
android:layout_margin="4dp"
|
||||
android:text="+"
|
||||
android:textSize="30sp"
|
||||
app:cornerRadius="15dp"
|
||||
style="@style/Widget.MaterialComponents.Button"/>
|
||||
app:layout_columnWeight="1"
|
||||
app:layout_rowWeight="1" />
|
||||
|
||||
<!-- Row 5 -->
|
||||
<com.google.android.material.button.MaterialButton
|
||||
@@ -274,37 +292,37 @@
|
||||
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
app:layout_rowWeight="1"
|
||||
android:layout_margin="4dp"
|
||||
android:text="0"
|
||||
android:textSize="30sp"
|
||||
app:cornerRadius="15dp"
|
||||
app:layout_columnSpan="2"
|
||||
app:layout_columnWeight="2"
|
||||
android:textSize="30sp"
|
||||
android:layout_margin="4dp"
|
||||
app:cornerRadius="15dp"
|
||||
android:text="0" />
|
||||
app:layout_rowWeight="1" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/btnDot"
|
||||
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
app:layout_rowWeight="1"
|
||||
app:layout_columnWeight="1"
|
||||
android:textSize="30sp"
|
||||
android:layout_margin="4dp"
|
||||
android:text="."
|
||||
android:textSize="30sp"
|
||||
app:cornerRadius="15dp"
|
||||
style="@style/Widget.MaterialComponents.Button.OutlinedButton"/>
|
||||
app:layout_columnWeight="1"
|
||||
app:layout_rowWeight="1" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/btnEquals"
|
||||
style="@style/Widget.MaterialComponents.Button"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
app:layout_rowWeight="1"
|
||||
app:layout_columnWeight="1"
|
||||
android:textSize="30sp"
|
||||
android:layout_margin="4dp"
|
||||
android:text="="
|
||||
android:textSize="30sp"
|
||||
app:cornerRadius="15dp"
|
||||
style="@style/Widget.MaterialComponents.Button"/>
|
||||
app:layout_columnWeight="1"
|
||||
app:layout_rowWeight="1" />
|
||||
|
||||
</androidx.gridlayout.widget.GridLayout>
|
||||
|
||||
|
||||
@@ -7,9 +7,9 @@
|
||||
<string name="add_files">Add Files</string>
|
||||
<string name="failed_to_hide_documents">Failed to hide Documents</string>
|
||||
<string name="no_files_selected">No files selected</string>
|
||||
<string name="documents_hidden_successfully">%1$s Documents hidden successfully</string>
|
||||
<string name="documents_hidden_successfully"> Documents hidden successfully</string>
|
||||
<string name="failed_to_hide_unhide_photo">Failed to hide/unhide photo</string>
|
||||
<string name="images_hidden_successfully">%1$s Images hidden successfully</string>
|
||||
<string name="images_hidden_successfully"> Images hidden successfully</string>
|
||||
<string name="failed_to_hide_images">Failed to hide images</string>
|
||||
<string name="storage_permissions_granted">Storage permissions granted</string>
|
||||
<string name="storage_permissions_denied">Storage permissions denied</string>
|
||||
@@ -41,7 +41,7 @@
|
||||
<string name="answer_cannot_be_empty">Answer cannot be empty!</string>
|
||||
<string name="password_successfully_reset">Password successfully reset.</string>
|
||||
<string name="invalid_answer">Invalid answer!</string>
|
||||
<string name="videos_hidden_successfully">%1$s Videos hidden successfully</string>
|
||||
<string name="videos_hidden_successfully"> Videos hidden successfully</string>
|
||||
<string name="failed_to_hide_videos">Failed to hide videos</string>
|
||||
<string name="image">IMAGE</string>
|
||||
<string name="video">VIDEO</string>
|
||||
@@ -50,5 +50,7 @@
|
||||
<string name="no_audio_player_found">No audio player found!</string>
|
||||
<string name="no_suitable_app_found_to_open_this_document">No suitable app found to open this document!</string>
|
||||
<string name="unknown_file">Unknown File</string>
|
||||
<string name="details">%1$s DETAILS</string>
|
||||
<string name="details"> DETAILS</string>
|
||||
<string name="audio_hidded_successfully">Audios hidden successfully</string>
|
||||
<string name="no_items_available_add_one_by_clicking_on_the_plus_button">No Items Available, Add one by clicking on the</string>
|
||||
</resources>
|
||||
@@ -1,5 +1,5 @@
|
||||
[versions]
|
||||
agp = "8.7.3"
|
||||
agp = "8.9.1"
|
||||
documentfile = "1.0.1"
|
||||
exp4j = "0.4.8"
|
||||
glide = "4.16.0"
|
||||
|
||||
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -1,6 +1,6 @@
|
||||
#Sun Nov 03 19:53:13 IST 2024
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
|
||||
Reference in New Issue
Block a user