Browse Source

Created Email Us Screen

Khubaib 1 năm trước cách đây
mục cha
commit
4346e069fc

+ 1 - 1
.idea/deploymentTargetDropDown.xml

@@ -18,7 +18,7 @@
               </deviceKey>
             </Target>
           </runningDeviceTargetSelectedWithDropDown>
-          <timeTargetWasSelectedWithDropDown value="2024-04-18T16:44:43.000576322Z" />
+          <timeTargetWasSelectedWithDropDown value="2024-04-19T10:37:33.352781670Z" />
         </State>
       </entry>
     </value>

+ 4 - 0
app/src/main/java/com/vpn/fastestvpnservice/navigation/BottomBarNavGraph.kt

@@ -25,6 +25,7 @@ import com.vpn.fastestvpnservice.screens.bottomNavBarScreens.Home
 import com.vpn.fastestvpnservice.screens.bottomNavBarScreens.Settings
 import com.vpn.fastestvpnservice.screens.helpScreensAll.About
 import com.vpn.fastestvpnservice.screens.helpScreensAll.CustomerSupport
+import com.vpn.fastestvpnservice.screens.helpScreensAll.EmailUsScreen
 import com.vpn.fastestvpnservice.screens.helpScreensAll.FAQ
 import com.vpn.fastestvpnservice.screens.helpScreensAll.PrivacyPolicy
 import com.vpn.fastestvpnservice.screens.helpScreensAll.TermsAndConditions
