diff --git a/android/app/src/main/java/app/tourism/ui/screens/auth/sign_in/SignInScreen.kt b/android/app/src/main/java/app/tourism/ui/screens/auth/sign_in/SignInScreen.kt index 9a6b2d6dca..b8e60c2d9f 100644 --- a/android/app/src/main/java/app/tourism/ui/screens/auth/sign_in/SignInScreen.kt +++ b/android/app/src/main/java/app/tourism/ui/screens/auth/sign_in/SignInScreen.kt @@ -2,6 +2,7 @@ package app.tourism.ui.screens.auth.sign_in import PasswordEditText import androidx.compose.foundation.Image +import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize @@ -23,12 +24,14 @@ import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.input.ImeAction +import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import app.organicmaps.R import app.tourism.BASE_URL import app.tourism.Constants import app.tourism.domain.models.resource.Resource +import app.tourism.drawOverlayForTextBehind import app.tourism.ui.ObserveAsEvents import app.tourism.ui.common.VerticalSpace import app.tourism.ui.common.buttons.PrimaryButton @@ -138,6 +141,19 @@ fun SignInScreen( } } } + + Text( + modifier = Modifier + .fillMaxWidth() + .align(Alignment.BottomStart) + .drawOverlayForTextBehind() + .padding(Constants.SCREEN_PADDING) + .clickable { openUrlInBrowser(context = context, url = "https://rebus.tj") }, + text = stringResource(id = R.string.developed_by_label), + textAlign = TextAlign.End, + color = Color.White, + style = TextStyles.h4.copy() + ) } } diff --git a/android/app/src/main/java/app/tourism/ui/screens/auth/sign_up/SignUpScreen.kt b/android/app/src/main/java/app/tourism/ui/screens/auth/sign_up/SignUpScreen.kt index ec1f6ab803..67b9b30579 100644 --- a/android/app/src/main/java/app/tourism/ui/screens/auth/sign_up/SignUpScreen.kt +++ b/android/app/src/main/java/app/tourism/ui/screens/auth/sign_up/SignUpScreen.kt @@ -3,6 +3,7 @@ package app.tourism.ui.screens.auth.sign_up import PasswordEditText import android.view.LayoutInflater import androidx.compose.foundation.Image +import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize @@ -24,12 +25,14 @@ import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.input.ImeAction +import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.viewinterop.AndroidView import androidx.hilt.navigation.compose.hiltViewModel import app.organicmaps.R import app.tourism.Constants import app.tourism.domain.models.resource.Resource +import app.tourism.drawOverlayForTextBehind import app.tourism.ui.ObserveAsEvents import app.tourism.ui.common.VerticalSpace import app.tourism.ui.common.buttons.PrimaryButton @@ -38,6 +41,7 @@ import app.tourism.ui.common.textfields.AuthEditText import app.tourism.ui.screens.auth.navigateToMainActivity import app.tourism.ui.theme.TextStyles import app.tourism.ui.utils.showToast +import app.tourism.utils.openUrlInBrowser import com.hbb20.CountryCodePicker @Composable @@ -174,6 +178,19 @@ fun SignUpScreen( } } } + + Text( + modifier = Modifier + .fillMaxWidth() + .align(Alignment.BottomStart) + .drawOverlayForTextBehind() + .padding(Constants.SCREEN_PADDING) + .clickable { openUrlInBrowser(context = context, url = "https://rebus.tj") }, + text = stringResource(id = R.string.developed_by_label), + textAlign = TextAlign.End, + color = Color.White, + style = TextStyles.h4.copy() + ) } } diff --git a/android/app/src/main/res/values-ru/strings.xml b/android/app/src/main/res/values-ru/strings.xml index e35796fc6b..62b3ae97c9 100644 --- a/android/app/src/main/res/values-ru/strings.xml +++ b/android/app/src/main/res/values-ru/strings.xml @@ -2163,6 +2163,7 @@ Упс, что-то пошло не так Пожалуйста, подождите, идет загрузка карты Таджикистана. Добро пожаловать в Таджикистан + Developed by Rebus LLC Войти Регистрация Вход diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml index 777d5c4d6a..d7096f344d 100644 --- a/android/app/src/main/res/values/strings.xml +++ b/android/app/src/main/res/values/strings.xml @@ -2205,6 +2205,7 @@ Error Please wait, the map of Tajikistan is loading Welcome to Tajikistan + Developed by Rebus LLC Log in Registration Entry diff --git a/iphone/Maps/LocalizedStrings/en-GB.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/en-GB.lproj/Localizable.strings index 07ef0aa517..3f52e202f9 100644 --- a/iphone/Maps/LocalizedStrings/en-GB.lproj/Localizable.strings +++ b/iphone/Maps/LocalizedStrings/en-GB.lproj/Localizable.strings @@ -3943,6 +3943,8 @@ "organization_name" = "Committee for Tourism Development under the Government of the Republic of Tajikistan "; +"developed_by_label" = "Developed by Rebus LLC"; + "smth_went_wrong" = "Error"; "error" = "Error"; diff --git a/iphone/Maps/LocalizedStrings/en.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/en.lproj/Localizable.strings index eb853175d9..e52b2b0741 100644 --- a/iphone/Maps/LocalizedStrings/en.lproj/Localizable.strings +++ b/iphone/Maps/LocalizedStrings/en.lproj/Localizable.strings @@ -3943,6 +3943,8 @@ "organization_name" = "Committee for Tourism Development under the Government of the Republic of Tajikistan "; +"developed_by_label" = "Developed by Rebus LLC"; + "smth_went_wrong" = "Error"; "error" = "Error"; diff --git a/iphone/Maps/LocalizedStrings/ru.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/ru.lproj/Localizable.strings index 1db5a027ca..cae011b8b4 100644 --- a/iphone/Maps/LocalizedStrings/ru.lproj/Localizable.strings +++ b/iphone/Maps/LocalizedStrings/ru.lproj/Localizable.strings @@ -3943,6 +3943,8 @@ "organization_name" = "Комитет по развитию туризма при Правительстве Республики Таджикистан "; +"developed_by_label" = "Developed by Rebus LLC"; + "smth_went_wrong" = "Упс, что-то пошло не так"; "server_error" = "Ошибка сервера, попробуйте позже"; diff --git a/iphone/Maps/Maps.xcodeproj/xcshareddata/xcschemes/OMaps.xcscheme b/iphone/Maps/Maps.xcodeproj/xcshareddata/xcschemes/OMaps.xcscheme index c89f1bcc2c..9ed7b0f798 100644 --- a/iphone/Maps/Maps.xcodeproj/xcshareddata/xcschemes/OMaps.xcscheme +++ b/iphone/Maps/Maps.xcodeproj/xcshareddata/xcschemes/OMaps.xcscheme @@ -15,7 +15,7 @@ @@ -70,7 +70,7 @@ @@ -87,7 +87,7 @@ diff --git a/iphone/Maps/Tourism/Presentation/Auth/Screens/SignInViewController.swift b/iphone/Maps/Tourism/Presentation/Auth/Screens/SignInViewController.swift index 4005f5c27f..0fd12b28f1 100644 --- a/iphone/Maps/Tourism/Presentation/Auth/Screens/SignInViewController.swift +++ b/iphone/Maps/Tourism/Presentation/Auth/Screens/SignInViewController.swift @@ -65,7 +65,7 @@ class SignInViewController: UIViewController { }() private let signInButton: AppButton = { - let button = AppButton(label: L("sign_in"), isPrimary: true, target: SignInViewController.self, action: #selector(signInTapped)) + let button = AppButton(label: L("sign_in"), isPrimary: true, target: self, action: #selector(signInTapped)) return button }() @@ -77,15 +77,39 @@ class SignInViewController: UIViewController { return button }() + private let developedByLabel: UILabel = { + let label = UILabel() + label.text = L("developed_by_label") + label.textColor = .white + UIKitFont.applyStyle(to: label, style: UIKitFont.h4) + applyWrapContent(label: label) + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + override func viewDidLoad() { super.viewDidLoad() setupViews() } private func setupViews() { + let gradientView = UIView(frame: CGRect(x: 0, y: view.height - 100, width: view.width, height: 100)) + let tapGesture = UITapGestureRecognizer(target: self, action: #selector(developedByLabelTapped)) + + gradientView.addGestureRecognizer(tapGesture) + gradientView.isUserInteractionEnabled = true + + let gradient = CAGradientLayer() + gradient.frame = gradientView.bounds + gradient.colors = [UIColor.clear.cgColor, UIColor.black.cgColor] + gradientView.layer.insertSublayer(gradient, at: 0) + + view.addSubview(backgroundImageView) view.addSubview(backButton) view.addSubview(containerView) + view.addSubview(gradientView) + view.addSubview(developedByLabel) containerView.addSubview(blurView) containerView.addSubview(titleLabel) @@ -139,7 +163,10 @@ class SignInViewController: UIViewController { // Forgot Password Button forgotPasswordButton.topAnchor.constraint(equalTo: signInButton.bottomAnchor, constant: 20), forgotPasswordButton.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: 32), - forgotPasswordButton.bottomAnchor.constraint(equalTo: containerView.bottomAnchor, constant: -32) + forgotPasswordButton.bottomAnchor.constraint(equalTo: containerView.bottomAnchor, constant: -32), + + developedByLabel.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -16), + developedByLabel.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -32) ]) backButton.addTarget(self, action: #selector(backButtonTapped), for: .touchUpInside) @@ -174,6 +201,13 @@ class SignInViewController: UIViewController { self.navigationController?.popViewController(animated: false) } + @objc func developedByLabelTapped() { + print("developedByLabelTapped") + if let url = URL(string: "https://rebus.tj") { + UIApplication.shared.open(url) + } + } + // MARK: - other functions private func showError(message: String) { signInButton.isLoading = false diff --git a/iphone/Maps/Tourism/Presentation/Auth/Screens/SignUpViewController.swift b/iphone/Maps/Tourism/Presentation/Auth/Screens/SignUpViewController.swift index b399dfaf44..849f20de7c 100644 --- a/iphone/Maps/Tourism/Presentation/Auth/Screens/SignUpViewController.swift +++ b/iphone/Maps/Tourism/Presentation/Auth/Screens/SignUpViewController.swift @@ -93,7 +93,7 @@ class SignUpViewController: UIViewController { }() private let signUpButton: AppButton = { - let button = AppButton(label: L("sign_up"), isPrimary: true, target: SignUpViewController.self, action: #selector(signUpClicked)) + let button = AppButton(label: L("sign_up"), isPrimary: true, target: self, action: #selector(signUpClicked)) return button }() diff --git a/iphone/Maps/Tourism/Presentation/Auth/Screens/WelcomeViewController.swift b/iphone/Maps/Tourism/Presentation/Auth/Screens/WelcomeViewController.swift index 8be7ae9e97..0cd2b8579f 100644 --- a/iphone/Maps/Tourism/Presentation/Auth/Screens/WelcomeViewController.swift +++ b/iphone/Maps/Tourism/Presentation/Auth/Screens/WelcomeViewController.swift @@ -43,7 +43,7 @@ class WelcomeViewController: UIViewController { let button = AppButton( label: L("sign_in"), isPrimary: true, - target: WelcomeViewController.self, + target: self, action: #selector(signInClicked) ) return button @@ -53,7 +53,7 @@ class WelcomeViewController: UIViewController { let button = AppButton( label: L("sign_up"), isPrimary: true, - target: WelcomeViewController.self, + target: self, action: #selector(signUpClicked) ) return button diff --git a/iphone/Maps/Tourism/Presentation/Components/TextFields/PasswordTextField.swift b/iphone/Maps/Tourism/Presentation/Components/TextFields/PasswordTextField.swift index cd632b76c0..c79271d70c 100644 --- a/iphone/Maps/Tourism/Presentation/Components/TextFields/PasswordTextField.swift +++ b/iphone/Maps/Tourism/Presentation/Components/TextFields/PasswordTextField.swift @@ -9,7 +9,7 @@ class PasswordTextField: AuthTextField { button.setImage(eyeSlashImg, for: .normal) button.setImage(eyeImage, for: .selected) button.tintColor = .white - button.addTarget(PasswordTextField.self, action: #selector(togglePasswordVisibility), for: .touchUpInside) + button.addTarget(self, action: #selector(togglePasswordVisibility), for: .touchUpInside) button.translatesAutoresizingMaskIntoConstraints = false return button }() diff --git a/iphone/Maps/Tourism/Presentation/Home/Screens/Profile/ProfileViewModel.swift b/iphone/Maps/Tourism/Presentation/Home/Screens/Profile/ProfileViewModel.swift index 04ddf25e5b..4e75cd71b2 100644 --- a/iphone/Maps/Tourism/Presentation/Home/Screens/Profile/ProfileViewModel.swift +++ b/iphone/Maps/Tourism/Presentation/Home/Screens/Profile/ProfileViewModel.swift @@ -113,6 +113,9 @@ class ProfileViewModel: ObservableObject { } private func updatePersonalDataInMemory(personalData: PersonalData) { + if let pfpUrl = personalData.pfpUrl { + self.pfpFromRemote = URL(string: pfpUrl) + } self.fullName = personalData.fullName self.email = personalData.email self.countryCodeName = personalData.country