@@ -2,7 +2,10 @@ package com.matrix.multigpt.presentation.ui.setting
22
33import androidx.compose.foundation.layout.Column
44import androidx.compose.foundation.layout.fillMaxSize
5+ import androidx.compose.foundation.layout.height
56import androidx.compose.foundation.layout.padding
7+ import androidx.compose.foundation.rememberScrollState
8+ import androidx.compose.foundation.verticalScroll
69import androidx.compose.material.icons.Icons
710import androidx.compose.material.icons.automirrored.filled.ArrowBack
811import androidx.compose.material3.ExperimentalMaterial3Api
@@ -16,19 +19,24 @@ import androidx.compose.material3.TopAppBarDefaults
1619import androidx.compose.material3.TopAppBarScrollBehavior
1720import androidx.compose.runtime.Composable
1821import androidx.compose.ui.Modifier
22+ import androidx.compose.ui.graphics.vector.ImageVector
1923import androidx.compose.ui.input.nestedscroll.nestedScroll
24+ import androidx.compose.ui.platform.LocalUriHandler
2025import androidx.compose.ui.res.stringResource
26+ import androidx.compose.ui.res.vectorResource
2127import androidx.compose.ui.text.style.TextOverflow
2228import androidx.compose.ui.unit.dp
23- import com.mikepenz.aboutlibraries.ui.compose.m3.LibrariesContainer
2429import com.matrix.multigpt.R
30+ import com.matrix.multigpt.presentation.common.SettingItem
2531
2632@OptIn(ExperimentalMaterial3Api ::class )
2733@Composable
2834fun LicenseScreen (
2935 onNavigationClick : () -> Unit
3036) {
3137 val scrollBehavior = TopAppBarDefaults .exitUntilCollapsedScrollBehavior()
38+ val scrollState = rememberScrollState()
39+ val uriHandler = LocalUriHandler .current
3240
3341 Scaffold (
3442 modifier = Modifier
@@ -38,9 +46,58 @@ fun LicenseScreen(
3846 }
3947 ) { innerPadding ->
4048 Column (
41- modifier = Modifier .padding(innerPadding)
49+ modifier = Modifier
50+ .padding(innerPadding)
51+ .verticalScroll(scrollState)
52+ .fillMaxSize()
4253 ) {
43- LibrariesContainer (modifier = Modifier .fillMaxSize())
54+ // MultiGPT License
55+ SettingItem (
56+ modifier = Modifier .height(80 .dp),
57+ title = " MultiGPT" ,
58+ description = " GNU General Public License v3.0" ,
59+ onItemClick = {
60+ uriHandler.openUri(" https://www.gnu.org/licenses/gpl-3.0.html" )
61+ },
62+ showTrailingIcon = false ,
63+ showLeadingIcon = true ,
64+ leadingIcon = {
65+ Icon (
66+ ImageVector .vectorResource(id = R .drawable.ic_license),
67+ contentDescription = " License Icon"
68+ )
69+ }
70+ )
71+
72+ // GPT Mobile Attribution
73+ SettingItem (
74+ modifier = Modifier .height(80 .dp),
75+ title = " GPT Mobile" ,
76+ description = " Based on GPT Mobile by Taewan Park (GPL-3.0)" ,
77+ onItemClick = {
78+ uriHandler.openUri(" https://github.com/Taewan-P/gpt_mobile" )
79+ },
80+ showTrailingIcon = false ,
81+ showLeadingIcon = true ,
82+ leadingIcon = {
83+ Icon (
84+ ImageVector .vectorResource(id = R .drawable.ic_github),
85+ contentDescription = " GitHub Icon"
86+ )
87+ }
88+ )
89+
90+ // License Info Text
91+ Text (
92+ text = " This application is free software licensed under the GNU General Public License v3.0. " +
93+ " You can redistribute it and/or modify it under the terms of the GPL-3.0 license.\n\n " +
94+ " This project is inspired by and builds upon concepts from GPT Mobile, " +
95+ " including multi-model chat interface design, API integration patterns, " +
96+ " and modern Android development practices." ,
97+ style = MaterialTheme .typography.bodyMedium,
98+ color = MaterialTheme .colorScheme.onSurfaceVariant,
99+ modifier = Modifier .padding(16 .dp)
100+ )
44101 }
45102 }
46103}
0 commit comments