@@ -105,6 +106,9 @@ fun BottomBarNavGraph(navHostController: NavHostController,
             composable(route = Screen.CustomerSupport.route) {
                 CustomerSupport(navHostController = navHostController)
             }
+            composable(route = Screen.EmailUs.route) {
+                EmailUsScreen(navHostController = navHostController)
+            }
 
             /* Again declare for login because of different -> navHostController */
 //        composable(route = Screen.Login.route) {

+ 13 - 24
app/src/main/java/com/vpn/fastestvpnservice/screens/ServerListScreen.kt

@@ -4,10 +4,6 @@ import android.content.res.Configuration
 import android.location.Location
 import android.os.Looper
 import android.util.Log
-import android.view.animation.Animation
-import android.view.animation.AnimationUtils
-import android.widget.Toast
-import androidx.compose.animation.Animatable
 import androidx.compose.foundation.ExperimentalFoundationApi
 import androidx.compose.foundation.LocalOverscrollConfiguration
 import androidx.compose.foundation.background
@@ -24,17 +20,12 @@ import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.height
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.size
-import androidx.compose.foundation.layout.wrapContentHeight
 import androidx.compose.foundation.lazy.LazyColumn
-import androidx.compose.foundation.lazy.grid.GridCells
-import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
-import androidx.compose.foundation.lazy.grid.items
 import androidx.compose.foundation.lazy.items
 import androidx.compose.foundation.pager.HorizontalPager
 import androidx.compose.foundation.pager.rememberPagerState
 import androidx.compose.foundation.selection.selectable
 import androidx.compose.foundation.shape.RoundedCornerShape
-import androidx.compose.material.AppBarDefaults
 import androidx.compose.material.icons.Icons
 import androidx.compose.material.icons.automirrored.filled.ArrowBack
 import androidx.compose.material3.ExperimentalMaterial3Api
@@ -56,34 +47,33 @@ import androidx.compose.material3.Text
 import androidx.compose.material3.TextFieldDefaults
 import androidx.compose.material3.rememberModalBottomSheetState
 import androidx.compose.runtime.Composable
+import androidx.compose.runtime.CompositionLocalProvider
+import androidx.compose.runtime.MutableState
+import androidx.compose.runtime.derivedStateOf
 import androidx.compose.runtime.getValue
+import androidx.compose.runtime.livedata.observeAsState
+import androidx.compose.runtime.mutableFloatStateOf
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
+import androidx.compose.runtime.rememberCoroutineScope
+import androidx.compose.runtime.saveable.rememberSaveable
 import androidx.compose.runtime.setValue
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
-import androidx.compose.ui.res.colorResource
-import androidx.compose.ui.text.TextStyle
-import androidx.compose.ui.text.font.FontWeight
-import androidx.compose.ui.text.style.TextAlign
-import androidx.compose.ui.tooling.preview.Preview
-import androidx.compose.ui.unit.dp
-import androidx.compose.ui.unit.sp
-import androidx.navigation.NavHostController
-import androidx.navigation.compose.rememberNavController
-import androidx.compose.runtime.*
-import androidx.compose.runtime.livedata.observeAsState
-import androidx.compose.runtime.saveable.rememberSaveable
 import androidx.compose.ui.draw.alpha
 import androidx.compose.ui.draw.clip
-import androidx.compose.ui.draw.shadow
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.input.pointer.pointerInput
 import androidx.compose.ui.platform.LocalContext
 import androidx.compose.ui.platform.LocalFocusManager
+import androidx.compose.ui.res.colorResource
 import androidx.compose.ui.res.painterResource
-import androidx.compose.ui.zIndex
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
 import androidx.lifecycle.viewmodel.compose.viewModel
+import androidx.navigation.NavHostController
+import androidx.navigation.compose.rememberNavController
 import com.stealthcopter.networktools.Ping
 import com.stealthcopter.networktools.ping.PingResult
 import com.stealthcopter.networktools.ping.PingStats
@@ -95,7 +85,6 @@ import com.vpn.fastestvpnservice.customItems.ServerItem
 import com.vpn.fastestvpnservice.customItems.ServerSearchItem
 import com.vpn.fastestvpnservice.helpers.BasePreferenceHelper
 import com.vpn.fastestvpnservice.screens.bottomNavBarScreens.AddTextSettings
-import com.vpn.fastestvpnservice.screens.bottomNavBarScreens.onServer
 import com.vpn.fastestvpnservice.sealedClass.Screen
 import com.vpn.fastestvpnservice.ui.theme.customTypography2
 import com.vpn.fastestvpnservice.viewmodels.SearchListViewModel

+ 7 - 20
app/src/main/java/com/vpn/fastestvpnservice/screens/bottomNavBarScreens/HelpScreen.kt

@@ -1,17 +1,13 @@
 package com.vpn.fastestvpnservice.screens.bottomNavBarScreens
 
 import android.util.Log
-import androidx.compose.animation.AnimatedVisibility
 import androidx.compose.foundation.ExperimentalFoundationApi
 import androidx.compose.foundation.Image
 import androidx.compose.foundation.LocalOverscrollConfiguration
 import androidx.compose.foundation.background
-import androidx.compose.foundation.clickable
 import androidx.compose.foundation.gestures.detectTapGestures
-import androidx.compose.foundation.isSystemInDarkTheme
 import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.Box
-import androidx.compose.foundation.layout.BoxScope
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.ColumnScope
 import androidx.compose.foundation.layout.Row
@@ -23,15 +19,6 @@ import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.size
 import androidx.compose.foundation.rememberScrollState
 import androidx.compose.foundation.verticalScroll
-import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.automirrored.filled.Help
-import androidx.compose.material.icons.filled.ElectricBolt
-import androidx.compose.material.icons.filled.Email
-import androidx.compose.material.icons.filled.EnergySavingsLeaf
-import androidx.compose.material.icons.filled.Help
-import androidx.compose.material.icons.filled.Home
-import androidx.compose.material.icons.filled.PrivacyTip
-import androidx.compose.material3.Icon
 import androidx.compose.material3.MaterialTheme
 import androidx.compose.material3.Surface
 import androidx.compose.material3.Text
@@ -42,14 +29,8 @@ import androidx.compose.ui.Modifier
 import androidx.compose.ui.draw.alpha
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.ColorFilter
-import androidx.compose.ui.graphics.vector.ImageVector
 import androidx.compose.ui.input.pointer.pointerInput
-import androidx.compose.ui.res.colorResource
 import androidx.compose.ui.res.painterResource
-import androidx.compose.ui.text.TextStyle
-import androidx.compose.ui.text.font.FontStyle
-import androidx.compose.ui.text.font.FontWeight
-import androidx.compose.ui.text.style.TextAlign
 import androidx.compose.ui.tooling.preview.Preview
 import androidx.compose.ui.unit.TextUnit
 import androidx.compose.ui.unit.dp
@@ -57,7 +38,6 @@ import androidx.compose.ui.unit.sp
 import androidx.navigation.NavHostController
 import androidx.navigation.compose.rememberNavController
 import com.vpn.fastestvpnservice.R
-import com.vpn.fastestvpnservice.navigation.navigationAnimation
 import com.vpn.fastestvpnservice.sealedClass.Screen
 
 @OptIn(ExperimentalFoundationApi::class)
@@ -119,6 +99,13 @@ fun Help(navHostController: NavHostController) {
                         Screen.CustomerSupport.route
                     )
                 }
