git.iko.soy/parseable-android
on 3b7ea33 help sign in
178 lines 7.2 kB history raw
1package com.parseable.android.ui.screens.about
3import android.content.Intent
4import android.net.Uri
5import androidx.compose.foundation.Image
6import androidx.compose.foundation.layout.*
7import androidx.compose.foundation.rememberScrollState
8import androidx.compose.foundation.verticalScroll
9import androidx.compose.material.icons.Icons
10import androidx.compose.material.icons.automirrored.filled.ArrowBack
11import androidx.compose.material.icons.filled.*
12import androidx.compose.material3.*
13import androidx.compose.runtime.Composable
14import androidx.compose.ui.Alignment
15import androidx.compose.ui.Modifier
16import androidx.compose.ui.platform.LocalContext
17import androidx.compose.ui.res.painterResource
18import androidx.compose.ui.text.font.FontWeight
19import androidx.compose.ui.unit.dp
20import com.parseable.android.BuildConfig
21import com.parseable.android.R
23private const val GITHUB_REPO_URL = "https://github.com/parseablehq/parseable-android"
24private const val PARSEABLE_WEBSITE_URL = "https://www.parseable.com"
26@OptIn(ExperimentalMaterial3Api::class)
27@Composable
28fun AboutScreen(
29 onBack: () -> Unit,
30) {
31 val context = LocalContext.current
33 Scaffold(
34 topBar = {
35 TopAppBar(
36 title = { Text("About") },
37 navigationIcon = {
38 IconButton(onClick = onBack) {
39 Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = "Back")
40 }
41 },
42 )
43 },
44 ) { padding ->
45 Column(
46 modifier = Modifier
47 .fillMaxSize()
48 .padding(padding)
49 .verticalScroll(rememberScrollState())
50 .padding(16.dp),
51 verticalArrangement = Arrangement.spacedBy(16.dp),
52 ) {
53 // App header
54 Card(
55 modifier = Modifier.fillMaxWidth(),
56 elevation = CardDefaults.cardElevation(defaultElevation = 1.dp),
57 ) {
58 Column(
59 modifier = Modifier
60 .fillMaxWidth()
61 .padding(24.dp),
62 horizontalAlignment = Alignment.CenterHorizontally,
63 ) {
64 Image(
65 painter = painterResource(id = R.mipmap.ic_launcher),
66 contentDescription = "Parseable logo",
67 modifier = Modifier.size(80.dp),
68 )
69 Spacer(modifier = Modifier.height(12.dp))
70 Text(
71 text = "Parseable",
72 style = MaterialTheme.typography.headlineSmall,
73 fontWeight = FontWeight.Bold,
74 )
75 Text(
76 text = "Android Client",
77 style = MaterialTheme.typography.titleMedium,
78 color = MaterialTheme.colorScheme.onSurfaceVariant,
79 )
80 Spacer(modifier = Modifier.height(8.dp))
81 Text(
82 text = "Version ${BuildConfig.VERSION_NAME}",
83 style = MaterialTheme.typography.bodyMedium,
84 color = MaterialTheme.colorScheme.onSurfaceVariant,
85 )
86 }
87 }
89 // Description
90 Card(
91 modifier = Modifier.fillMaxWidth(),
92 elevation = CardDefaults.cardElevation(defaultElevation = 1.dp),
93 ) {
94 Column(modifier = Modifier.padding(16.dp)) {
95 Row(verticalAlignment = Alignment.CenterVertically) {
96 Icon(
97 Icons.Filled.Info,
98 contentDescription = null,
99 tint = MaterialTheme.colorScheme.primary,
100 )
101 Spacer(modifier = Modifier.width(8.dp))
102 Text(
103 text = "About",
104 style = MaterialTheme.typography.titleMedium,
105 fontWeight = FontWeight.Bold,
106 )
107 }
108 Spacer(modifier = Modifier.height(12.dp))
109 Text(
110 text = "Parseable is an open-source log analytics platform. " +
111 "This app connects to a Parseable server instance and lets you " +
112 "browse, search, filter, and live-tail log data.",
113 style = MaterialTheme.typography.bodyMedium,
114 )
115 }
116 }
118 // Links
119 Card(
120 modifier = Modifier.fillMaxWidth(),
121 elevation = CardDefaults.cardElevation(defaultElevation = 1.dp),
122 ) {
123 Column(modifier = Modifier.padding(16.dp)) {
124 Row(verticalAlignment = Alignment.CenterVertically) {
125 Icon(
126 Icons.Filled.Link,
127 contentDescription = null,
128 tint = MaterialTheme.colorScheme.primary,
129 )
130 Spacer(modifier = Modifier.width(8.dp))
131 Text(
132 text = "Links",
133 style = MaterialTheme.typography.titleMedium,
134 fontWeight = FontWeight.Bold,
135 )
136 }
137 Spacer(modifier = Modifier.height(12.dp))
139 OutlinedButton(
140 onClick = {
141 context.startActivity(
142 Intent(Intent.ACTION_VIEW, Uri.parse(GITHUB_REPO_URL))
143 )
144 },
145 modifier = Modifier.fillMaxWidth(),
146 ) {
147 Icon(
148 Icons.Filled.Code,
149 contentDescription = null,
150 modifier = Modifier.size(18.dp),
151 )
152 Spacer(modifier = Modifier.width(8.dp))
153 Text("GitHub Repository")
154 }
156 Spacer(modifier = Modifier.height(8.dp))
158 OutlinedButton(
159 onClick = {
160 context.startActivity(
161 Intent(Intent.ACTION_VIEW, Uri.parse(PARSEABLE_WEBSITE_URL))
162 )
163 },
164 modifier = Modifier.fillMaxWidth(),
165 ) {
166 Icon(
167 Icons.Filled.Language,
168 contentDescription = null,
169 modifier = Modifier.size(18.dp),
170 )
171 Spacer(modifier = Modifier.width(8.dp))
172 Text("Parseable Website")
173 }
174 }
175 }
176 }
177 }