Skip to content
This repository has been archived by the owner on Jul 11, 2024. It is now read-only.

Commit

Permalink
feat: vpn ui state sync
Browse files Browse the repository at this point in the history
  • Loading branch information
zaneschepke committed Feb 27, 2024
1 parent a6ebf14 commit 2b517e4
Show file tree
Hide file tree
Showing 51 changed files with 270 additions and 212 deletions.
3 changes: 0 additions & 3 deletions app/src/main/java/net/nymtech/nymvpn/NymVPN.kt
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
package net.nymtech.nymvpn

import android.annotation.SuppressLint
import android.app.Application
import android.content.res.Configuration
import android.system.Os
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.TextUnit
import dagger.hilt.android.HiltAndroidApp
Expand Down
12 changes: 0 additions & 12 deletions app/src/main/java/net/nymtech/nymvpn/module/AppModule.kt
Original file line number Diff line number Diff line change
@@ -1,22 +1,10 @@
package net.nymtech.nymvpn.module

import android.net.VpnService
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import net.nymtech.vpn.NymVpnClient
import net.nymtech.vpn.NymVpnService
import net.nymtech.vpn.VpnClient
import javax.inject.Singleton

@Module
@InstallIn(SingletonComponent::class)
class AppModule {

@Singleton
@Provides
fun provideVpnClient(): VpnClient {
return NymVpnClient()
}
}
19 changes: 11 additions & 8 deletions app/src/main/java/net/nymtech/nymvpn/ui/AppViewModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package net.nymtech.nymvpn.ui

import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.squareup.moshi.Json
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.SharingStarted
Expand All @@ -14,8 +13,8 @@ import net.nymtech.nymvpn.model.Country
import net.nymtech.nymvpn.service.gateway.GatewayApiService
import net.nymtech.nymvpn.ui.theme.Theme
import net.nymtech.nymvpn.util.Constants
import timber.log.Timber
import java.util.Locale
import java.util.Locale.IsoCountryCode
import javax.inject.Inject

@HiltViewModel
Expand All @@ -34,12 +33,16 @@ class AppViewModel @Inject constructor(

fun updateCountryListCache() {
viewModelScope.launch(Dispatchers.IO) {
val gateways = gatewayApiService.getDescribedGateways()
val countries = gateways.map {
val countryIso = it.bond.gateway.location
Country(countryIso, Locale(countryIso.lowercase(), countryIso).displayCountry)
}.toSet()
dataStoreManager.saveToDataStore(DataStoreManager.NODE_COUNTRIES, countries.toString())
try {
val gateways = gatewayApiService.getDescribedGateways()
val countries = gateways.map {
val countryIso = it.bond.gateway.location
Country(countryIso, Locale(countryIso.lowercase(), countryIso).displayCountry)
}.toSet()
dataStoreManager.saveToDataStore(DataStoreManager.NODE_COUNTRIES, countries.toString())
} catch (e : Exception) {
Timber.e(e.message)
}
}
}
}
6 changes: 0 additions & 6 deletions app/src/main/java/net/nymtech/nymvpn/ui/MainActivity.kt
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
package net.nymtech.nymvpn.ui
import android.Manifest
import android.net.VpnService
import android.os.Build
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.compose.setContent
import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Scaffold
Expand All @@ -17,9 +14,7 @@ import androidx.compose.material3.SnackbarHostState
import androidx.compose.material3.SnackbarResult
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
import androidx.hilt.navigation.compose.hiltViewModel
Expand All @@ -35,7 +30,6 @@ import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import net.nymtech.nymvpn.data.datastore.DataStoreManager
import net.nymtech.nymvpn.model.Country
import net.nymtech.nymvpn.ui.common.labels.CustomSnackBar
import net.nymtech.nymvpn.ui.common.navigation.NavBar
import net.nymtech.nymvpn.ui.screens.hop.HopScreen
Expand Down
13 changes: 0 additions & 13 deletions app/src/main/java/net/nymtech/nymvpn/ui/common/SearchBar.kt
Original file line number Diff line number Diff line change
@@ -1,24 +1,17 @@
package net.nymtech.nymvpn.ui.common

import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.InteractionSource
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.defaultMinSize
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.shape.RoundedCornerShape
import androidx.compose.foundation.text.BasicTextField
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.rounded.Search
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.OutlinedTextFieldDefaults
import androidx.compose.material3.ShapeDefaults
import androidx.compose.material3.Text
Expand All @@ -29,19 +22,13 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.SolidColor
import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.text.input.VisualTransformation
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import net.nymtech.nymvpn.R
import net.nymtech.nymvpn.ui.theme.iconSize
import net.nymtech.nymvpn.util.scaledHeight