+                AddRow(icon = R.drawable.customer_support3x,
+                    text = "Email Us",
+                    navHostController = navHostController) {
+                    navHostController.navigate(
+                        Screen.EmailUs.route
+                    )
+                }
             }
         }
     }

+ 179 - 0
app/src/main/java/com/vpn/fastestvpnservice/screens/helpScreensAll/EmailUsScreen.kt

@@ -0,0 +1,179 @@
+package com.vpn.fastestvpnservice.screens.helpScreensAll
+
+import androidx.compose.foundation.background
+import androidx.compose.foundation.border
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.ColumnScope
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.fillMaxHeight
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.layout.wrapContentHeight
+import androidx.compose.foundation.layout.wrapContentSize
+import androidx.compose.foundation.text.KeyboardActions
+import androidx.compose.foundation.text.KeyboardOptions
+import androidx.compose.material.Icon
+import androidx.compose.material.IconButton
+import androidx.compose.material.Surface
+import androidx.compose.material.Text
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.TextField
+import androidx.compose.material3.TextFieldDefaults
+import androidx.compose.runtime.Composable
+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.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.platform.LocalFocusManager
+import androidx.compose.ui.platform.LocalSoftwareKeyboardController
+import androidx.compose.ui.res.colorResource
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.text.input.ImeAction
+import androidx.compose.ui.text.input.KeyboardType
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import androidx.navigation.NavHostController
+import androidx.navigation.compose.rememberNavController
+import com.vpn.fastestvpnservice.R
+import com.vpn.fastestvpnservice.ui.theme.customTypography
+
+@Composable
+fun EmailUsScreen(navHostController: NavHostController) {
+    var textChanged by remember { mutableStateOf("") }
+    val keyboardController = LocalSoftwareKeyboardController.current
+    val focusManager = LocalFocusManager.current
+
+    Box(
+        modifier = Modifier
+            .background(MaterialTheme.colorScheme.onPrimary)
+            .fillMaxSize()
+    ) {
+        Column(
+            modifier = Modifier.fillMaxSize()
+                .background(Color.Transparent),
+            verticalArrangement = Arrangement.Top,
+            horizontalAlignment = Alignment.Start
+        ) {
+            ShowHeaderEU(navHostController = navHostController)
+
+            Text(text = "Your message:",
+                color = MaterialTheme.colorScheme.primary,
+                style = MaterialTheme.typography.bodyMedium,
+                modifier = Modifier
+                    .padding(start = 20.dp, top = 25.dp)
+                    .align(Alignment.Start)
+            )
+
+            TextField(
+                value = textChanged,
+                onValueChange = {
+                    textChanged = it
+                },
+
+                textStyle = MaterialTheme.typography.customTypography.bodyMedium.copy(
+                    MaterialTheme.colorScheme.primary
+                ),
+                modifier = Modifier
+                    .padding(top = 2.dp, start = 5.dp, end = 5.dp, bottom = 10.dp)
+                    .fillMaxWidth()
+                    .align(Alignment.Start)
+                    .fillMaxHeight()
+//                    .border(
+//                        1.dp,
+//                        color = colorResource(id = R.color.Black),
+//                    ),
+                        ,
+                colors = TextFieldDefaults.colors(
+                    focusedLabelColor = Color.Blue,
+                    unfocusedContainerColor = colorResource(id = R.color.transparent),
+                    focusedContainerColor = colorResource(id = R.color.transparent),
+                    focusedIndicatorColor = colorResource(id = R.color.transparent),
+                    disabledIndicatorColor = colorResource(id = R.color.transparent),
+                    unfocusedIndicatorColor = colorResource(id = R.color.transparent),
+                    cursorColor = MaterialTheme.colorScheme.primary
+                ),
+                keyboardOptions = KeyboardOptions(
+                    keyboardType = KeyboardType.Email,
+                    imeAction = ImeAction.Done
+                ),
+                keyboardActions = KeyboardActions(
+                    onDone = {
+                        focusManager.clearFocus()
+                        keyboardController?.hide()
+                    }
+                ),
+                )
+        }
+    }
+}
+
+@Composable
+fun ColumnScope.ShowHeaderEU(navHostController: NavHostController) {
+    Row(
+        modifier = Modifier.fillMaxWidth(),
+        horizontalArrangement = Arrangement.SpaceBetween
+    ) {
+        IconButton(
+            onClick = {
+                navHostController.popBackStack()
+                navHostController.popBackStack()
+//                    navHostController.navigate(BottomBarScreen.Help.route)
+            },
+            modifier = Modifier
+                .padding(top = 10.dp)
+                .padding(start = 16.dp)
+                .size(30.dp, 32.dp)
+        ) {
+            Icon(
+                painter = painterResource(id = R.drawable.backarrow3x),
+                contentDescription = "Arrow-Back",
+                tint = MaterialTheme.colorScheme.primary,
+                modifier = Modifier.size(18.dp, 12.dp)
+            )
+        }
+        Surface(
+            modifier = Modifier
+                .padding(top = 10.dp)
+                .height(32.dp)
+                .padding(5.dp),
+            color = colorResource(id = R.color.transparent)
+        ) {
+            Text(text = "Email Us",
+                color = MaterialTheme.colorScheme.primary,
+                style = MaterialTheme.typography.bodyMedium,
+                modifier = Modifier.fillMaxHeight()
+            )
+        }
+        IconButton(
+            onClick = {
+
+            },
+            modifier = Modifier
+                .padding(top = 10.dp)
+                .padding(end = 16.dp)
+                .size(30.dp, 32.dp)
+        ) {
+            Icon(
+                painter = painterResource(id = R.drawable.customer_support3x),
+                contentDescription = "Email-Us",
+                tint = MaterialTheme.colorScheme.primary,
+                modifier = Modifier.size(24.dp)
+            )
+        }
+    }
+}
+
+
+@Preview
+@Composable
+fun EmailUsScreenPreview() {
+    EmailUsScreen(navHostController = rememberNavController())
+}

