Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
Briar Desktop
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
briar
Briar Desktop
Merge requests
!12
Login/Registration screens
Code
Review changes
Check out branch
Download
Patches
Plain diff
Merged
Login/Registration screens
22-login-screen
into
main
Overview
16
Commits
4
Pipelines
7
Changes
9
Merged
Mikolai Gütschow
requested to merge
22-login-screen
into
main
3 years ago
Overview
15
Commits
4
Pipelines
7
Changes
9
Expand
Replaces
!3 (closed)
Closes
#22 (closed)
Edited
3 years ago
by
Sebastian
0
0
Merge request reports
Compare
main
version 8
307081d0
3 years ago
version 7
e569fd5a
3 years ago
version 6
e569fd5a
3 years ago
version 5
e023d4ea
3 years ago
version 4
e023d4ea
3 years ago
version 3
c51d9554
3 years ago
version 2
b492828a
3 years ago
version 1
6e2dab86
3 years ago
main (base)
and
version 7
latest version
307081d0
4 commits,
3 years ago
version 8
307081d0
4 commits,
3 years ago
version 7
e569fd5a
7 commits,
3 years ago
version 6
e569fd5a
4 commits,
3 years ago
version 5
e023d4ea
3 commits,
3 years ago
version 4
e023d4ea
6 commits,
3 years ago
version 3
c51d9554
5 commits,
3 years ago
version 2
b492828a
1 commit,
3 years ago
version 1
6e2dab86
1 commit,
3 years ago
9 files
+
187
−
110
Inline
Compare changes
Side-by-side
Inline
Show whitespace changes
Show one file at a time
Files
9
Search (e.g. *.vue) (Ctrl+P)
src/main/kotlin/org/briarproject/briar/desktop/dialogs/Login.kt
+
50
−
27
Options
@@ -9,59 +9,82 @@ import androidx.compose.foundation.layout.fillMaxWidth
import
androidx.compose.foundation.layout.height
import
androidx.compose.foundation.layout.padding
import
androidx.compose.foundation.shape.RoundedCornerShape
import
androidx.compose.foundation.text.KeyboardActions
import
androidx.compose.foundation.text.KeyboardOptions
import
androidx.compose.material.Button
import
androidx.compose.material.OutlinedTextField
import
androidx.compose.material.Text
import
androidx.compose.runtime.Composable
import
androidx.compose.runtime.DisposableEffect
import
androidx.compose.runtime.getValue
import
androidx.compose.runtime.mutableStateOf
import
androidx.compose.runtime.remember
import
androidx.compose.runtime.setValue
import
androidx.compose.ui.Alignment
import
androidx.compose.ui.ExperimentalComposeUiApi
import
androidx.compose.ui.Modifier
import
androidx.compose.ui.draw.clip
import
androidx.compose.ui.focus.FocusRequester
import
androidx.compose.ui.focus.focusRequester
import
androidx.compose.ui.graphics.Color
import
androidx.compose.ui.res.svgResource
import
androidx.compose.ui.input.key.Key
import
androidx.compose.ui.input.key.KeyEventType
import
androidx.compose.ui.input.key.key
import
androidx.compose.ui.input.key.onPreviewKeyEvent
import
androidx.compose.ui.input.key.type
import
androidx.compose.ui.res.painterResource
import
androidx.compose.ui.text.TextStyle
import
androidx.compose.ui.text.input.ImeAction
import
androidx.compose.ui.text.input.KeyboardType
import
androidx.compose.ui.text.input.PasswordVisualTransformation
import
androidx.compose.ui.unit.dp
// TODO: Error handling
@OptIn
(
ExperimentalComposeUiApi
::
class
)
@Composable
fun
Login
(
title
:
String
,
modifier
:
Modifier
=
Modifier
,
onResult
:
(
result
:
String
)
->
Unit
)
=
)
{
var
password
by
remember
{
mutableStateOf
(
""
)
}
val
initialFocusRequester
=
remember
{
FocusRequester
()
}
Column
(
modifier
=
modifier
.
padding
(
16
.
dp
).
fillMaxSize
(),
verticalArrangement
=
Arrangement
.
Center
,
horizontalAlignment
=
Alignment
.
CenterHorizontally
)
{
TheImage
()
BriarLogo
()
Spacer
(
Modifier
.
height
(
32
.
dp
))
TheTextField
(
onResult
)
}
@Composable
private
fun
TheImage
()
{
Image
(
painter
=
svgResource
(
"images/logo_circle.svg"
),
contentDescription
=
"Briar logo"
,
modifier
=
Modifier
.
fillMaxWidth
()
.
clip
(
shape
=
RoundedCornerShape
(
400
.
dp
))
)
}
OutlinedTextField
(
value
=
password
,
onValueChange
=
{
password
=
it
},
label
=
{
Text
(
"Password"
)
},
singleLine
=
true
,
textStyle
=
TextStyle
(
color
=
Color
.
White
),
visualTransformation
=
PasswordVisualTransformation
(),
keyboardOptions
=
KeyboardOptions
(
keyboardType
=
KeyboardType
.
Password
,
imeAction
=
ImeAction
.
Done
),
keyboardActions
=
KeyboardActions
(
onDone
=
{
onResult
.
invoke
(
password
)
}),
modifier
=
Modifier
.
focusRequester
(
initialFocusRequester
)
.
onPreviewKeyEvent
{
if
(
it
.
type
==
KeyEventType
.
KeyUp
&&
it
.
key
==
Key
.
Enter
)
{
onResult
.
invoke
(
password
)
}
false
},
)
Spacer
(
Modifier
.
height
(
16
.
dp
))
Button
(
onClick
=
{
onResult
.
invoke
(
password
)
})
{
Text
(
"Login"
,
color
=
Color
.
Black
)
}
@Composable
private
fun
TheTextField
(
onResult
:
(
result
:
String
)
->
Unit
)
{
var
password
by
remember
{
mutableStateOf
(
""
)
}
OutlinedTextField
(
password
,
{
password
=
it
},
label
=
{
Text
(
"Password"
)
})
Spacer
(
Modifier
.
height
(
16
.
dp
))
Button
(
onClick
=
{
onResult
.
invoke
(
password
)
DisposableEffect
(
Unit
)
{
initialFocusRequester
.
requestFocus
()
onDispose
{
}
}
)
{
Text
(
"Login"
,
color
=
Color
.
Black
)
}
}
@Composable
fun
BriarLogo
(
modifier
:
Modifier
=
Modifier
.
fillMaxWidth
().
clip
(
shape
=
RoundedCornerShape
(
400
.
dp
)))
=
Image
(
painterResource
(
"images/logo_circle.svg"
),
"Briar logo"
,
modifier
)
Loading