@@ -0,0 +1,176 @@
1+package com.parseable.android.ui.screens.about
3+import android.content.Intent
5+import androidx.compose.foundation.layout.*
6+import androidx.compose.foundation.rememberScrollState
7+import androidx.compose.foundation.verticalScroll
8+import androidx.compose.material.icons.Icons
9+import androidx.compose.material.icons.automirrored.filled.ArrowBack
10+import androidx.compose.material.icons.filled.*
11+import androidx.compose.material3.*
12+import androidx.compose.runtime.Composable
13+import androidx.compose.ui.Alignment
14+import androidx.compose.ui.Modifier
15+import androidx.compose.ui.platform.LocalContext
16+import androidx.compose.ui.text.font.FontWeight
17+import androidx.compose.ui.unit.dp
18+import com.parseable.android.BuildConfig
20+private const val GITHUB_REPO_URL = "https://github.com/parseablehq/parseable-android"
21+private const val PARSEABLE_WEBSITE_URL = "https://www.parseable.com"
23+@OptIn(ExperimentalMaterial3Api::class)
28+ val context = LocalContext.current
33+ title = { Text("About") },
35+ IconButton(onClick = onBack) {
36+ Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = "Back")
46+ .verticalScroll(rememberScrollState())
48+ verticalArrangement = Arrangement.spacedBy(16.dp),
52+ modifier = Modifier.fillMaxWidth(),
53+ elevation = CardDefaults.cardElevation(defaultElevation = 1.dp),
59+ horizontalAlignment = Alignment.CenterHorizontally,
62+ Icons.Filled.Terminal,
63+ contentDescription = null,
64+ modifier = Modifier.size(48.dp),
65+ tint = MaterialTheme.colorScheme.primary,
67+ Spacer(modifier = Modifier.height(12.dp))
70+ style = MaterialTheme.typography.headlineSmall,
71+ fontWeight = FontWeight.Bold,
74+ text = "Android Client",
75+ style = MaterialTheme.typography.titleMedium,
76+ color = MaterialTheme.colorScheme.onSurfaceVariant,
78+ Spacer(modifier = Modifier.height(8.dp))
80+ text = "Version ${BuildConfig.VERSION_NAME}",
81+ style = MaterialTheme.typography.bodyMedium,
82+ color = MaterialTheme.colorScheme.onSurfaceVariant,
89+ modifier = Modifier.fillMaxWidth(),
90+ elevation = CardDefaults.cardElevation(defaultElevation = 1.dp),
92+ Column(modifier = Modifier.padding(16.dp)) {
93+ Row(verticalAlignment = Alignment.CenterVertically) {
96+ contentDescription = null,
97+ tint = MaterialTheme.colorScheme.primary,
99+ Spacer(modifier = Modifier.width(8.dp))
102+ style = MaterialTheme.typography.titleMedium,
103+ fontWeight = FontWeight.Bold,
106+ Spacer(modifier = Modifier.height(12.dp))
108+ text = "Parseable is an open-source log analytics platform. " +
109+ "This app connects to a Parseable server instance and lets you " +
110+ "browse, search, filter, and live-tail log data.",
111+ style = MaterialTheme.typography.bodyMedium,
118+ modifier = Modifier.fillMaxWidth(),
119+ elevation = CardDefaults.cardElevation(defaultElevation = 1.dp),
121+ Column(modifier = Modifier.padding(16.dp)) {
122+ Row(verticalAlignment = Alignment.CenterVertically) {
125+ contentDescription = null,
126+ tint = MaterialTheme.colorScheme.primary,
128+ Spacer(modifier = Modifier.width(8.dp))
131+ style = MaterialTheme.typography.titleMedium,
132+ fontWeight = FontWeight.Bold,
135+ Spacer(modifier = Modifier.height(12.dp))
139+ context.startActivity(
140+ Intent(Intent.ACTION_VIEW, Uri.parse(GITHUB_REPO_URL))
143+ modifier = Modifier.fillMaxWidth(),
147+ contentDescription = null,
148+ modifier = Modifier.size(18.dp),
150+ Spacer(modifier = Modifier.width(8.dp))
151+ Text("GitHub Repository")
154+ Spacer(modifier = Modifier.height(8.dp))
158+ context.startActivity(
159+ Intent(Intent.ACTION_VIEW, Uri.parse(PARSEABLE_WEBSITE_URL))
162+ modifier = Modifier.fillMaxWidth(),
165+ Icons.Filled.Language,
166+ contentDescription = null,
167+ modifier = Modifier.size(18.dp),
169+ Spacer(modifier = Modifier.width(8.dp))
170+ Text("Parseable Website")