+ 2 - 2
app/src/main/java/com/vpn/fastestvpnservice/screens/helpScreensAll/FAQScreen.kt

@@ -92,7 +92,7 @@ fun FAQ(navHostController: NavHostController) {
     Box(
         modifier = Modifier
             .fillMaxWidth()
-            .background(MaterialTheme.colorScheme.onPrimaryContainer)
+            .background(MaterialTheme.colorScheme.onPrimary)
             .fillMaxSize()
     ) {
         var showLoader by remember { mutableStateOf(true) }
@@ -152,7 +152,7 @@ fun FAQ(navHostController: NavHostController) {
 
             Box(modifier = Modifier
                 .fillMaxSize()
-                .background(MaterialTheme.colorScheme.onPrimaryContainer)) {
+                .background(MaterialTheme.colorScheme.onPrimary)) {
                 CircularProgressIndicator(
                     progress = progress,
                     modifier = Modifier

+ 1 - 0
app/src/main/java/com/vpn/fastestvpnservice/sealedClass/Screen.kt

@@ -12,6 +12,7 @@ sealed class Screen(val route: String, var isTrue: Boolean = false) {
     data object TermsAndConditions : Screen("terms_and_conditions_screen")
     data object About : Screen("about_screen")
     data object CustomerSupport: Screen("customer_support_screen")
+    data object EmailUs: Screen("email_us")
     data object ChangePassword : Screen("change_password")
     data object ServerList : Screen("server_list_screen")
     data object Notifications : Screen("notifications_screen")