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