Skip to content

Commit 50d9583

Browse files
committed
added base
1 parent 2913e98 commit 50d9583

File tree

6 files changed

+106
-27
lines changed

6 files changed

+106
-27
lines changed

app/build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ android {
1717
applicationId = "com.pira.gnetp"
1818
minSdk = 23
1919
targetSdk = 36
20-
versionCode = 1
21-
versionName = "1.0.0"
20+
versionCode = 2
21+
versionName = "1.0.1"
2222

2323
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
2424
}

app/src/main/java/com/pira/gnetp/ui/home/HomeScreen.kt

Lines changed: 86 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,16 @@
11
package com.pira.gnetp.ui.home
22

33
import android.content.Intent
4+
import androidx.compose.animation.AnimatedVisibility
5+
import androidx.compose.animation.core.tween
6+
import androidx.compose.animation.fadeIn
7+
import androidx.compose.animation.fadeOut
8+
import androidx.compose.animation.slideInVertically
9+
import androidx.compose.animation.slideOutVertically
10+
import androidx.compose.foundation.clickable
11+
import androidx.compose.foundation.background
412
import androidx.compose.foundation.layout.Arrangement
13+
import androidx.compose.foundation.layout.Box
514
import androidx.compose.foundation.layout.Column
615
import androidx.compose.foundation.layout.Row
716
import androidx.compose.foundation.layout.Spacer
@@ -12,8 +21,10 @@ import androidx.compose.foundation.layout.padding
1221
import androidx.compose.foundation.layout.size
1322
import androidx.compose.foundation.lazy.LazyColumn
1423
import androidx.compose.foundation.lazy.items
24+
import androidx.compose.foundation.rememberScrollState
1525
import androidx.compose.foundation.selection.selectable
1626
import androidx.compose.foundation.shape.RoundedCornerShape
27+
import androidx.compose.foundation.verticalScroll
1728
import androidx.compose.material.icons.Icons
1829
import androidx.compose.material.icons.automirrored.filled.List
1930
import androidx.compose.material.icons.filled.Info
@@ -27,7 +38,11 @@ import androidx.compose.material3.OutlinedButton
2738
import androidx.compose.material3.RadioButton
2839
import androidx.compose.material3.Text
2940
import androidx.compose.runtime.Composable
41+
import androidx.compose.runtime.getValue
3042
import androidx.compose.runtime.key
43+
import androidx.compose.runtime.mutableStateOf
44+
import androidx.compose.runtime.remember
45+
import androidx.compose.runtime.setValue
3146
import androidx.compose.ui.Alignment
3247
import androidx.compose.ui.Modifier
3348
import androidx.compose.ui.graphics.Color
@@ -46,10 +61,14 @@ fun HomeScreen(
4661
onVpnPermissionRequest: (Intent) -> Unit,
4762
onSelectIpAddress: (String) -> Unit = {}
4863
) {
64+
val scrollState = rememberScrollState()
65+
var showIpSelector by remember { mutableStateOf(false) }
66+
4967
Column(
5068
modifier = Modifier
5169
.fillMaxSize()
52-
.padding(16.dp),
70+
.padding(16.dp)
71+
.verticalScroll(scrollState),
5372
horizontalAlignment = Alignment.CenterHorizontally,
5473
verticalArrangement = Arrangement.Top
5574
) {
@@ -179,7 +198,8 @@ fun HomeScreen(
179198
Card(
180199
modifier = Modifier
181200
.fillMaxWidth()
182-
.padding(bottom = 16.dp),
201+
.padding(bottom = 16.dp)
202+
.clickable { showIpSelector = true },
183203
shape = RoundedCornerShape(16.dp),
184204
colors = CardDefaults.cardColors(
185205
containerColor = MaterialTheme.colorScheme.surfaceVariant
@@ -198,18 +218,11 @@ fun HomeScreen(
198218
modifier = Modifier.padding(bottom = 16.dp)
199219
)
200220

201-
LazyColumn {
202-
items(uiState.availableIPs) { ip ->
203-
// Use key to ensure proper recomposition
204-
key(ip) {
205-
IpAddressOption(
206-
ip = ip,
207-
isSelected = ip == uiState.selectedIpAddress,
208-
onSelect = { onSelectIpAddress(ip) } // Fixed: pass ip instead of it
209-
)
210-
}
211-
}
212-
}
221+
Text(
222+
text = uiState.selectedIpAddress.ifEmpty { "Tap to select an IP" },
223+
style = MaterialTheme.typography.bodyLarge,
224+
color = MaterialTheme.colorScheme.onSurfaceVariant
225+
)
213226
}
214227
}
215228
}
@@ -308,6 +321,65 @@ fun HomeScreen(
308321
}
309322
}
310323
}
324+
325+
// Full-screen IP selector bottom sheet
326+
AnimatedVisibility(
327+
visible = showIpSelector,
328+
enter = slideInVertically(initialOffsetY = { it }) + fadeIn(),
329+
exit = slideOutVertically(targetOffsetY = { it }) + fadeOut()
330+
) {
331+
Box(
332+
modifier = Modifier
333+
.fillMaxSize()
334+
.clickable { showIpSelector = false }
335+
) {
336+
Column(
337+
modifier = Modifier
338+
.fillMaxWidth()
339+
.fillMaxSize(0.8f) // Take 80% of screen height
340+
.align(Alignment.BottomCenter)
341+
.clickable(enabled = false) { } // Prevent closing when clicking on content
342+
.background(MaterialTheme.colorScheme.surface)
343+
.padding(16.dp)
344+
) {
345+
Row(
346+
modifier = Modifier.fillMaxWidth(),
347+
horizontalArrangement = Arrangement.SpaceBetween,
348+
verticalAlignment = Alignment.CenterVertically
349+
) {
350+
Text(
351+
text = "Select IP Address",
352+
style = MaterialTheme.typography.headlineSmall,
353+
fontWeight = FontWeight.Bold
354+
)
355+
356+
Button(
357+
onClick = { showIpSelector = false },
358+
modifier = Modifier
359+
) {
360+
Text("Close")
361+
}
362+
}
363+
364+
Spacer(modifier = Modifier.height(16.dp))
365+
366+
LazyColumn {
367+
items(uiState.availableIPs) { ip ->
368+
key(ip) {
369+
IpAddressOption(
370+
ip = ip,
371+
isSelected = ip == uiState.selectedIpAddress,
372+
onSelect = {
373+
onSelectIpAddress(ip)
374+
showIpSelector = false // Close sheet after selection
375+
}
376+
)
377+
}
378+
}
379+
}
380+
}
381+
}
382+
}
311383
}
312384

