Skip to content

Commit 1443830

Browse files
authored
[Woo POS][Barcodes] Frame the QR code and increase brightness for better scanability (#15934)
2 parents 24ef55a + 80faa66 commit 1443830

File tree

4 files changed

+66
-1
lines changed

4 files changed

+66
-1
lines changed

WooCommerce/Classes/POS/Presentation/Barcode Scanner Setup/PointOfSaleBarcodeScannerSetup.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ struct PointOfSaleBarcodeScannerSetup: View {
3838
.onDisappear {
3939
flowManager.onDisappear()
4040
}
41+
.maximumScreenBrightness()
4142
}
4243

4344
// MARK: - Computed Properties

WooCommerce/Classes/POS/Presentation/Barcode Scanner Setup/PointOfSaleBarcodeScannerSetupStepViews.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,16 @@ struct PointOfSaleBarcodeScannerBarcodeView: View {
4141
.resizable()
4242
.aspectRatio(contentMode: .fit)
4343
.frame(maxHeight: Constants.maxBarcodeSize)
44+
.padding(POSPadding.medium)
4445
.background(Color.white)
46+
.clipShape(RoundedRectangle(cornerRadius: POSCornerRadiusStyle.medium.value))
4547
}
4648
}
4749
}
4850

4951
extension PointOfSaleBarcodeScannerBarcodeView {
5052
enum Constants {
51-
static let maxBarcodeSize: CGFloat = 142
53+
static let maxBarcodeSize: CGFloat = 168
5254
}
5355
}
5456

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import SwiftUI
2+
import UIKit
3+
4+
@available(iOS 17.0, *)
5+
@Observable
6+
final class POSBrightnessControl {
7+
private var originalBrightness: CGFloat = 0.0
8+
private var isBrightnessIncreased: Bool = false
9+
10+
init() {
11+
originalBrightness = UIScreen.main.brightness
12+
}
13+
14+
func increaseBrightnessToMax() {
15+
guard !isBrightnessIncreased else { return }
16+
17+
originalBrightness = UIScreen.main.brightness
18+
UIScreen.main.brightness = 1.0
19+
isBrightnessIncreased = true
20+
}
21+
22+
func restoreOriginalBrightness() {
23+
guard isBrightnessIncreased else { return }
24+
25+
UIScreen.main.brightness = originalBrightness
26+
isBrightnessIncreased = false
27+
}
28+
29+
deinit {
30+
if isBrightnessIncreased {
31+
UIScreen.main.brightness = originalBrightness
32+
}
33+
}
34+
}
35+
36+
/// SwiftUI View Modifier for automatic brightness control
37+
@available(iOS 17.0, *)
38+
struct POSBrightnessControlModifier: ViewModifier {
39+
@State private var brightnessControl = POSBrightnessControl()
40+
41+
func body(content: Content) -> some View {
42+
content
43+
.onAppear {
44+
brightnessControl.increaseBrightnessToMax()
45+
}
46+
.onDisappear {
47+
brightnessControl.restoreOriginalBrightness()
48+
}
49+
}
50+
}
51+
52+
@available(iOS 17.0, *)
53+
extension View {
54+
/// Applies brightness control to the view, increasing brightness to maximum when the view appears
55+
func maximumScreenBrightness() -> some View {
56+
modifier(POSBrightnessControlModifier())
57+
}
58+
}

WooCommerce/WooCommerce.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
0174DDBF2CE600C5005D20CA /* ReceiptEmailViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0174DDBE2CE600C0005D20CA /* ReceiptEmailViewModelTests.swift */; };
5151
0177250C2E1CFF7F00016148 /* GameControllerBarcodeParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0177250B2E1CFF7F00016148 /* GameControllerBarcodeParser.swift */; };
5252
0177250E2E1CFF9B00016148 /* GameControllerBarcodeParserTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0177250D2E1CFF9B00016148 /* GameControllerBarcodeParserTests.swift */; };
53+
01806E132E2F7F400033363C /* POSBrightnessControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01806E122E2F7F400033363C /* POSBrightnessControl.swift */; };
5354
0182C8BE2CE3B11300474355 /* MockReceiptEligibilityUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0182C8BD2CE3B10E00474355 /* MockReceiptEligibilityUseCase.swift */; };
5455
0182C8C02CE4DDC700474355 /* CardReaderTransactionAlertReceiptState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0182C8BF2CE4DDC100474355 /* CardReaderTransactionAlertReceiptState.swift */; };
5556
0182C8C22CE4F0DB00474355 /* ReceiptEmailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0182C8C12CE4F0DB00474355 /* ReceiptEmailView.swift */; };
@@ -3228,6 +3229,7 @@
32283229
0174DDBE2CE600C0005D20CA /* ReceiptEmailViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReceiptEmailViewModelTests.swift; sourceTree = "<group>"; };
32293230
0177250B2E1CFF7F00016148 /* GameControllerBarcodeParser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameControllerBarcodeParser.swift; sourceTree = "<group>"; };
32303231
0177250D2E1CFF9B00016148 /* GameControllerBarcodeParserTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameControllerBarcodeParserTests.swift; sourceTree = "<group>"; };
3232+
01806E122E2F7F400033363C /* POSBrightnessControl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = POSBrightnessControl.swift; sourceTree = "<group>"; };
32313233
0182C8BD2CE3B10E00474355 /* MockReceiptEligibilityUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockReceiptEligibilityUseCase.swift; sourceTree = "<group>"; };
32323234
0182C8BF2CE4DDC100474355 /* CardReaderTransactionAlertReceiptState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardReaderTransactionAlertReceiptState.swift; sourceTree = "<group>"; };
32333235
0182C8C12CE4F0DB00474355 /* ReceiptEmailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReceiptEmailView.swift; sourceTree = "<group>"; };
@@ -7113,6 +7115,7 @@
71137115
026826972BF59D9E0036F959 /* Utils */ = {
71147116
isa = PBXGroup;
71157117
children = (
7118+
01806E122E2F7F400033363C /* POSBrightnessControl.swift */,
71167119
689F29192DE4557D004DF52B /* POSStockFormatter.swift */,
71177120
681BB5FD2D676060008AF8BB /* POSPadding.swift */,
71187121
681BB5FB2D676043008AF8BB /* POSSpacing.swift */,
@@ -16660,6 +16663,7 @@
1666016663
B50BB4162141828F00AF0F3C /* FooterSpinnerView.swift in Sources */,
1666116664
867B330F2B4D39B900DCBEA6 /* BlazeAddParameterView.swift in Sources */,
1666216665
D8610CE2257099E100A5DF27 /* FancyAlertViewController+UnifiedLogin.swift in Sources */,
16666+
01806E132E2F7F400033363C /* POSBrightnessControl.swift in Sources */,
1666316667
EE289AE62C9D7B31004AB1A6 /* AIToneVoiceViewModel.swift in Sources */,
1666416668
038BC37D29C37AA400EAF565 /* SetUpTapToPayCompleteViewModel.swift in Sources */,
1666516669
03E471CE293F63B4001A58AD /* PaymentCaptureOrchestrator.swift in Sources */,

0 commit comments

Comments
 (0)