design(login): фон, локальный логотип, QR-кнопка по живой теме
_page-login.css: фон страницы #E5EFE8 (был белый); big-forbion.svg забандлен в assets/login/ — логотип виден офлайн и до ввода адреса сервера (грузился с сервера); кнопка QR — «ссылка-кнопка» 40dp с фоном #F0F1F4 r8 и чёрным текстом 14 (была текстовая). Карточка 440/r8/24, заголовок 18/600, поля — уже совпадали. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 57 KiB |
@@ -3,6 +3,8 @@ package ru.forbion.f7cloud.mobile.ui
|
|||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import androidx.activity.compose.rememberLauncherForActivityResult
|
import androidx.activity.compose.rememberLauncherForActivityResult
|
||||||
import androidx.activity.result.contract.ActivityResultContracts
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
|
import androidx.compose.foundation.background
|
||||||
|
import androidx.compose.foundation.clickable
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
import androidx.compose.foundation.layout.Box
|
import androidx.compose.foundation.layout.Box
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
@@ -31,9 +33,11 @@ import androidx.compose.runtime.saveable.rememberSaveable
|
|||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.draw.clip
|
||||||
import androidx.compose.ui.focus.focusProperties
|
import androidx.compose.ui.focus.focusProperties
|
||||||
import androidx.compose.ui.focus.focusRequester
|
import androidx.compose.ui.focus.focusRequester
|
||||||
import androidx.compose.ui.focus.FocusRequester
|
import androidx.compose.ui.focus.FocusRequester
|
||||||
|
import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.layout.ContentScale
|
import androidx.compose.ui.layout.ContentScale
|
||||||
import androidx.compose.ui.platform.LocalContext
|
import androidx.compose.ui.platform.LocalContext
|
||||||
import androidx.compose.ui.platform.LocalFocusManager
|
import androidx.compose.ui.platform.LocalFocusManager
|
||||||
@@ -148,13 +152,15 @@ internal fun LoginScreen(onLogin: (AuthSession) -> Unit) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val logoUrl = remember(serverUrl) {
|
// Логотип — локальный (assets/login/big-forbion.svg из живой темы): виден офлайн и до
|
||||||
"${normalizeServerUrl(serverUrl).trimEnd('/')}/themes/forbion/images/login/big-forbion.svg"
|
// ввода адреса сервера.
|
||||||
}
|
val logoUrl = "file:///android_asset/login/big-forbion.svg"
|
||||||
|
|
||||||
Box(
|
Box(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxSize()
|
.fillMaxSize()
|
||||||
|
// Живая тема логина: фон страницы --backgroud-color-main-darkgray
|
||||||
|
.background(Color(0xFFE5EFE8))
|
||||||
.f7SafeTopInsets()
|
.f7SafeTopInsets()
|
||||||
.verticalScroll(rememberScrollState())
|
.verticalScroll(rememberScrollState())
|
||||||
.padding(horizontal = 16.dp, vertical = 24.dp),
|
.padding(horizontal = 16.dp, vertical = 24.dp),
|
||||||
@@ -269,12 +275,23 @@ internal fun LoginScreen(onLogin: (AuthSession) -> Unit) {
|
|||||||
enabled = !loading && serverUrl.isNotBlank() && username.isNotBlank() && password.isNotBlank(),
|
enabled = !loading && serverUrl.isNotBlank() && username.isNotBlank() && password.isNotBlank(),
|
||||||
modifier = Modifier.fillMaxWidth(),
|
modifier = Modifier.fillMaxWidth(),
|
||||||
)
|
)
|
||||||
F7TextButton(
|
// Живая тема: вторичная кнопка-ссылка 40dp, фон #F0F1F4, r8, текст 14 чёрный
|
||||||
text = "Сканировать QR для входа",
|
Box(
|
||||||
onClick = { launchQrScan() },
|
modifier = Modifier
|
||||||
enabled = !loading,
|
.fillMaxWidth()
|
||||||
modifier = Modifier.fillMaxWidth(),
|
.height(40.dp)
|
||||||
|
.clip(RoundedCornerShape(8.dp))
|
||||||
|
.background(Color(0xFFF0F1F4))
|
||||||
|
.clickable(enabled = !loading, onClick = { launchQrScan() }),
|
||||||
|
contentAlignment = Alignment.Center,
|
||||||
|
) {
|
||||||
|
Text(
|
||||||
|
"Сканировать QR для входа",
|
||||||
|
fontSize = 14.sp,
|
||||||
|
lineHeight = 20.sp,
|
||||||
|
color = F7Colors.TextPrimary,
|
||||||
)
|
)
|
||||||
|
}
|
||||||
if (loading) {
|
if (loading) {
|
||||||
CircularProgressIndicator(color = F7Colors.Primary)
|
CircularProgressIndicator(color = F7Colors.Primary)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user