Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ struct PointOfSaleBarcodeScannerSetup: View {
.onDisappear {
flowManager.onDisappear()
}
.maximumScreenBrightness()
}

// MARK: - Computed Properties
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,14 +41,16 @@ struct PointOfSaleBarcodeScannerBarcodeView: View {
.resizable()
.aspectRatio(contentMode: .fit)
.frame(maxHeight: Constants.maxBarcodeSize)
.padding(POSPadding.medium)
.background(Color.white)
.clipShape(RoundedRectangle(cornerRadius: POSCornerRadiusStyle.medium.value))
}
}
}

extension PointOfSaleBarcodeScannerBarcodeView {
enum Constants {
static let maxBarcodeSize: CGFloat = 142
static let maxBarcodeSize: CGFloat = 168
}
}

Expand Down
58 changes: 58 additions & 0 deletions WooCommerce/Classes/POS/Utils/POSBrightnessControl.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import SwiftUI
import UIKit

@available(iOS 17.0, *)
@Observable
final class POSBrightnessControl {
private var originalBrightness: CGFloat = 0.0
private var isBrightnessIncreased: Bool = false

init() {
originalBrightness = UIScreen.main.brightness
Copy link

Copilot AI Jul 22, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UIScreen.main.brightness should be accessed on the main thread. Consider wrapping this in DispatchQueue.main.async or using @mainactor to ensure thread safety.

Copilot uses AI. Check for mistakes.
}

func increaseBrightnessToMax() {
guard !isBrightnessIncreased else { return }

originalBrightness = UIScreen.main.brightness
UIScreen.main.brightness = 1.0
Copy link

Copilot AI Jul 22, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UIScreen.main.brightness modification should be performed on the main thread. Consider wrapping this in DispatchQueue.main.async or using @mainactor to ensure thread safety.

Copilot uses AI. Check for mistakes.
isBrightnessIncreased = true
}

func restoreOriginalBrightness() {
guard isBrightnessIncreased else { return }

UIScreen.main.brightness = originalBrightness
isBrightnessIncreased = false
}

deinit {
if isBrightnessIncreased {
UIScreen.main.brightness = originalBrightness
Comment on lines +18 to +31
Copy link

Copilot AI Jul 22, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UIScreen.main.brightness modification should be performed on the main thread. Consider wrapping this in DispatchQueue.main.async or using @mainactor to ensure thread safety.

Suggested change
UIScreen.main.brightness = 1.0
isBrightnessIncreased = true
}
func restoreOriginalBrightness() {
guard isBrightnessIncreased else { return }
UIScreen.main.brightness = originalBrightness
isBrightnessIncreased = false
}
deinit {
if isBrightnessIncreased {
UIScreen.main.brightness = originalBrightness
DispatchQueue.main.async {
UIScreen.main.brightness = 1.0
}
isBrightnessIncreased = true
}
func restoreOriginalBrightness() {
guard isBrightnessIncreased else { return }
DispatchQueue.main.async {
UIScreen.main.brightness = originalBrightness
}
isBrightnessIncreased = false
}
deinit {
if isBrightnessIncreased {
DispatchQueue.main.async {
UIScreen.main.brightness = originalBrightness
}

Copilot uses AI. Check for mistakes.
Copy link

Copilot AI Jul 22, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UIScreen.main.brightness modification in deinit should be performed on the main thread. Consider using DispatchQueue.main.async to ensure thread safety during cleanup.

Suggested change
UIScreen.main.brightness = originalBrightness
DispatchQueue.main.async {
UIScreen.main.brightness = originalBrightness
}

Copilot uses AI. Check for mistakes.
}
}
}

/// SwiftUI View Modifier for automatic brightness control
@available(iOS 17.0, *)
struct POSBrightnessControlModifier: ViewModifier {
@State private var brightnessControl = POSBrightnessControl()

func body(content: Content) -> some View {
content
.onAppear {
brightnessControl.increaseBrightnessToMax()
}
.onDisappear {
brightnessControl.restoreOriginalBrightness()
}
}
}

@available(iOS 17.0, *)
extension View {
/// Applies brightness control to the view, increasing brightness to maximum when the view appears
func maximumScreenBrightness() -> some View {
modifier(POSBrightnessControlModifier())
}
}
4 changes: 4 additions & 0 deletions WooCommerce/WooCommerce.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
0174DDBF2CE600C5005D20CA /* ReceiptEmailViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0174DDBE2CE600C0005D20CA /* ReceiptEmailViewModelTests.swift */; };
0177250C2E1CFF7F00016148 /* GameControllerBarcodeParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0177250B2E1CFF7F00016148 /* GameControllerBarcodeParser.swift */; };
0177250E2E1CFF9B00016148 /* GameControllerBarcodeParserTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0177250D2E1CFF9B00016148 /* GameControllerBarcodeParserTests.swift */; };
01806E132E2F7F400033363C /* POSBrightnessControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01806E122E2F7F400033363C /* POSBrightnessControl.swift */; };
0182C8BE2CE3B11300474355 /* MockReceiptEligibilityUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0182C8BD2CE3B10E00474355 /* MockReceiptEligibilityUseCase.swift */; };
0182C8C02CE4DDC700474355 /* CardReaderTransactionAlertReceiptState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0182C8BF2CE4DDC100474355 /* CardReaderTransactionAlertReceiptState.swift */; };
0182C8C22CE4F0DB00474355 /* ReceiptEmailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0182C8C12CE4F0DB00474355 /* ReceiptEmailView.swift */; };
Expand Down Expand Up @@ -3228,6 +3229,7 @@
0174DDBE2CE600C0005D20CA /* ReceiptEmailViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReceiptEmailViewModelTests.swift; sourceTree = "<group>"; };
0177250B2E1CFF7F00016148 /* GameControllerBarcodeParser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameControllerBarcodeParser.swift; sourceTree = "<group>"; };
0177250D2E1CFF9B00016148 /* GameControllerBarcodeParserTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameControllerBarcodeParserTests.swift; sourceTree = "<group>"; };
01806E122E2F7F400033363C /* POSBrightnessControl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = POSBrightnessControl.swift; sourceTree = "<group>"; };
0182C8BD2CE3B10E00474355 /* MockReceiptEligibilityUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockReceiptEligibilityUseCase.swift; sourceTree = "<group>"; };
0182C8BF2CE4DDC100474355 /* CardReaderTransactionAlertReceiptState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardReaderTransactionAlertReceiptState.swift; sourceTree = "<group>"; };
0182C8C12CE4F0DB00474355 /* ReceiptEmailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReceiptEmailView.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -7113,6 +7115,7 @@
026826972BF59D9E0036F959 /* Utils */ = {
isa = PBXGroup;
children = (
01806E122E2F7F400033363C /* POSBrightnessControl.swift */,
689F29192DE4557D004DF52B /* POSStockFormatter.swift */,
681BB5FD2D676060008AF8BB /* POSPadding.swift */,
681BB5FB2D676043008AF8BB /* POSSpacing.swift */,
Expand Down Expand Up @@ -16660,6 +16663,7 @@
B50BB4162141828F00AF0F3C /* FooterSpinnerView.swift in Sources */,
867B330F2B4D39B900DCBEA6 /* BlazeAddParameterView.swift in Sources */,
D8610CE2257099E100A5DF27 /* FancyAlertViewController+UnifiedLogin.swift in Sources */,
01806E132E2F7F400033363C /* POSBrightnessControl.swift in Sources */,
EE289AE62C9D7B31004AB1A6 /* AIToneVoiceViewModel.swift in Sources */,
038BC37D29C37AA400EAF565 /* SetUpTapToPayCompleteViewModel.swift in Sources */,
03E471CE293F63B4001A58AD /* PaymentCaptureOrchestrator.swift in Sources */,
Expand Down
Loading