init
This commit is contained in:
parent
aa79a85a07
commit
4dd82d0143
@ -5,6 +5,9 @@
|
||||
<SelectionState runConfigName="app">
|
||||
<option name="selectionMode" value="DROPDOWN" />
|
||||
</SelectionState>
|
||||
<SelectionState runConfigName="CommonButton">
|
||||
<option name="selectionMode" value="DROPDOWN" />
|
||||
</SelectionState>
|
||||
</selectionStates>
|
||||
</component>
|
||||
</project>
|
82
.kotlin/errors/errors-1739790341460.log
Normal file
82
.kotlin/errors/errors-1739790341460.log
Normal file
@ -0,0 +1,82 @@
|
||||
kotlin version: 2.0.0
|
||||
error message: Daemon compilation failed: null
|
||||
java.lang.Exception
|
||||
at org.jetbrains.kotlin.daemon.common.CompileService$CallResult$Error.get(CompileService.kt:69)
|
||||
at org.jetbrains.kotlin.daemon.common.CompileService$CallResult$Error.get(CompileService.kt:65)
|
||||
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:240)
|
||||
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemonOrFallbackImpl(GradleKotlinCompilerWork.kt:159)
|
||||
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.run(GradleKotlinCompilerWork.kt:111)
|
||||
at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction.execute(GradleCompilerRunnerWithWorkers.kt:76)
|
||||
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:63)
|
||||
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:66)
|
||||
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:62)
|
||||
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:100)
|
||||
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:62)
|
||||
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
|
||||
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
|
||||
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)
|
||||
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
|
||||
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
|
||||
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
|
||||
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)
|
||||
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
|
||||
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
|
||||
at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
|
||||
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:59)
|
||||
at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:174)
|
||||
at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
|
||||
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194)
|
||||
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127)
|
||||
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169)
|
||||
at org.gradle.internal.Factories$1.create(Factories.java:31)
|
||||
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:263)
|
||||
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127)
|
||||
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132)
|
||||
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
|
||||
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133)
|
||||
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
|
||||
at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
|
||||
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
|
||||
at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:48)
|
||||
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
|
||||
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
|
||||
at java.base/java.lang.Thread.run(Unknown Source)
|
||||
Caused by: java.nio.file.DirectoryNotEmptyException: C:\Users\sokol\AppData\Local\Temp\kotlin-backups11175331209764711453
|
||||
at java.base/sun.nio.fs.WindowsFileSystemProvider.implDelete(Unknown Source)
|
||||
at java.base/sun.nio.fs.AbstractFileSystemProvider.delete(Unknown Source)
|
||||
at java.base/java.nio.file.Files.delete(Unknown Source)
|
||||
at org.jetbrains.kotlin.incremental.RecoverableCompilationTransaction$cleanupStash$2$1$1.invoke(CompilationTransaction.kt:244)
|
||||
at org.jetbrains.kotlin.incremental.RecoverableCompilationTransaction$cleanupStash$2$1$1.invoke(CompilationTransaction.kt:244)
|
||||
at org.jetbrains.kotlin.incremental.RecoverableCompilationTransaction.cleanupStash$lambda$11$lambda$10$lambda$9(CompilationTransaction.kt:244)
|
||||
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
|
||||
at java.base/java.util.ArrayList.forEach(Unknown Source)
|
||||
at java.base/java.util.stream.SortedOps$RefSortingSink.end(Unknown Source)
|
||||
at java.base/java.util.stream.Sink$ChainedReference.end(Unknown Source)
|
||||
at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
|
||||
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
|
||||
at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
|
||||
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
|
||||
at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
|
||||
at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
|
||||
at org.jetbrains.kotlin.incremental.RecoverableCompilationTransaction.cleanupStash(CompilationTransaction.kt:244)
|
||||
at org.jetbrains.kotlin.incremental.RecoverableCompilationTransaction.close(CompilationTransaction.kt:254)
|
||||
at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.tryCompileIncrementally(IncrementalCompilerRunner.kt:747)
|
||||
at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:120)
|
||||
at org.jetbrains.kotlin.daemon.CompileServiceImplBase.execIncrementalCompiler(CompileServiceImpl.kt:676)
|
||||
at org.jetbrains.kotlin.daemon.CompileServiceImplBase.access$execIncrementalCompiler(CompileServiceImpl.kt:92)
|
||||
at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1661)
|
||||
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source)
|
||||
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
|
||||
at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
|
||||
at java.rmi/sun.rmi.transport.Transport$1.run(Unknown Source)
|
||||
at java.rmi/sun.rmi.transport.Transport$1.run(Unknown Source)
|
||||
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
|
||||
at java.rmi/sun.rmi.transport.Transport.serviceCall(Unknown Source)
|
||||
at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
|
||||
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(Unknown Source)
|
||||
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(Unknown Source)
|
||||
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
|
||||
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
|
||||
... 3 more
|
||||
|
||||
|
82
.kotlin/errors/errors-1739803403035.log
Normal file
82
.kotlin/errors/errors-1739803403035.log
Normal file
@ -0,0 +1,82 @@
|
||||
kotlin version: 2.0.0
|
||||
error message: Daemon compilation failed: null
|
||||
java.lang.Exception
|
||||
at org.jetbrains.kotlin.daemon.common.CompileService$CallResult$Error.get(CompileService.kt:69)
|
||||
at org.jetbrains.kotlin.daemon.common.CompileService$CallResult$Error.get(CompileService.kt:65)
|
||||
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:240)
|
||||
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemonOrFallbackImpl(GradleKotlinCompilerWork.kt:159)
|
||||
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.run(GradleKotlinCompilerWork.kt:111)
|
||||
at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction.execute(GradleCompilerRunnerWithWorkers.kt:76)
|
||||
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:63)
|
||||
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:66)
|
||||
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:62)
|
||||
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:100)
|
||||
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:62)
|
||||
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
|
||||
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
|
||||
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:209)
|
||||
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
|
||||
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
|
||||
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
|
||||
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)
|
||||
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
|
||||
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
|
||||
at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
|
||||
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:59)
|
||||
at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:174)
|
||||
at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
|
||||
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194)
|
||||
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127)
|
||||
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169)
|
||||
at org.gradle.internal.Factories$1.create(Factories.java:31)
|
||||
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:263)
|
||||
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127)
|
||||
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:132)
|
||||
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:164)
|
||||
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:133)
|
||||
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
|
||||
at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
|
||||
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
|
||||
at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:48)
|
||||
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
|
||||
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
|
||||
at java.base/java.lang.Thread.run(Unknown Source)
|
||||
Caused by: java.nio.file.DirectoryNotEmptyException: C:\Users\sokol\AppData\Local\Temp\kotlin-backups6180312817685843796
|
||||
at java.base/sun.nio.fs.WindowsFileSystemProvider.implDelete(Unknown Source)
|
||||
at java.base/sun.nio.fs.AbstractFileSystemProvider.delete(Unknown Source)
|
||||
at java.base/java.nio.file.Files.delete(Unknown Source)
|
||||
at org.jetbrains.kotlin.incremental.RecoverableCompilationTransaction$cleanupStash$2$1$1.invoke(CompilationTransaction.kt:244)
|
||||
at org.jetbrains.kotlin.incremental.RecoverableCompilationTransaction$cleanupStash$2$1$1.invoke(CompilationTransaction.kt:244)
|
||||
at org.jetbrains.kotlin.incremental.RecoverableCompilationTransaction.cleanupStash$lambda$11$lambda$10$lambda$9(CompilationTransaction.kt:244)
|
||||
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
|
||||
at java.base/java.util.ArrayList.forEach(Unknown Source)
|
||||
at java.base/java.util.stream.SortedOps$RefSortingSink.end(Unknown Source)
|
||||
at java.base/java.util.stream.Sink$ChainedReference.end(Unknown Source)
|
||||
at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
|
||||
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
|
||||
at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
|
||||
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
|
||||
at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
|
||||
at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
|
||||
at org.jetbrains.kotlin.incremental.RecoverableCompilationTransaction.cleanupStash(CompilationTransaction.kt:244)
|
||||
at org.jetbrains.kotlin.incremental.RecoverableCompilationTransaction.close(CompilationTransaction.kt:254)
|
||||
at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.tryCompileIncrementally(IncrementalCompilerRunner.kt:747)
|
||||
at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:120)
|
||||
at org.jetbrains.kotlin.daemon.CompileServiceImplBase.execIncrementalCompiler(CompileServiceImpl.kt:676)
|
||||
at org.jetbrains.kotlin.daemon.CompileServiceImplBase.access$execIncrementalCompiler(CompileServiceImpl.kt:92)
|
||||
at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1661)
|
||||
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source)
|
||||
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
|
||||
at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
|
||||
at java.rmi/sun.rmi.transport.Transport$1.run(Unknown Source)
|
||||
at java.rmi/sun.rmi.transport.Transport$1.run(Unknown Source)
|
||||
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
|
||||
at java.rmi/sun.rmi.transport.Transport.serviceCall(Unknown Source)
|
||||
at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
|
||||
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(Unknown Source)
|
||||
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(Unknown Source)
|
||||
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
|
||||
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
|
||||
... 3 more
|
||||
|
||||
|
@ -14,6 +14,7 @@ import androidx.compose.ui.tooling.preview.Preview
|
||||
import com.example.shoesapp.ui.screen.SignInContent
|
||||
import com.example.shoesapp.ui.screen.SigninScreen
|
||||
import com.example.shoesapp.ui.theme.MatuleTheme
|
||||
import com.example.shoesapptest.screen.ForgotPasswordScreen
|
||||
|
||||
class MainActivity : ComponentActivity() {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
@ -21,7 +22,7 @@ class MainActivity : ComponentActivity() {
|
||||
enableEdgeToEdge()
|
||||
setContent {
|
||||
MatuleTheme {
|
||||
SigninScreen()
|
||||
ForgotPasswordScreen()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,260 @@
|
||||
package com.example.shoesapptest.screen
|
||||
|
||||
import android.app.Dialog
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.interaction.MutableInteractionSource
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.PaddingValues
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.wrapContentSize
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.foundation.text.BasicTextField
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.ButtonColors
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.material3.ModalBottomSheetDefaults
|
||||
import androidx.compose.material3.Scaffold
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TextFieldDefaults
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.input.VisualTransformation
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.window.DialogProperties
|
||||
import com.example.shoesapp.ui.theme.MatuleTheme
|
||||
import com.example.shoesapptest.R
|
||||
import androidx.compose.material3.AlertDialog
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.setValue
|
||||
|
||||
@Composable
|
||||
fun ForgotPasswordScreen(){
|
||||
Scaffold(
|
||||
topBar = {
|
||||
Row(
|
||||
modifier = Modifier
|
||||
.padding(top = 35.dp)
|
||||
.fillMaxWidth()
|
||||
.height(40.dp)
|
||||
) {
|
||||
IconButton(onClick = {}) {
|
||||
Icon(painter= painterResource(R.drawable.back_arrow),
|
||||
contentDescription = null)
|
||||
}
|
||||
}
|
||||
}
|
||||
){ paddingValues ->
|
||||
ScreenContent(paddingValues)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun ScreenContent(paddingValues: PaddingValues){
|
||||
Column(
|
||||
modifier = Modifier.padding(paddingValues = paddingValues)
|
||||
){
|
||||
TitleWithSubtitleText(
|
||||
title = stringResource(R.string.title_forgot_password),
|
||||
subTitle = stringResource(R.string.subtitle_forgot_password)
|
||||
)
|
||||
val email = remember { mutableStateOf("") }
|
||||
Spacer(modifier = Modifier.height(35.dp))
|
||||
EmailTextField(
|
||||
placeHolderText = stringResource(R.string.placeholder_email),
|
||||
EmailValue = email.value,
|
||||
onEmailChange = {
|
||||
email.value=it
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun EmailTextField(EmailValue: String,
|
||||
onEmailChange: (String) -> Unit,
|
||||
placeHolderText: String){
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.padding(20.dp)
|
||||
.wrapContentSize(),
|
||||
verticalArrangement = Arrangement.spacedBy(8.dp)
|
||||
){
|
||||
val email = remember { MutableInteractionSource() }
|
||||
BasicTextField(
|
||||
value=EmailValue,
|
||||
onValueChange = {onEmailChange(it)},
|
||||
modifier = Modifier
|
||||
.padding(horizontal = 20.dp)
|
||||
.fillMaxWidth()
|
||||
.clip(RoundedCornerShape(14.dp))
|
||||
.background(MatuleTheme.colors.background)
|
||||
){ innerTextField ->
|
||||
TextFieldDefaults.DecorationBox(
|
||||
value = EmailValue,
|
||||
singleLine = true,
|
||||
innerTextField = innerTextField,
|
||||
colors = TextFieldDefaults.colors(
|
||||
focusedContainerColor = MatuleTheme.colors.background,
|
||||
disabledContainerColor = MatuleTheme.colors.background,
|
||||
unfocusedContainerColor = MatuleTheme.colors.background,
|
||||
errorContainerColor = MatuleTheme.colors.background,
|
||||
unfocusedIndicatorColor = Color.Transparent,
|
||||
focusedIndicatorColor = Color.Transparent,
|
||||
disabledIndicatorColor = Color.Transparent,
|
||||
errorIndicatorColor = Color.Transparent
|
||||
),
|
||||
visualTransformation = VisualTransformation.None,
|
||||
interactionSource = email,
|
||||
enabled = true,
|
||||
placeholder = {
|
||||
if (placeHolderText != null)
|
||||
Text(
|
||||
text = placeHolderText,
|
||||
style = MatuleTheme.typography.bodyRegular14.copy(color = MatuleTheme.colors.hint)
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
CommonButton(
|
||||
modifier = Modifier.padding(top=30.dp),
|
||||
buttonLabel = stringResource(R.string.send_email_forgot)
|
||||
) {}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun TitleWithSubtitleText(title: String, subTitle:String){
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.padding(horizontal = 20.dp)
|
||||
.padding(top = 50.dp),
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
verticalArrangement = Arrangement.spacedBy(10.dp)
|
||||
)
|
||||
{
|
||||
Text(
|
||||
text = title,
|
||||
style = MatuleTheme.typography.headingBold32.copy(color = MatuleTheme.colors.text),
|
||||
textAlign = TextAlign.Center
|
||||
)
|
||||
Text(
|
||||
text = subTitle,
|
||||
maxLines = 2,
|
||||
style = MatuleTheme.typography.subTitleRegular16.copy(color = MatuleTheme.colors.subTextDark),
|
||||
textAlign = TextAlign.Center
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Composable
|
||||
fun CommonButton(modifier: Modifier, buttonLabel: String, onClick: () -> Unit){
|
||||
var showDialog by remember { mutableStateOf(false) }
|
||||
Button(
|
||||
|
||||
modifier = modifier
|
||||
.padding(horizontal = 20.dp)
|
||||
.fillMaxWidth()
|
||||
.height(50.dp)
|
||||
.clip(RoundedCornerShape(14.dp))
|
||||
.background(MatuleTheme.colors.accent)
|
||||
,
|
||||
colors = ButtonColors(
|
||||
containerColor = MatuleTheme.colors.accent,
|
||||
disabledContentColor = Color.Transparent,
|
||||
disabledContainerColor = MatuleTheme.colors.accent,
|
||||
contentColor = Color.Transparent
|
||||
),
|
||||
onClick= {showDialog=true}
|
||||
){
|
||||
Text(
|
||||
text=buttonLabel,
|
||||
style = MatuleTheme.typography.bodyRegular14.copy(color= MatuleTheme.colors.background),
|
||||
textAlign = TextAlign.Center
|
||||
)
|
||||
}
|
||||
if (showDialog) {
|
||||
CheckEmailDialog(onDismiss = { showDialog = false })
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun CheckEmailDialog(onDismiss: () -> Unit) {
|
||||
AlertDialog(
|
||||
onDismissRequest = onDismiss,
|
||||
confirmButton = {},
|
||||
title = {
|
||||
Column(
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
Row(
|
||||
modifier = Modifier.padding(bottom = 8.dp),
|
||||
horizontalArrangement = Arrangement.Center
|
||||
) {
|
||||
Icon(
|
||||
painter = painterResource(R.drawable.email_image),
|
||||
contentDescription = null,
|
||||
tint = MatuleTheme.colors.accent,
|
||||
modifier = Modifier.size(40.dp)
|
||||
)
|
||||
}
|
||||
Text(
|
||||
text = "Проверьте Ваш Email",
|
||||
style = MatuleTheme.typography.bodyRegular16.copy(color = MatuleTheme.colors.text),
|
||||
textAlign = TextAlign.Center
|
||||
)
|
||||
}
|
||||
},
|
||||
text = {
|
||||
Text(
|
||||
text = "Мы отправили код восстановления пароля на вашу электронную почту.",
|
||||
textAlign = TextAlign.Center,
|
||||
style = MatuleTheme.typography.bodyRegular14.copy(color = MatuleTheme.colors.hint)
|
||||
)
|
||||
},
|
||||
modifier = Modifier.clip(RoundedCornerShape(14.dp)),
|
||||
containerColor = Color.White
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -1,113 +1,294 @@
|
||||
package com.example.shoesapp.ui.screen
|
||||
|
||||
import android.R
|
||||
import android.provider.CalendarContract.Colors
|
||||
import android.text.style.ForegroundColorSpan
|
||||
import android.widget.EditText
|
||||
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.interaction.MutableInteractionSource
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.PaddingValues
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.foundation.layout.wrapContentSize
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.foundation.text.BasicTextField
|
||||
import androidx.compose.foundation.text.KeyboardOptions
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.HorizontalDivider
|
||||
import androidx.compose.material3.OutlinedTextField
|
||||
import androidx.compose.material3.ButtonColors
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.material3.Scaffold
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TextField
|
||||
import androidx.compose.material3.TopAppBar
|
||||
import androidx.compose.material3.TextFieldDefaults
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.saveable.rememberSaveable
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.layout.VerticalAlignmentLine
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.input.KeyboardType
|
||||
import androidx.compose.ui.text.input.PasswordVisualTransformation
|
||||
import androidx.compose.ui.text.input.VisualTransformation
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import com.example.shoesapp.ui.theme.MatuleTheme
|
||||
import com.example.shoesapptest.R
|
||||
|
||||
|
||||
@Composable
|
||||
fun SigninScreen(){
|
||||
SignInContent()
|
||||
Scaffold(
|
||||
topBar = {
|
||||
Row(
|
||||
modifier = Modifier
|
||||
.padding(top = 35.dp)
|
||||
.fillMaxWidth()
|
||||
.height(40.dp)
|
||||
) {
|
||||
IconButton(onClick = {}) {
|
||||
Icon(painter= painterResource(R.drawable.back_arrow),
|
||||
contentDescription = null)
|
||||
}
|
||||
}
|
||||
},
|
||||
bottomBar = {
|
||||
Row(
|
||||
horizontalArrangement = Arrangement.Center,
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
modifier = Modifier
|
||||
.padding(bottom = 50.dp)
|
||||
.fillMaxWidth()
|
||||
.height(40.dp)
|
||||
) {
|
||||
Text(
|
||||
text= stringResource(R.string.sign_up),
|
||||
style = MatuleTheme.typography.bodyRegular16.copy(color=MatuleTheme.colors.text),
|
||||
textAlign = TextAlign.Center
|
||||
)
|
||||
}
|
||||
}
|
||||
) { paddingValues ->
|
||||
SignInContent(paddingValues)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Composable
|
||||
fun SignInContent() {
|
||||
Column {
|
||||
TitleWithSubtitleText()
|
||||
}
|
||||
}
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun TitleWithSubtitleText(){
|
||||
fun SignInContent(paddingValues: PaddingValues) {
|
||||
Column(
|
||||
modifier = Modifier.run { padding(horizontal = 20.dp, vertical = 200.dp) },
|
||||
modifier = Modifier.padding(paddingValues = paddingValues)
|
||||
) {
|
||||
|
||||
TitleWithSubtitleText(
|
||||
title = stringResource(R.string.hello),
|
||||
subTitle = stringResource(R.string.sign_in_subtitle)
|
||||
)
|
||||
val email = remember { mutableStateOf("") }
|
||||
val password = remember { mutableStateOf("")}
|
||||
Spacer(modifier = Modifier.height(35.dp))
|
||||
AuthTextField(
|
||||
labelTextEmail = stringResource(R.string.email),
|
||||
labelTextPassword = stringResource(R.string.password),
|
||||
placeHolderTextEmail = stringResource(R.string.template_email),
|
||||
placeHolderTextPassword= stringResource(R.string.template_password),
|
||||
emailValue = email.value,
|
||||
onEmailChange = {
|
||||
email.value = it
|
||||
},
|
||||
passwordValue = password.value,
|
||||
onPasswordChange = {
|
||||
password.value = it
|
||||
}
|
||||
)
|
||||
CommonButton(
|
||||
modifier = Modifier.padding(top=50.dp),
|
||||
buttonLabel = stringResource(R.string.sign_in)){
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun TitleWithSubtitleText(title: String, subTitle:String){
|
||||
Column(
|
||||
modifier = Modifier.run { padding(horizontal = 20.dp) },
|
||||
horizontalAlignment = Alignment.CenterHorizontally,
|
||||
verticalArrangement = Arrangement.spacedBy(10.dp)
|
||||
)
|
||||
{
|
||||
Text(
|
||||
text = "Привет!",
|
||||
text = title,
|
||||
style = MatuleTheme.typography.headingBold32.copy(color = MatuleTheme.colors.text),
|
||||
textAlign = TextAlign.Center,
|
||||
|
||||
)
|
||||
Text(
|
||||
text = "Заполните Свои данные или продолжите через социальные медиа",
|
||||
text = subTitle,
|
||||
maxLines = 2,
|
||||
style = MatuleTheme.typography.subTitleRegular16.copy(color = MatuleTheme.colors.subTextDark),
|
||||
textAlign = TextAlign.Center,
|
||||
color = Color(112, 123, 129, 255)
|
||||
textAlign = TextAlign.Center
|
||||
)
|
||||
Column(
|
||||
modifier = Modifier.run {padding(horizontal = 10.dp, vertical = 30.dp)},
|
||||
horizontalAlignment = Alignment.Start,
|
||||
verticalArrangement = Arrangement.spacedBy(5.dp)
|
||||
)
|
||||
{
|
||||
Text(
|
||||
text="Email",
|
||||
fontSize = 18.sp,
|
||||
textAlign = TextAlign.Left,
|
||||
color=Color(43,43,43,255)
|
||||
)
|
||||
val message = remember{mutableStateOf("")}
|
||||
OutlinedTextField(
|
||||
message.value,
|
||||
{message.value = it},
|
||||
placeholder = { Text("xyz@gmail.com") }
|
||||
)
|
||||
Text(
|
||||
text="Пароль",
|
||||
fontSize = 18.sp,
|
||||
textAlign = TextAlign.Left,
|
||||
color=Color(43,43,43,255)
|
||||
)
|
||||
var password by rememberSaveable { mutableStateOf("") }
|
||||
OutlinedTextField(
|
||||
value = password,
|
||||
onValueChange = { password = it },
|
||||
placeholder = {Text("••••••••")},
|
||||
visualTransformation = PasswordVisualTransformation(),
|
||||
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Password)
|
||||
)
|
||||
}
|
||||
Button(onClick = {}) {
|
||||
Text("Восстановить")
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun AuthTextField( emailValue: String,
|
||||
onEmailChange: (String) -> Unit,
|
||||
passwordValue: String,
|
||||
onPasswordChange: (String) -> Unit,
|
||||
placeHolderTextEmail: String? = null,
|
||||
placeHolderTextPassword: String? = null,
|
||||
labelTextEmail: String? = null,
|
||||
labelTextPassword: String? = null){
|
||||
Column (
|
||||
modifier = Modifier
|
||||
.padding(horizontal = 20.dp)
|
||||
.wrapContentSize(),
|
||||
verticalArrangement = Arrangement.spacedBy(8.dp)
|
||||
) {
|
||||
if (labelTextEmail != null) {
|
||||
Text(
|
||||
text = labelTextEmail,
|
||||
style = MatuleTheme.typography.bodyRegular16.copy(MatuleTheme.colors.text),
|
||||
textAlign = TextAlign.Right
|
||||
)
|
||||
}
|
||||
val interaction = remember { MutableInteractionSource() }
|
||||
BasicTextField(
|
||||
value = emailValue,
|
||||
onValueChange = { onEmailChange(it) },
|
||||
modifier = Modifier
|
||||
.padding(horizontal = 20.dp)
|
||||
.fillMaxWidth()
|
||||
.clip(RoundedCornerShape(14.dp))
|
||||
.background(MatuleTheme.colors.background)
|
||||
) { innerTextField ->
|
||||
TextFieldDefaults.DecorationBox(
|
||||
value = emailValue,
|
||||
singleLine = true,
|
||||
innerTextField = innerTextField,
|
||||
enabled = true,
|
||||
colors = TextFieldDefaults.colors(
|
||||
focusedContainerColor = MatuleTheme.colors.background,
|
||||
disabledContainerColor = MatuleTheme.colors.background,
|
||||
unfocusedContainerColor = MatuleTheme.colors.background,
|
||||
errorContainerColor = MatuleTheme.colors.background,
|
||||
unfocusedIndicatorColor = Color.Transparent,
|
||||
focusedIndicatorColor = Color.Transparent,
|
||||
disabledIndicatorColor = Color.Transparent,
|
||||
errorIndicatorColor = Color.Transparent
|
||||
),
|
||||
visualTransformation = VisualTransformation.None,
|
||||
interactionSource = interaction,
|
||||
placeholder = {
|
||||
if (placeHolderTextEmail != null)
|
||||
Text(
|
||||
text = placeHolderTextEmail,
|
||||
style = MatuleTheme.typography.bodyRegular14.copy(color = MatuleTheme.colors.hint)
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
if (labelTextPassword != null) {
|
||||
Text(
|
||||
text = labelTextPassword,
|
||||
style = MatuleTheme.typography.bodyRegular16.copy(MatuleTheme.colors.text),
|
||||
textAlign = TextAlign.Right
|
||||
)
|
||||
}
|
||||
val password = remember { MutableInteractionSource() }
|
||||
var passwordVisible by remember { mutableStateOf(false) }
|
||||
Row(
|
||||
modifier = Modifier
|
||||
.padding(horizontal = 20.dp)
|
||||
.fillMaxWidth(),
|
||||
verticalAlignment = Alignment.CenterVertically
|
||||
)
|
||||
{
|
||||
BasicTextField(
|
||||
value = passwordValue,
|
||||
onValueChange = { onPasswordChange(it) },
|
||||
visualTransformation = if (passwordVisible) VisualTransformation.None else PasswordVisualTransformation(),
|
||||
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Password),
|
||||
modifier = Modifier
|
||||
.weight(1f)
|
||||
.clip(RoundedCornerShape(14.dp))
|
||||
.background(MatuleTheme.colors.background)
|
||||
) { innerTextField ->
|
||||
TextFieldDefaults.DecorationBox(
|
||||
value = passwordValue,
|
||||
singleLine = true,
|
||||
innerTextField = innerTextField,
|
||||
enabled = true,
|
||||
colors = TextFieldDefaults.colors(
|
||||
focusedContainerColor = MatuleTheme.colors.background,
|
||||
disabledContainerColor = MatuleTheme.colors.background,
|
||||
unfocusedContainerColor = MatuleTheme.colors.background,
|
||||
errorContainerColor = MatuleTheme.colors.background,
|
||||
unfocusedIndicatorColor = Color.Transparent,
|
||||
focusedIndicatorColor = Color.Transparent,
|
||||
disabledIndicatorColor = Color.Transparent,
|
||||
errorIndicatorColor = Color.Transparent
|
||||
),
|
||||
visualTransformation = if (passwordVisible) VisualTransformation.None else PasswordVisualTransformation(),
|
||||
interactionSource = password,
|
||||
placeholder = {
|
||||
if (placeHolderTextPassword != null)
|
||||
Text(
|
||||
text = placeHolderTextPassword,
|
||||
style = MatuleTheme.typography.bodyRegular14.copy(color = MatuleTheme.colors.hint)
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
IconButton(
|
||||
onClick={passwordVisible = !passwordVisible}
|
||||
) {
|
||||
Icon(
|
||||
painter= painterResource(if (passwordVisible) R.drawable.eye_close else R.drawable.eye_open),
|
||||
contentDescription = "Показать пароль"
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun CommonButton(modifier: Modifier, buttonLabel: String, onClick: () -> Unit){
|
||||
Button(
|
||||
|
||||
modifier = modifier
|
||||
.padding(horizontal = 20.dp)
|
||||
.fillMaxWidth()
|
||||
.height(50.dp)
|
||||
.clip(RoundedCornerShape(14.dp))
|
||||
.background(MatuleTheme.colors.accent)
|
||||
,
|
||||
colors = ButtonColors(
|
||||
containerColor = MatuleTheme.colors.accent,
|
||||
disabledContentColor = Color.Transparent,
|
||||
disabledContainerColor = MatuleTheme.colors.accent,
|
||||
contentColor = Color.Transparent
|
||||
),
|
||||
onClick=onClick
|
||||
){
|
||||
Text(
|
||||
text=buttonLabel,
|
||||
style = MatuleTheme.typography.bodyRegular14.copy(color= MatuleTheme.colors.background),
|
||||
textAlign = TextAlign.Center
|
||||
)
|
||||
}
|
||||
}
|
@ -20,7 +20,8 @@ data class MatuleColors(
|
||||
val text: Color,
|
||||
val subTextDark: Color,
|
||||
val background: Color,
|
||||
val hint: Color
|
||||
val hint: Color,
|
||||
val accent: Color
|
||||
)
|
||||
|
||||
@Immutable
|
||||
@ -49,7 +50,8 @@ val LocalMatuleColors = staticCompositionLocalOf {
|
||||
text = Color.Unspecified,
|
||||
subTextDark = Color.Unspecified,
|
||||
background = Color.Unspecified,
|
||||
hint = Color.Unspecified
|
||||
hint = Color.Unspecified,
|
||||
accent = Color.Unspecified
|
||||
)
|
||||
}
|
||||
|
||||
@ -73,7 +75,8 @@ fun MatuleTheme( content: (@Composable () -> Unit)){
|
||||
text = Color(0xFF2B2B2B),
|
||||
subTextDark = Color(0xFF707B81),
|
||||
background = Color(0xFFF7F7F9),
|
||||
hint = Color(0xFF6A6A6A)
|
||||
hint = Color(0xFF6A6A6A),
|
||||
accent = Color(0xFF48B2E7)
|
||||
|
||||
)
|
||||
val matuleTypography = MatuleTextStyle(
|
||||
|
10
app/src/main/res/drawable/back_arrow.xml
Normal file
10
app/src/main/res/drawable/back_arrow.xml
Normal file
@ -0,0 +1,10 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="6dp"
|
||||
android:height="12dp"
|
||||
android:viewportWidth="6"
|
||||
android:viewportHeight="12">
|
||||
<path
|
||||
android:pathData="M5.468,0.414C5.792,0.673 5.844,1.145 5.586,1.468L1.96,6L5.586,10.531C5.844,10.855 5.792,11.327 5.468,11.586C5.145,11.844 4.673,11.792 4.414,11.469L0.414,6.468C0.195,6.195 0.195,5.805 0.414,5.531L4.414,0.531C4.673,0.208 5.145,0.156 5.468,0.414Z"
|
||||
android:fillColor="#2B2B2B"
|
||||
android:fillType="evenOdd"/>
|
||||
</vector>
|
62
app/src/main/res/drawable/email_image.xml
Normal file
62
app/src/main/res/drawable/email_image.xml
Normal file
@ -0,0 +1,62 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M1.125,9.627V20.877C1.125,21.274 1.283,21.656 1.564,21.937C1.846,22.219 2.227,22.377 2.625,22.377H21.375C21.773,22.377 22.154,22.219 22.436,21.937C22.717,21.656 22.875,21.274 22.875,20.877V9.627"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="1.125"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#FFF8F8"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="M5.438,7.665C3.93,8.125 2.482,8.764 1.125,9.566V9.566L11.149,16.478C11.399,16.65 11.696,16.743 12,16.743C12.304,16.743 12.601,16.65 12.851,16.478L22.875,9.566C21.518,8.764 20.07,8.125 18.563,7.665"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="1.125"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#FFF8F8"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="M5.438,12.54V2.737C5.438,2.439 5.556,2.153 5.767,1.942C5.978,1.731 6.264,1.612 6.563,1.612H17.438C17.736,1.612 18.022,1.731 18.233,1.942C18.444,2.153 18.563,2.439 18.563,2.737V12.536L12.851,16.477C12.601,16.65 12.304,16.742 12,16.742C11.696,16.742 11.399,16.65 11.149,16.477L5.441,12.54"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="1.125"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#FFF8F8"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="M15.563,4.946H8.438"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="1.125"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#FFF8F8"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="M12,10.725H8.438"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="1.125"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#FFF8F8"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="M15.563,7.837H8.438"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="1.125"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#FFF8F8"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="M9.442,15.308L1.609,21.983"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="1.125"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#FFF8F8"
|
||||
android:strokeLineCap="round"/>
|
||||
<path
|
||||
android:pathData="M14.539,15.308L22.395,21.983"
|
||||
android:strokeLineJoin="round"
|
||||
android:strokeWidth="1.125"
|
||||
android:fillColor="#00000000"
|
||||
android:strokeColor="#FFF8F8"
|
||||
android:strokeLineCap="round"/>
|
||||
</vector>
|
21
app/src/main/res/drawable/eye_close.xml
Normal file
21
app/src/main/res/drawable/eye_close.xml
Normal file
@ -0,0 +1,21 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="25dp"
|
||||
android:height="20dp"
|
||||
android:viewportWidth="25"
|
||||
android:viewportHeight="20">
|
||||
<path
|
||||
android:pathData="M3.038,0.64C2.718,0.959 2.718,1.477 3.038,1.797L20.461,19.22C20.781,19.54 21.299,19.54 21.618,19.22C21.938,18.901 21.938,18.383 21.618,18.063L4.195,0.64C3.875,0.32 3.357,0.32 3.038,0.64Z"
|
||||
android:fillColor="#2B2B2B"/>
|
||||
<path
|
||||
android:pathData="M0.5,9.829C0.5,9.136 1.889,7.102 4.126,5.271L5.26,6.458C5.193,6.512 5.127,6.566 5.061,6.621C4.068,7.448 3.278,8.303 2.75,9.003C2.484,9.355 2.304,9.643 2.198,9.849C2.18,9.883 2.165,9.913 2.154,9.937L2.156,9.946C2.175,10.025 2.209,10.131 2.265,10.264C2.377,10.533 2.561,10.867 2.828,11.25C3.362,12.015 4.164,12.884 5.179,13.703C7.225,15.354 9.942,16.647 12.773,16.647C13.459,16.647 14.132,16.567 14.784,16.421L16.072,17.769C15.031,18.094 13.925,18.284 12.773,18.284C6.145,18.284 0.5,12.283 0.5,9.829Z"
|
||||
android:fillColor="#2B2B2B"/>
|
||||
<path
|
||||
android:pathData="M8.136,10.374C8.136,10.091 8.162,9.814 8.21,9.544L13.396,14.969C13.192,14.997 12.984,15.011 12.773,15.011C10.212,15.011 8.136,12.935 8.136,10.374Z"
|
||||
android:fillColor="#2B2B2B"/>
|
||||
<path
|
||||
android:pathData="M11.655,5.874L17.219,11.694C17.343,11.276 17.409,10.833 17.409,10.374C17.409,7.814 15.333,5.738 12.773,5.738C12.387,5.738 12.013,5.785 11.655,5.874Z"
|
||||
android:fillColor="#2B2B2B"/>
|
||||
<path
|
||||
android:pathData="M20.044,13.643C19.871,13.795 19.692,13.944 19.508,14.089L20.643,15.277C23.03,13.351 24.5,11 24.5,9.829C24.5,7.92 19.127,1.92 12.5,1.92C11.128,1.92 9.809,2.2 8.581,2.658L9.83,3.964C10.693,3.705 11.589,3.556 12.5,3.556C15.327,3.556 17.977,4.846 19.963,6.436C20.947,7.224 21.722,8.05 22.236,8.753C22.493,9.105 22.667,9.402 22.77,9.626C22.826,9.747 22.85,9.822 22.859,9.856C22.851,9.905 22.825,10.021 22.749,10.21C22.645,10.47 22.474,10.799 22.228,11.179C21.734,11.938 20.991,12.814 20.044,13.643Z"
|
||||
android:fillColor="#2B2B2B"/>
|
||||
</vector>
|
9
app/src/main/res/drawable/eye_open.xml
Normal file
9
app/src/main/res/drawable/eye_open.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="23dp"
|
||||
android:height="16dp"
|
||||
android:viewportWidth="23"
|
||||
android:viewportHeight="16">
|
||||
<path
|
||||
android:pathData="M11.5,5C12.296,5 13.059,5.316 13.621,5.879C14.184,6.441 14.5,7.204 14.5,8C14.5,8.796 14.184,9.559 13.621,10.121C13.059,10.684 12.296,11 11.5,11C10.704,11 9.941,10.684 9.379,10.121C8.816,9.559 8.5,8.796 8.5,8C8.5,7.204 8.816,6.441 9.379,5.879C9.941,5.316 10.704,5 11.5,5ZM11.5,0.5C16.5,0.5 20.77,3.61 22.5,8C20.77,12.39 16.5,15.5 11.5,15.5C6.5,15.5 2.23,12.39 0.5,8C2.23,3.61 6.5,0.5 11.5,0.5ZM2.68,8C3.488,9.65 4.743,11.041 6.302,12.013C7.862,12.986 9.662,13.501 11.5,13.501C13.338,13.501 15.138,12.986 16.698,12.013C18.257,11.041 19.512,9.65 20.32,8C19.512,6.35 18.257,4.959 16.698,3.987C15.138,3.014 13.338,2.499 11.5,2.499C9.662,2.499 7.862,3.014 6.302,3.987C4.743,4.959 3.488,6.35 2.68,8Z"
|
||||
android:fillColor="#2B2B2B"/>
|
||||
</vector>
|
@ -1,3 +1,15 @@
|
||||
<resources>
|
||||
<string name="app_name">ShoesappTest</string>
|
||||
<string name="hello">Привет!</string>
|
||||
<string name="sign_in_subtitle">Заполните Свои данные или продолжите через социальные медиа</string>
|
||||
<string name="template_email">xyz@gmail.com</string>
|
||||
<string name="email">Email</string>
|
||||
<string name="sign_in">Войти</string>
|
||||
<string name="sign_up">Вы впервые? Создать пользователя</string>
|
||||
<string name="template_password">••••••••</string>
|
||||
<string name="password">Пароль</string>
|
||||
<string name="title_forgot_password">Забыл Пароль</string>
|
||||
<string name="subtitle_forgot_password">Введите Свою Учётную Запись Для Сброса</string>
|
||||
<string name="placeholder_email">xyz@gmail.com</string>
|
||||
<string name="send_email_forgot">Отправить</string>
|
||||
</resources>
|
Loading…
Reference in New Issue
Block a user