This commit is contained in:
Binondi
2024-12-15 18:58:13 +05:30
parent 5df8ee6794
commit 0fe7c4c25f
6 changed files with 39 additions and 65 deletions

View File

@@ -1,14 +1,11 @@
package devs.org.calculator.activities
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.os.Environment
import android.provider.Settings
import android.util.Log
import android.widget.Toast
import androidx.activity.result.ActivityResultLauncher
@@ -40,7 +37,6 @@ class MainActivity : AppCompatActivity(), DialogActionsCallback {
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
// Initialize ActivityResultLauncher
launcher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
handleActivityResult(result)
}
@@ -57,7 +53,6 @@ class MainActivity : AppCompatActivity(), DialogActionsCallback {
this
)
}
// Number buttons
setupNumberButton(binding.btn0, "0")
setupNumberButton(binding.btn1, "1")
setupNumberButton(binding.btn2, "2")
@@ -68,14 +63,11 @@ class MainActivity : AppCompatActivity(), DialogActionsCallback {
setupNumberButton(binding.btn7, "7")
setupNumberButton(binding.btn8, "8")
setupNumberButton(binding.btn9, "9")
// Operator buttons
setupOperatorButton(binding.btnPlus, "+")
setupOperatorButton(binding.btnMinus, "-")
setupOperatorButton(binding.btnMultiply, "*")
setupOperatorButton(binding.btnMultiply, "×")
setupOperatorButton(binding.btnDivide, "/")
// Special buttons
binding.btnClear.setOnClickListener { clearDisplay() }
binding.btnDot.setOnClickListener { addDecimal() }
binding.btnEquals.setOnClickListener { calculateResult() }
@@ -88,8 +80,6 @@ class MainActivity : AppCompatActivity(), DialogActionsCallback {
result.data?.data?.let { uri ->
baseDocumentTreeUri = uri
val takeFlags = Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION
// Take persistable Uri Permission for future use
contentResolver.takePersistableUriPermission(uri, takeFlags)
val preferences = getSharedPreferences("com.example.fileutility", MODE_PRIVATE)
@@ -115,7 +105,10 @@ class MainActivity : AppCompatActivity(), DialogActionsCallback {
private fun setupOperatorButton(button: MaterialButton, operator: String) {
button.setOnClickListener {
if (!lastWasOperator) {
currentExpression += operator
currentExpression += when (operator) {
"×" -> "*"
else -> operator
}
lastWasOperator = true
hasDecimal = false
}
@@ -123,6 +116,7 @@ class MainActivity : AppCompatActivity(), DialogActionsCallback {
}
}
private fun clearDisplay() {
currentExpression = "0"
binding.total.text = ""
@@ -150,8 +144,7 @@ class MainActivity : AppCompatActivity(), DialogActionsCallback {
}
private fun calculateResult() {
// Check for secret code
if (currentExpression == "123456") { // Replace with your desired code
if (currentExpression == "123456") {
val intent = Intent(this, SetupPasswordActivity::class.java)
intent.putExtra("password", currentExpression)
startActivity(intent)
@@ -159,7 +152,6 @@ class MainActivity : AppCompatActivity(), DialogActionsCallback {
return
}
// Validate password
if (PrefsUtil(this).validatePassword(currentExpression)) {
val intent = Intent(this, HiddenVaultActivity::class.java)
intent.putExtra("password", currentExpression)
@@ -169,6 +161,7 @@ class MainActivity : AppCompatActivity(), DialogActionsCallback {
}
try {
currentExpression = currentExpression.replace("×", "*")
val expression = ExpressionBuilder(currentExpression).build()
val result = expression.evaluate()
@@ -180,25 +173,26 @@ class MainActivity : AppCompatActivity(), DialogActionsCallback {
lastWasOperator = false
hasDecimal = currentExpression.contains(".")
updateDisplay()
binding.total.text = ""
} catch (e: Exception) {
binding.display.text = getString(R.string.invalid_message)
}
}
private fun updateDisplay() {
binding.display.text = currentExpression
if (currentExpression == "0"){
private fun updateDisplay() {
binding.display.text = currentExpression.replace("*", "×")
if (currentExpression == "0") {
binding.total.text = ""
return
}
// Evaluate the expression and update total
try {
val expression = ExpressionBuilder(currentExpression).build()
val result = expression.evaluate()
// Format the result and update total.text
val formattedResult = if (result.toLong().toDouble() == result) {
result.toLong().toString()
} else {
@@ -207,11 +201,11 @@ class MainActivity : AppCompatActivity(), DialogActionsCallback {
binding.total.text = formattedResult
} catch (e: Exception) {
// Show a blank or placeholder for invalid expressions
binding.total.text = ""
}
}
private fun cutNumbers() {
if (currentExpression.isNotEmpty()){
if (currentExpression.length == 1){

View File

@@ -15,7 +15,6 @@
android:layout_margin="16dp"
android:layout_weight="3"
android:layout_marginTop="0dp"
android:elevation="4dp"
android:orientation="vertical"
android:gravity="right|bottom">
<TextView
@@ -108,10 +107,12 @@
android:layout_rowWeight="1"
android:layout_columnWeight="1"
android:textSize="30sp"
android:gravity="center"
android:layout_margin="4dp"
app:icon="@drawable/backspace"
android:textAlignment="center"
app:layout_constraintDimensionRatio="1:1"
app:iconSize="30dp"
app:iconSize="32dp"
app:cornerRadius="15dp"/>
<!-- Row 2 -->
<com.google.android.material.button.MaterialButton

View File

@@ -4,17 +4,8 @@
<color name="white">#FFFFFFFF</color>
<!-- Material You dynamic colors -->
<color name="primary">@android:color/system_accent1_600</color>
<color name="on_primary">@android:color/system_accent1_0</color>
<color name="primary_container">@android:color/system_accent1_100</color>
<color name="on_primary_container">@android:color/system_accent1_900</color>
<color name="secondary">@android:color/system_accent2_600</color>
<color name="on_secondary">@android:color/system_accent2_0</color>
<color name="secondary_container">@android:color/system_accent2_100</color>
<color name="on_secondary_container">@android:color/system_accent2_900</color>
<color name="surface">@android:color/system_neutral1_50</color>
<color name="on_surface">@android:color/system_neutral1_900</color>
<color name="primary">#00B43B</color>
<color name="colorPrimaryVariant">#00C15C</color>
<color name="colorSecondary">#39FF97</color>
<color name="textColor">#ffffff</color>
</resources>

View File

@@ -2,13 +2,13 @@
<!-- Base application theme. -->
<style name="Base.Theme.Calculator" parent="Theme.Material3.DayNight.NoActionBar">
<!-- Primary brand color -->
<item name="colorPrimary">@android:color/system_accent1_200</item>
<item name="colorPrimaryVariant">@android:color/system_accent1_300</item>
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryVariant">@color/colorPrimaryVariant</item>
<item name="colorOnPrimary">@color/black</item>
<item name="android:background">@color/black</item>
<!-- Secondary brand color -->
<item name="colorSecondary">@android:color/system_accent2_200</item>
<item name="colorSecondaryVariant">@android:color/system_accent2_300</item>
<item name="colorSecondary">@color/colorSecondary</item>
<item name="colorSecondaryVariant">@color/colorSecondary</item>
<item name="colorOnSecondary">@color/black</item>
<item name="fontFamily">@font/ubuntu_regular</item>
<!-- Status bar color -->
@@ -17,6 +17,6 @@
<!-- Enable window decor fitting -->
<item name="android:windowLightStatusBar">false</item>
<item name="android:windowLightNavigationBar">false</item>
<item name="android:windowLightNavigationBar" tools:targetApi="o_mr1">false</item>
</style>
</resources>

View File

@@ -4,17 +4,8 @@
<color name="white">#FFFFFFFF</color>
<!-- Material You dynamic colors -->
<color name="primary">@android:color/system_accent1_600</color>
<color name="on_primary">@android:color/system_accent1_0</color>
<color name="primary_container">@android:color/system_accent1_100</color>
<color name="on_primary_container">@android:color/system_accent1_900</color>
<color name="secondary">@android:color/system_accent2_600</color>
<color name="on_secondary">@android:color/system_accent2_0</color>
<color name="secondary_container">@android:color/system_accent2_100</color>
<color name="on_secondary_container">@android:color/system_accent2_900</color>
<color name="surface">@android:color/system_neutral1_50</color>
<color name="on_surface">@android:color/system_neutral1_900</color>
<color name="primary">#00B43B</color>
<color name="colorPrimaryVariant">#00C15C</color>
<color name="colorSecondary">#39FF97</color>
<color name="textColor">#000000</color>
</resources>

View File

@@ -2,24 +2,21 @@
<!-- Base application theme. -->
<style name="Base.Theme.Calculator" parent="Theme.Material3.DayNight.NoActionBar">
<!-- Primary brand color -->
<item name="colorPrimary">@android:color/system_accent1_600</item>
<item name="colorPrimaryVariant">@android:color/system_accent1_700</item>
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryVariant">@color/colorPrimaryVariant</item>
<item name="colorOnPrimary">@color/white</item>
<item name="android:textColor"></item>
<item name="fontFamily">@font/ubuntu_regular</item>
<!-- Secondary brand color -->
<item name="colorSecondary">@android:color/system_accent2_600</item>
<item name="colorSecondaryVariant">@android:color/system_accent2_700</item>
<item name="colorOnSecondary">@color/black</item>
<item name="colorSecondary">@color/colorSecondary</item>
<item name="colorSecondaryVariant">@color/colorSecondary</item>
<item name="colorOnSecondary">@color/white</item>
<item name="fontFamily">@font/ubuntu_regular</item>
<!-- Status bar color -->
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:navigationBarColor">@android:color/transparent</item>
<!-- Enable window decor fitting -->
<item name="android:windowLightStatusBar">true</item>
<item name="android:windowLightNavigationBar">true</item>
<item name="android:windowLightNavigationBar" tools:targetApi="o_mr1">true</item>
</style>
<style name="Theme.Calculator" parent="Base.Theme.Calculator" />