diff --git a/.github/workflows/github_actions.yml b/.github/workflows/github_actions.yml
index 4d494d1..cb4c7e4 100644
--- a/.github/workflows/github_actions.yml
+++ b/.github/workflows/github_actions.yml
@@ -17,7 +17,7 @@ jobs:
uses: actions/checkout@v4
- name: Setup Java
- uses: actions/setup-java@v3
+ uses: actions/setup-java@v4
with:
distribution: 'zulu'
java-version: '17'
@@ -32,7 +32,7 @@ jobs:
run: bundle exec fastlane coverage
- name: Setup sonarqube
- uses: warchant/setup-sonar-scanner@v7
+ uses: warchant/setup-sonar-scanner@v8
- name: Send to Sonarcloud
run: bundle exec fastlane sonarqube
diff --git a/.gitignore b/.gitignore
index 52b109c..5e50490 100644
--- a/.gitignore
+++ b/.gitignore
@@ -85,3 +85,4 @@ lint/tmp/
# lint/reports/
.DS_Store
+Gemfile.lock
diff --git a/CHANGELOG.md b/CHANGELOG.md
index fa3fd63..d2d373e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,6 +8,12 @@ The changes documented here do not include those from the original repository.
## [Unreleased]
+### 26-03-2024
+- Add zoom options (https://outsystemsrd.atlassian.net/browse/RMET-2987).
+
+### 22-02-2024
+- Update `github_actions.yml` file steps versions (https://outsystemsrd.atlassian.net/browse/RMET-2568).
+
## [1.0.0]
### 09-01-2024
diff --git a/Gemfile.lock b/Gemfile.lock
deleted file mode 100644
index 9ef881d..0000000
--- a/Gemfile.lock
+++ /dev/null
@@ -1,218 +0,0 @@
-GEM
- remote: https://rubygems.org/
- specs:
- CFPropertyList (3.0.5)
- rexml
- addressable (2.8.0)
- public_suffix (>= 2.0.2, < 5.0)
- artifactory (3.0.15)
- atomos (0.1.3)
- aws-eventstream (1.2.0)
- aws-partitions (1.594.0)
- aws-sdk-core (3.131.1)
- aws-eventstream (~> 1, >= 1.0.2)
- aws-partitions (~> 1, >= 1.525.0)
- aws-sigv4 (~> 1.1)
- jmespath (~> 1, >= 1.6.1)
- aws-sdk-kms (1.57.0)
- aws-sdk-core (~> 3, >= 3.127.0)
- aws-sigv4 (~> 1.1)
- aws-sdk-s3 (1.114.0)
- aws-sdk-core (~> 3, >= 3.127.0)
- aws-sdk-kms (~> 1)
- aws-sigv4 (~> 1.4)
- aws-sigv4 (1.5.0)
- aws-eventstream (~> 1, >= 1.0.2)
- babosa (1.0.4)
- claide (1.1.0)
- colored (1.2)
- colored2 (3.1.2)
- commander (4.6.0)
- highline (~> 2.0.0)
- declarative (0.0.20)
- digest-crc (0.6.4)
- rake (>= 12.0.0, < 14.0.0)
- domain_name (0.5.20190701)
- unf (>= 0.0.5, < 1.0.0)
- dotenv (2.7.6)
- emoji_regex (3.2.3)
- excon (0.92.3)
- faraday (1.10.0)
- faraday-em_http (~> 1.0)
- faraday-em_synchrony (~> 1.0)
- faraday-excon (~> 1.1)
- faraday-httpclient (~> 1.0)
- faraday-multipart (~> 1.0)
- faraday-net_http (~> 1.0)
- faraday-net_http_persistent (~> 1.0)
- faraday-patron (~> 1.0)
- faraday-rack (~> 1.0)
- faraday-retry (~> 1.0)
- ruby2_keywords (>= 0.0.4)
- faraday-cookie_jar (0.0.7)
- faraday (>= 0.8.0)
- http-cookie (~> 1.0.0)
- faraday-em_http (1.0.0)
- faraday-em_synchrony (1.0.0)
- faraday-excon (1.1.0)
- faraday-httpclient (1.0.1)
- faraday-multipart (1.0.3)
- multipart-post (>= 1.2, < 3)
- faraday-net_http (1.0.1)
- faraday-net_http_persistent (1.2.0)
- faraday-patron (1.0.0)
- faraday-rack (1.0.0)
- faraday-retry (1.0.3)
- faraday_middleware (1.2.0)
- faraday (~> 1.0)
- fastimage (2.2.6)
- fastlane (2.206.2)
- CFPropertyList (>= 2.3, < 4.0.0)
- addressable (>= 2.8, < 3.0.0)
- artifactory (~> 3.0)
- aws-sdk-s3 (~> 1.0)
- babosa (>= 1.0.3, < 2.0.0)
- bundler (>= 1.12.0, < 3.0.0)
- colored
- commander (~> 4.6)
- dotenv (>= 2.1.1, < 3.0.0)
- emoji_regex (>= 0.1, < 4.0)
- excon (>= 0.71.0, < 1.0.0)
- faraday (~> 1.0)
- faraday-cookie_jar (~> 0.0.6)
- faraday_middleware (~> 1.0)
- fastimage (>= 2.1.0, < 3.0.0)
- gh_inspector (>= 1.1.2, < 2.0.0)
- google-apis-androidpublisher_v3 (~> 0.3)
- google-apis-playcustomapp_v1 (~> 0.1)
- google-cloud-storage (~> 1.31)
- highline (~> 2.0)
- json (< 3.0.0)
- jwt (>= 2.1.0, < 3)
- mini_magick (>= 4.9.4, < 5.0.0)
- multipart-post (~> 2.0.0)
- naturally (~> 2.2)
- optparse (~> 0.1.1)
- plist (>= 3.1.0, < 4.0.0)
- rubyzip (>= 2.0.0, < 3.0.0)
- security (= 0.1.3)
- simctl (~> 1.6.3)
- terminal-notifier (>= 2.0.0, < 3.0.0)
- terminal-table (>= 1.4.5, < 2.0.0)
- tty-screen (>= 0.6.3, < 1.0.0)
- tty-spinner (>= 0.8.0, < 1.0.0)
- word_wrap (~> 1.0.0)
- xcodeproj (>= 1.13.0, < 2.0.0)
- xcpretty (~> 0.3.0)
- xcpretty-travis-formatter (>= 0.0.3)
- gh_inspector (1.1.3)
- google-apis-androidpublisher_v3 (0.21.0)
- google-apis-core (>= 0.4, < 2.a)
- google-apis-core (0.5.0)
- addressable (~> 2.5, >= 2.5.1)
- googleauth (>= 0.16.2, < 2.a)
- httpclient (>= 2.8.1, < 3.a)
- mini_mime (~> 1.0)
- representable (~> 3.0)
- retriable (>= 2.0, < 4.a)
- rexml
- webrick
- google-apis-iamcredentials_v1 (0.10.0)
- google-apis-core (>= 0.4, < 2.a)
- google-apis-playcustomapp_v1 (0.7.0)
- google-apis-core (>= 0.4, < 2.a)
- google-apis-storage_v1 (0.14.0)
- google-apis-core (>= 0.4, < 2.a)
- google-cloud-core (1.6.0)
- google-cloud-env (~> 1.0)
- google-cloud-errors (~> 1.0)
- google-cloud-env (1.6.0)
- faraday (>= 0.17.3, < 3.0)
- google-cloud-errors (1.2.0)
- google-cloud-storage (1.36.2)
- addressable (~> 2.8)
- digest-crc (~> 0.4)
- google-apis-iamcredentials_v1 (~> 0.1)
- google-apis-storage_v1 (~> 0.1)
- google-cloud-core (~> 1.6)
- googleauth (>= 0.16.2, < 2.a)
- mini_mime (~> 1.0)
- googleauth (1.1.3)
- faraday (>= 0.17.3, < 3.a)
- jwt (>= 1.4, < 3.0)
- memoist (~> 0.16)
- multi_json (~> 1.11)
- os (>= 0.9, < 2.0)
- signet (>= 0.16, < 2.a)
- highline (2.0.3)
- http-cookie (1.0.5)
- domain_name (~> 0.5)
- httpclient (2.8.3)
- jmespath (1.6.1)
- json (2.6.2)
- jwt (2.3.0)
- memoist (0.16.2)
- mini_magick (4.11.0)
- mini_mime (1.1.2)
- multi_json (1.15.0)
- multipart-post (2.0.0)
- nanaimo (0.3.0)
- naturally (2.2.1)
- optparse (0.1.1)
- os (1.1.4)
- plist (3.6.0)
- public_suffix (4.0.7)
- rake (13.0.6)
- representable (3.2.0)
- declarative (< 0.1.0)
- trailblazer-option (>= 0.1.1, < 0.2.0)
- uber (< 0.2.0)
- retriable (3.1.2)
- rexml (3.2.5)
- rouge (2.0.7)
- ruby2_keywords (0.0.5)
- rubyzip (2.3.2)
- security (0.1.3)
- signet (0.16.1)
- addressable (~> 2.8)
- faraday (>= 0.17.5, < 3.0)
- jwt (>= 1.5, < 3.0)
- multi_json (~> 1.10)
- simctl (1.6.8)
- CFPropertyList
- naturally
- terminal-notifier (2.0.0)
- terminal-table (1.8.0)
- unicode-display_width (~> 1.1, >= 1.1.1)
- trailblazer-option (0.1.2)
- tty-cursor (0.7.1)
- tty-screen (0.8.1)
- tty-spinner (0.9.3)
- tty-cursor (~> 0.7)
- uber (0.1.0)
- unf (0.1.4)
- unf_ext
- unf_ext (0.0.8.2)
- unicode-display_width (1.8.0)
- webrick (1.7.0)
- word_wrap (1.0.0)
- xcodeproj (1.21.0)
- CFPropertyList (>= 2.3.3, < 4.0)
- atomos (~> 0.1.3)
- claide (>= 1.0.2, < 2.0)
- colored2 (~> 3.1)
- nanaimo (~> 0.3.0)
- rexml (~> 3.2.4)
- xcpretty (0.3.0)
- rouge (~> 2.0.7)
- xcpretty-travis-formatter (1.0.1)
- xcpretty (~> 0.2, >= 0.0.7)
-
-PLATFORMS
- arm64-darwin-21
-
-DEPENDENCIES
- fastlane
-
-BUNDLED WITH
- 2.3.7
diff --git a/docs/LICENSE b/LICENSE
similarity index 100%
rename from docs/LICENSE
rename to LICENSE
diff --git a/docs/assets/createRepositoryButton.png b/docs/assets/createRepositoryButton.png
deleted file mode 100644
index 423ed4a..0000000
Binary files a/docs/assets/createRepositoryButton.png and /dev/null differ
diff --git a/docs/assets/repositoryNameExample.png b/docs/assets/repositoryNameExample.png
deleted file mode 100644
index a381131..0000000
Binary files a/docs/assets/repositoryNameExample.png and /dev/null differ
diff --git a/docs/assets/useThisTemplateButton.png b/docs/assets/useThisTemplateButton.png
deleted file mode 100644
index 22dab19..0000000
Binary files a/docs/assets/useThisTemplateButton.png and /dev/null differ
diff --git a/pom.xml b/pom.xml
index 38da1b1..0f11d8a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,5 +7,5 @@
4.0.0
com.github.outsystems
osbarcode-android
- 1.0.0
+ 1.0.1
diff --git a/src/main/kotlin/com/outsystems/plugins/barcode/view/OSBARCScannerActivity.kt b/src/main/kotlin/com/outsystems/plugins/barcode/view/OSBARCScannerActivity.kt
index d34dd47..b4bff6e 100644
--- a/src/main/kotlin/com/outsystems/plugins/barcode/view/OSBARCScannerActivity.kt
+++ b/src/main/kotlin/com/outsystems/plugins/barcode/view/OSBARCScannerActivity.kt
@@ -33,7 +33,9 @@ import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
@@ -41,10 +43,13 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.safeDrawingPadding
import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.layout.wrapContentWidth
+import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Icon
+import androidx.compose.material3.OutlinedButton
import androidx.compose.material3.Text
import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi
import androidx.compose.material3.windowsizeclass.WindowHeightSizeClass
@@ -65,6 +70,7 @@ import androidx.compose.ui.geometry.Rect
import androidx.compose.ui.geometry.RoundRect
import androidx.compose.ui.geometry.Size
import androidx.compose.ui.graphics.ClipOp
+import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.Path
import androidx.compose.ui.graphics.drawscope.Stroke
import androidx.compose.ui.graphics.drawscope.clipPath
@@ -92,8 +98,9 @@ import com.outsystems.plugins.barcode.view.ui.theme.ButtonsBackgroundGray
import com.outsystems.plugins.barcode.view.ui.theme.ButtonsBackgroundWhite
import com.outsystems.plugins.barcode.view.ui.theme.ButtonsBorderGray
import com.outsystems.plugins.barcode.view.ui.theme.ButtonsTextGray
+import com.outsystems.plugins.barcode.view.ui.theme.ButtonsTextOrange
import com.outsystems.plugins.barcode.view.ui.theme.ButtonsTextWhite
-import com.outsystems.plugins.barcode.view.ui.theme.CustomGray
+import com.outsystems.plugins.barcode.view.ui.theme.CloseButtonBackground
import com.outsystems.plugins.barcode.view.ui.theme.NoPadding
import com.outsystems.plugins.barcode.view.ui.theme.ScanAimWhite
import com.outsystems.plugins.barcode.view.ui.theme.ScanButtonCornerRadius
@@ -105,8 +112,12 @@ import com.outsystems.plugins.barcode.view.ui.theme.ScannerAimStrokeWidth
import com.outsystems.plugins.barcode.view.ui.theme.ScannerBackgroundBlack
import com.outsystems.plugins.barcode.view.ui.theme.ScannerBorderPadding
import com.outsystems.plugins.barcode.view.ui.theme.TextToRectPadding
+import com.outsystems.plugins.barcode.view.ui.theme.ZoomButtonBackground
+import com.outsystems.plugins.barcode.view.ui.theme.ZoomButtonBackgroundSelected
+import com.outsystems.plugins.barcode.view.ui.theme.ZoomButtonSize
import java.util.concurrent.ExecutorService
import java.util.concurrent.Executors
+import kotlin.math.roundToInt
/**
* This class is responsible for implementing the UI of the scanning screen using Jetpack Compose.
@@ -516,16 +527,36 @@ class OSBARCScannerActivity : ComponentActivity() {
.background(ScannerBackgroundBlack)
.weight(1f, fill = true),
) {
- ScanActionButtons(
- parameters,
- NoPadding,
- scanModifier = Modifier
+ val showTorch = camera.cameraInfo.hasFlashUnit()
+ val showScan = parameters.scanButton
+
+ Column(
+ modifier = Modifier
.padding(bottom = ScannerBorderPadding)
.align(Alignment.BottomCenter),
- torchModifier = Modifier
- .padding(bottom = ScannerBorderPadding, end = ScannerBorderPadding)
- .align(Alignment.BottomEnd)
- )
+ horizontalAlignment = Alignment.CenterHorizontally
+ ) {
+
+ ZoomButtons()
+
+ // scan button to turn on scanning when used
+ if (showScan) {
+ Spacer(modifier = Modifier.height(16.dp))
+ ScanButton(
+ modifier = Modifier
+ .height(ActionButtonsDistance),
+ parameters.scanText)
+ }
+ }
+
+ // flashlight button
+ if (showTorch) {
+ TorchButton(
+ modifier = Modifier
+ .padding(bottom = ScannerBorderPadding, end = ScannerBorderPadding)
+ .align(Alignment.BottomEnd)
+ )
+ }
}
}
}
@@ -575,7 +606,10 @@ class OSBARCScannerActivity : ComponentActivity() {
ScanInstructions(
modifier = Modifier
.fillMaxWidth()
- .padding(top = borderPadding, bottom = if (isPhone) NoPadding else textToRectPadding),
+ .padding(
+ top = borderPadding,
+ bottom = if (isPhone) NoPadding else textToRectPadding
+ ),
parameters
)
@@ -607,20 +641,33 @@ class OSBARCScannerActivity : ComponentActivity() {
modifier = Modifier
.padding(end = ScannerBorderPadding)
.align(Alignment.CenterEnd),
- verticalArrangement = Arrangement.Center
+ verticalArrangement = Arrangement.Center,
+ horizontalAlignment = Alignment.End
) {
- ScanActionButtons(
- parameters,
- ScannerBorderPadding,
- scanModifier = Modifier
- .align(Alignment.End),
- torchModifier = Modifier
- .align(Alignment.End),
- )
- }
+ val showTorch = camera.cameraInfo.hasFlashUnit()
+ val showScan = parameters.scanButton
+
+ // flashlight button
+ if (showTorch) {
+ TorchButton(
+ modifier = Modifier
+ .align(Alignment.End)
+ )
+ Spacer(modifier = Modifier.height(16.dp))
+ }
- }
+ ZoomButtons()
+ // scan button to turn on scanning when used
+ if (showScan) {
+ Spacer(modifier = Modifier.height(16.dp))
+ ScanButton(
+ modifier = Modifier
+ .height(ActionButtonsDistance),
+ parameters.scanText)
+ }
+ }
+ }
}
}
@@ -633,12 +680,14 @@ class OSBARCScannerActivity : ComponentActivity() {
Icon(
painter = painterResource(id = R.drawable.close),
contentDescription = null,
- tint = CustomGray,
+ tint = Color.White,
modifier = modifier
+ .background(color = CloseButtonBackground, shape = CircleShape)
.clickable {
setResult(OSBARCError.SCAN_CANCELLED_ERROR.code)
finish()
}
+ .padding(12.dp)
)
}
@@ -723,45 +772,115 @@ class OSBARCScannerActivity : ComponentActivity() {
}
/**
- * Composable function, responsible for building the action buttons
- * on the UI.
- * This component will only be rendered if scan parameters instructs so.
- * @param parameters the scan parameters
- * @param verticalPadding the vertical spacing between buttons
- * @param scanModifier the custom modifier for the scan button
- * @param torchModifier the custom modifier for the torch button
+ * Composable function, responsible for building the zoom buttons on the UI.
*/
@Composable
- fun ScanActionButtons(parameters: OSBARCScanParameters,
- verticalPadding: Dp,
- scanModifier: Modifier,
- torchModifier: Modifier) {
-
- val showTorch = camera.cameraInfo.hasFlashUnit()
- val showScan = parameters.scanButton
-
- val buttonSpacing = if(showTorch && showScan)
- { verticalPadding.times(0.5f) } else { verticalPadding.times(0f) }
-
- // flashlight button
- if (showTorch) {
- TorchButton(
- torchModifier
- .padding(bottom = buttonSpacing)
- .size(ActionButtonsDistance),
- )
+ fun ZoomButtons() {
+ val minZoomRatio = camera.cameraInfo.zoomState.value?.minZoomRatio ?: 1f
+ val roundedRatio = (minZoomRatio * 10).roundToInt() / 10f
+ val maxZoomRatio = camera.cameraInfo.zoomState.value?.maxZoomRatio ?: 1f
+ var selectedButton by remember { mutableStateOf(2) }
+
+ Row(
+ modifier = Modifier
+ .background(ButtonsBackgroundGray, CircleShape)
+ .wrapContentWidth(),
+ horizontalArrangement = Arrangement.Center,
+ verticalAlignment = Alignment.CenterVertically,
+ ) {
+ // we only show the button with zoom below zero if that zoom value is possible
+ if (minZoomRatio < 1f) {
+ ZoomButton(
+ modifier = Modifier
+ .padding(start = 6.dp, end = 8.dp),
+ selectedButton = selectedButton,
+ buttonToCompare = 1,
+ "$roundedRatio${getZoomButtonSuffix(selectedButton, 1)}",
+ onClick = {
+ selectedButton = 1
+ camera.cameraControl.setZoomRatio(minZoomRatio)
+ }
+ )
+ }
+
+ // we only want to show 1x button if there are more buttons
+ // if 1x is the only button, might as well not show it
+ if (minZoomRatio < 1f || maxZoomRatio >= 2f) {
+ ZoomButton(
+ modifier = Modifier
+ .padding(
+ start = if (minZoomRatio < 1) 0.dp else 6.dp,
+ end = if (maxZoomRatio >= 2) 8.dp else 6.dp
+ ),
+ selectedButton = selectedButton,
+ buttonToCompare = 2,
+ "1${getZoomButtonSuffix(selectedButton, 2)}",
+ onClick = {
+ selectedButton = 2
+ camera.cameraControl.setZoomRatio(1f)
+ }
+ )
+ }
+
+ // we only show 2x button if that zoom is available
+ if (maxZoomRatio >= 2f) {
+ ZoomButton(
+ modifier = Modifier
+ .padding(end = 6.dp),
+ selectedButton = selectedButton,
+ buttonToCompare = 3,
+ "2${getZoomButtonSuffix(selectedButton, 3)}",
+ onClick = {
+ selectedButton = 3
+ camera.cameraControl.setZoomRatio(2f)
+ }
+ )
+ }
}
+ }
- // scan button to turn on scanning when used
- if (showScan) {
- ScanButton(
- scanModifier
- .padding(top = buttonSpacing)
- .height(ActionButtonsDistance),
- parameters.scanText)
+ /**
+ * Composable function, responsible for building single zoom button on the UI.
+ * @param modifier - modifier to be used in button
+ * @param selectedButton - information about the selected button (1, 2 or 3)
+ * @param buttonToCompare - value to compare with selectedButton
+ * @param buttonText - string to be used in Text composable
+ * @param onClick - closure to be called when clicking the button
+ */
+ @Composable
+ fun ZoomButton(
+ modifier: Modifier = Modifier,
+ selectedButton: Int,
+ buttonToCompare: Int,
+ buttonText: String,
+ onClick: () -> Unit
+ ) {
+ OutlinedButton(
+ onClick = onClick,
+ modifier = modifier
+ .padding(top = 4.dp, bottom = 4.dp)
+ .size(ZoomButtonSize),
+ shape = CircleShape,
+ colors = ButtonDefaults.buttonColors(
+ containerColor = if (selectedButton == buttonToCompare) ZoomButtonBackgroundSelected else ZoomButtonBackground
+ ),
+ contentPadding = PaddingValues(NoPadding), // so that text shows
+ ) {
+ Text(
+ text = buttonText,
+ color = if (selectedButton == buttonToCompare) ButtonsTextOrange else ButtonsTextWhite,
+ textAlign = TextAlign.Center,
+ )
}
}
+ /**
+ * Helper function to determine suffix for zoom buttons
+ */
+ private fun getZoomButtonSuffix(selectedButton: Int, buttonToCompare: Int): String {
+ return if (selectedButton == buttonToCompare) "x" else ""
+ }
+
private fun hasCameraPermission(context: Context): Boolean {
return ContextCompat.checkSelfPermission(
context,
diff --git a/src/main/kotlin/com/outsystems/plugins/barcode/view/ui.theme/Color.kt b/src/main/kotlin/com/outsystems/plugins/barcode/view/ui.theme/Color.kt
index 60b23c3..7f4edfc 100644
--- a/src/main/kotlin/com/outsystems/plugins/barcode/view/ui.theme/Color.kt
+++ b/src/main/kotlin/com/outsystems/plugins/barcode/view/ui.theme/Color.kt
@@ -18,7 +18,11 @@ val ButtonsBorderGray = Color(0xFF4F575E)
val ButtonsBackgroundWhite = Color(0xFFFFFFD9)
val ButtonsTextGray = Color(0xFF4F575E)
val ButtonsTextWhite = Color(0xFFFFFFFF)
+val ButtonsTextOrange = Color(0xFFF59F00)
val ScanInstructionsWhite = Color(0xFFFFFFFF)
val ScanAimWhite = Color(0xFFFFFFFF)
-val ScannerBackgroundBlack = Color.Black.copy(alpha = 0.6f)
\ No newline at end of file
+val ScannerBackgroundBlack = Color.Black.copy(alpha = 0.6f)
+val ZoomButtonBackground = Color.Black.copy(alpha = 0.2f)
+val ZoomButtonBackgroundSelected = Color.Black.copy(alpha = 0.5f)
+val CloseButtonBackground = Color.Black.copy(alpha = 0.25f)
\ No newline at end of file
diff --git a/src/main/kotlin/com/outsystems/plugins/barcode/view/ui.theme/Sizes.kt b/src/main/kotlin/com/outsystems/plugins/barcode/view/ui.theme/Sizes.kt
index b051907..c9aa1c9 100644
--- a/src/main/kotlin/com/outsystems/plugins/barcode/view/ui.theme/Sizes.kt
+++ b/src/main/kotlin/com/outsystems/plugins/barcode/view/ui.theme/Sizes.kt
@@ -16,3 +16,5 @@ val ActionButtonsDistance = 48f.dp
const val SizeRatioWidth = 0.6
const val SizeRatioHeight = 0.5
+
+val ZoomButtonSize = 35f.dp
diff --git a/src/main/res/drawable/close.xml b/src/main/res/drawable/close.xml
index 92e1a8a..85d9e4e 100644
--- a/src/main/res/drawable/close.xml
+++ b/src/main/res/drawable/close.xml
@@ -1,9 +1,10 @@
+ android:width="14dp"
+ android:height="14dp"
+ android:viewportWidth="14"
+ android:viewportHeight="14">
+ android:pathData="M13.53,1.53C13.823,1.237 13.823,0.763 13.53,0.47C13.237,0.177 12.763,0.177 12.47,0.47L7,5.939L1.53,0.47C1.237,0.177 0.763,0.177 0.47,0.47C0.177,0.763 0.177,1.237 0.47,1.53L5.939,7L0.47,12.47C0.177,12.763 0.177,13.237 0.47,13.53C0.763,13.823 1.237,13.823 1.53,13.53L7,8.061L12.47,13.53C12.763,13.823 13.237,13.823 13.53,13.53C13.823,13.237 13.823,12.763 13.53,12.47L8.061,7L13.53,1.53Z"
+ android:fillColor="#ffffff"
+ android:fillType="evenOdd"/>