@OptIn(ExperimentalMaterial3Api::class)
@Composable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,16 @@ import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.defaultMinSize
import androidx.compose.foundation.layout.displayCutoutPadding
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.offset
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.safeContentPadding
import androidx.compose.foundation.layout.wrapContentSize
import androidx.compose.foundation.text.BasicTextField
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.OutlinedTextFieldDefaults
import androidx.compose.material3.ShapeDefaults
import androidx.compose.material3.Text
import androidx.compose.material3.TextFieldDefaults
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
Expand All @@ -29,9 +23,7 @@ import androidx.compose.ui.res.vectorResource
import androidx.compose.ui.text.input.VisualTransformation
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.window.core.layout.WindowHeightSizeClass
import net.nymtech.nymvpn.R
import net.nymtech.nymvpn.ui.MainActivity
import net.nymtech.nymvpn.util.scaledHeight

@OptIn(ExperimentalMaterial3Api::class)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize
Expand All @@ -24,8 +23,6 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.unit.dp
import androidx.window.core.layout.WindowHeightSizeClass
import net.nymtech.nymvpn.ui.MainActivity
import net.nymtech.nymvpn.ui.theme.iconSize
import net.nymtech.nymvpn.util.scaledHeight
import net.nymtech.nymvpn.util.scaledWidth
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults
import androidx.compose.material3.Divider
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
Expand All @@ -24,9 +23,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.res.vectorResource
import androidx.compose.ui.unit.dp
import androidx.window.core.layout.WindowHeightSizeClass
import net.nymtech.nymvpn.R
import net.nymtech.nymvpn.ui.MainActivity
import net.nymtech.nymvpn.ui.theme.iconSize
import net.nymtech.nymvpn.util.scaledHeight
import net.nymtech.nymvpn.util.scaledWidth
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,10 @@ package net.nymtech.nymvpn.ui.common.labels

import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier

@Composable
fun GroupLabel(title: String) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
package net.nymtech.nymvpn.ui.common.labels

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.IntrinsicSize
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.MaterialTheme
Expand All @@ -17,10 +14,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.window.core.layout.WindowHeightSizeClass
import net.nymtech.nymvpn.ui.MainActivity
import net.nymtech.nymvpn.util.scaledHeight
import net.nymtech.nymvpn.util.scaledWidth

@Composable
fun PillLabel(text: String, backgroundColor : Color, textColor : Color) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package net.nymtech.nymvpn.ui.common.navigation

import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.size
import androidx.compose.material3.CenterAlignedTopAppBar
import androidx.compose.material3.ExperimentalMaterial3Api
Expand All @@ -12,12 +11,8 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.navigation.NavController
import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.window.core.layout.WindowHeightSizeClass
import net.nymtech.nymvpn.ui.MainActivity
import net.nymtech.nymvpn.ui.NavItem
import net.nymtech.nymvpn.ui.theme.iconSize

Expand Down
35 changes: 31 additions & 4 deletions app/src/main/java/net/nymtech/nymvpn/ui/model/ConnectionState.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,37 @@ package net.nymtech.nymvpn.ui.model

import net.nymtech.nymvpn.R
import net.nymtech.nymvpn.util.StringValue
import net.nymtech.vpn.model.VpnState

sealed class ConnectionState(val status: StringValue) {
data object Connected : ConnectionState(StringValue.StringResource(R.string.connected))
data object Connecting : ConnectionState(StringValue.StringResource(R.string.connecting))
data object Disconnecting : ConnectionState(StringValue.StringResource(R.string.disconnecting))
data object Disconnected : ConnectionState(StringValue.StringResource(R.string.disconnected))

abstract val stateMessage : StateMessage
data object Connected : ConnectionState(StringValue.StringResource(R.string.connected)){
override val stateMessage: StateMessage
get() = StateMessage.Info(StringValue.StringResource(R.string.connection_time))
}
data object Connecting : ConnectionState(StringValue.StringResource(R.string.connecting)) {
override val stateMessage: StateMessage
get() = StateMessage.Info(StringValue.StringResource(R.string.init_client))
}
data object Disconnecting : ConnectionState(StringValue.StringResource(R.string.disconnecting)) {
override val stateMessage: StateMessage
get() = StateMessage.Info(StringValue.Empty)
}
data object Disconnected : ConnectionState(StringValue.StringResource(R.string.disconnected)) {
override val stateMessage: StateMessage
get() = StateMessage.Info(StringValue.Empty)
}


companion object {
fun from(vpnState: VpnState) : ConnectionState {
return when(vpnState) {
VpnState.DOWN -> Disconnected
VpnState.UP -> Connected
VpnState.CONNECTING -> Connecting
VpnState.DISCONNECTING -> Disconnecting
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import androidx.compose.foundation.layout.size
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
Expand All @@ -29,12 +28,10 @@ import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.navigation.NavController
import androidx.window.core.layout.WindowHeightSizeClass
import net.nymtech.nymvpn.R
import net.nymtech.nymvpn.model.Country
import net.nymtech.nymvpn.model.NetworkMode
import net.nymtech.nymvpn.ui.AppUiState
import net.nymtech.nymvpn.ui.MainActivity
import net.nymtech.nymvpn.ui.NavItem
import net.nymtech.nymvpn.ui.common.animations.SpinningIcon
import net.nymtech.nymvpn.ui.common.buttons.ListOptionSelectionButton
Expand Down
Loading

0 comments on commit 2b517e4

Please sign in to comment.