313385
@Composable

app/src/main/java/com/pira/gnetp/ui/hotspot/HotspotScreen.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ import androidx.compose.foundation.layout.fillMaxWidth
1313
import androidx.compose.foundation.layout.height
1414
import androidx.compose.foundation.layout.padding
1515
import androidx.compose.foundation.layout.size
16+
import androidx.compose.foundation.rememberScrollState
17+
import androidx.compose.foundation.verticalScroll
1618
import androidx.compose.material.icons.Icons
1719
import androidx.compose.material.icons.filled.ContentCopy
1820
import androidx.compose.material3.Icon
@@ -36,10 +38,13 @@ fun HotspotScreen(
3638
) {
3739
val context = LocalContext.current
3840

41+
val scrollState = rememberScrollState()
42+
3943
Column(
4044
modifier = Modifier
4145
.fillMaxSize()
42-
.padding(16.dp),
46+
.padding(16.dp)
47+
.verticalScroll(scrollState),
4348
horizontalAlignment = Alignment.CenterHorizontally
4449
) {
4550
// Header

app/src/main/java/com/pira/gnetp/ui/logs/LogsScreen.kt

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ import androidx.compose.foundation.layout.padding
1212
import androidx.compose.foundation.layout.size
1313
import androidx.compose.foundation.lazy.LazyColumn
1414
import androidx.compose.foundation.lazy.items
15+
import androidx.compose.foundation.rememberScrollState
16+
import androidx.compose.foundation.verticalScroll
1517
import androidx.compose.material.icons.Icons
1618
import androidx.compose.material.icons.filled.Delete
1719
import androidx.compose.material3.Icon
@@ -60,10 +62,13 @@ fun LogsScreen(
6062
}
6163
}
6264

65+
val scrollState = rememberScrollState()
66+
6367
Column(
6468
modifier = Modifier
6569
.fillMaxSize()
6670
.padding(16.dp)
71+
.verticalScroll(scrollState)
6772
) {
6873
// Header
6974
Row(
@@ -108,14 +113,6 @@ fun LogsScreen(
108113
fontWeight = FontWeight.Bold
109114
)
110115
}
111-
112-
Spacer(modifier = Modifier.height(8.dp))
113-
114-
Text(
115-
text = if (isProxyActive) "Proxy is ACTIVE" else "Proxy is INACTIVE",
116-
style = MaterialTheme.typography.bodyMedium,
117-
color = if (isProxyActive) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.error
118-
)
119116
}
120117

121118
Column(

app/src/main/java/com/pira/gnetp/ui/settings/SettingsScreen.kt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.pira.gnetp.ui.settings
22

33
import android.widget.Toast
4+
import androidx.compose.foundation.background
45
import androidx.compose.foundation.clickable
56
import androidx.compose.foundation.layout.Arrangement
67
import androidx.compose.foundation.layout.Box
@@ -12,10 +13,12 @@ import androidx.compose.foundation.layout.fillMaxWidth
1213
import androidx.compose.foundation.layout.height
1314
import androidx.compose.foundation.layout.padding
1415
import androidx.compose.foundation.layout.size
16+
import androidx.compose.foundation.rememberScrollState
1517
import androidx.compose.foundation.selection.selectable
1618
import androidx.compose.foundation.selection.selectableGroup
1719
import androidx.compose.foundation.shape.CircleShape
1820
import androidx.compose.foundation.text.KeyboardOptions
21+
import androidx.compose.foundation.verticalScroll
1922
import androidx.compose.material.icons.Icons
2023
import androidx.compose.material.icons.filled.ArrowDropDown
2124
import androidx.compose.material.icons.filled.ArrowDropUp
@@ -38,7 +41,6 @@ import androidx.compose.ui.Alignment
3841
import androidx.compose.ui.Modifier
3942
import androidx.compose.ui.draw.clip
4043
import androidx.compose.ui.graphics.Color
41-
import androidx.compose.foundation.background
4244
import androidx.compose.ui.platform.LocalContext
4345
import androidx.compose.ui.semantics.Role
4446
import androidx.compose.ui.text.font.FontWeight
@@ -74,10 +76,13 @@ fun SettingsScreen(
7476
themeManager.saveThemeSettings(newSettings)
7577
}
7678

79+
val scrollState = rememberScrollState()
80+
7781
Column(
7882
modifier = Modifier
7983
.fillMaxSize()
80-
.padding(16.dp),
84+
.padding(16.dp)
85+
.verticalScroll(scrollState),
8186
horizontalAlignment = Alignment.CenterHorizontally
8287
) {
8388
// Header

gradle/wrapper/gradle-wrapper.properties.sha256

Whitespace-only changes.

0 commit comments

Comments
 (0)