summaryrefslogtreecommitdiffhomepage
path: root/android/app/src
diff options
context:
space:
mode:
Diffstat (limited to 'android/app/src')
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/applist/ListItemData.kt1
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/applist/ViewIntent.kt2
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/SelectLocationUiState.kt1
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/SplitTunnelingUiState.kt1
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/MullvadProblemReport.kt4
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/GetItemResult.kt1
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/BlockingController.kt1
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/BaseFragment.kt1
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/listitemview/PlainListItemView.kt1
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/listitemview/TwoActionListItemView.kt1
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/listitemview/WidgetViewController.kt4
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/notification/InAppNotification.kt1
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/ConnectionProxy.kt1
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/ServiceConnectionAccountDataSource.kt5
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/ListenableScrollView.kt1
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/NotificationBanner.kt2
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/WidgetState.kt1
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/util/FlowUtils.kt1
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/util/HeaderOrHolder.kt1
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/AccountViewModel.kt1
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/ChangelogViewModel.kt1
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/ConnectViewModel.kt3
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/LoginViewModel.kt8
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModelState.kt2
24 files changed, 46 insertions, 0 deletions
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/applist/ListItemData.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/applist/ListItemData.kt
index c04b4637bb..613fe49e8f 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/applist/ListItemData.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/applist/ListItemData.kt
@@ -57,6 +57,7 @@ private constructor(
const val ACTION = 3
const val DOUBLE_ACTION = 4
const val APPLICATION = 5
+
fun build(identifier: String, setUp: Builder.() -> Unit): ListItemData =
Builder(identifier).also(setUp).build()
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/applist/ViewIntent.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/applist/ViewIntent.kt
index 5db52ca295..4469bd00ef 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/applist/ViewIntent.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/applist/ViewIntent.kt
@@ -3,6 +3,8 @@ package net.mullvad.mullvadvpn.applist
sealed class ViewIntent {
// In future we will have search intent
data class ChangeApplicationGroup(val item: ListItemData) : ViewIntent()
+
object ViewIsReady : ViewIntent()
+
data class ShowSystemApps(internal val show: Boolean) : ViewIntent()
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/SelectLocationUiState.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/SelectLocationUiState.kt
index 61b3abffa2..9d230a98fe 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/SelectLocationUiState.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/SelectLocationUiState.kt
@@ -5,6 +5,7 @@ import net.mullvad.mullvadvpn.relaylist.RelayItem
sealed interface SelectLocationUiState {
object Loading : SelectLocationUiState
+
data class ShowData(val countries: List<RelayCountry>, val selectedRelay: RelayItem?) :
SelectLocationUiState
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/SplitTunnelingUiState.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/SplitTunnelingUiState.kt
index d63afac400..1ebb8fb379 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/SplitTunnelingUiState.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/SplitTunnelingUiState.kt
@@ -4,6 +4,7 @@ import net.mullvad.mullvadvpn.applist.AppData
sealed interface SplitTunnelingUiState {
object Loading : SplitTunnelingUiState
+
data class ShowAppList(
val excludedApps: List<AppData> = emptyList(),
val includedApps: List<AppData> = emptyList(),
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/MullvadProblemReport.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/MullvadProblemReport.kt
index fb09846b8b..7104deb686 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/MullvadProblemReport.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/MullvadProblemReport.kt
@@ -16,8 +16,11 @@ const val PROBLEM_REPORT_FILE = "problem_report.txt"
class MullvadProblemReport {
private sealed class Command {
class Collect() : Command()
+
class Load(val logs: CompletableDeferred<String>) : Command()
+
class Send(val result: CompletableDeferred<Boolean>) : Command()
+
class Delete() : Command()
}
@@ -128,6 +131,7 @@ class MullvadProblemReport {
}
private external fun collectReport(logDirectory: String, reportPath: String): Boolean
+
private external fun sendProblemReport(
userEmail: String,
userMessage: String,
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/GetItemResult.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/GetItemResult.kt
index d443d30cfe..edbaaf39d1 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/GetItemResult.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/relaylist/GetItemResult.kt
@@ -2,5 +2,6 @@ package net.mullvad.mullvadvpn.relaylist
sealed class GetItemResult {
data class Item(val item: RelayItem) : GetItemResult()
+
data class Count(val count: Int) : GetItemResult()
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/BlockingController.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/BlockingController.kt
index 9589c9474b..4dd53fa937 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/BlockingController.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/BlockingController.kt
@@ -34,5 +34,6 @@ class BlockingController(val blockableView: BlockableView) {
interface BlockableView {
fun setEnabled(enabled: Boolean)
+
fun onClick(): Job
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/BaseFragment.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/BaseFragment.kt
index 905cc889a9..bfbe4bdd25 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/BaseFragment.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/BaseFragment.kt
@@ -12,6 +12,7 @@ import net.mullvad.mullvadvpn.util.transitionFinished
abstract class BaseFragment : Fragment {
constructor() : super()
+
constructor(@LayoutRes contentLayoutId: Int) : super(contentLayoutId)
protected var transitionFinishedFlow: Flow<Unit> = emptyFlow()
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/listitemview/PlainListItemView.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/listitemview/PlainListItemView.kt
index f472c444df..b0553619f9 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/listitemview/PlainListItemView.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/listitemview/PlainListItemView.kt
@@ -9,6 +9,7 @@ class PlainListItemView(context: Context) :
ListItemView(ContextThemeWrapper(context, R.style.ListItem_PlainText)) {
override val layoutRes: Int
get() = R.layout.list_item_plain_text
+
override val heightRes: Int? = null
private val plainText: TextView = findViewById(R.id.plain_text)
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/listitemview/TwoActionListItemView.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/listitemview/TwoActionListItemView.kt
index 8f349c0548..ffe6d0ae89 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/listitemview/TwoActionListItemView.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/listitemview/TwoActionListItemView.kt
@@ -9,6 +9,7 @@ class TwoActionListItemView(context: Context) :
ActionListItemView(ContextThemeWrapper(context, R.style.ListItem_Action_Double)) {
override val layoutRes: Int
get() = R.layout.list_item_two_action
+
private val container: ViewGroup = findViewById(R.id.container_without_widget)
init {
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/listitemview/WidgetViewController.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/listitemview/WidgetViewController.kt
index 07463e1920..62325b4e1d 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/listitemview/WidgetViewController.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/listitemview/WidgetViewController.kt
@@ -21,7 +21,9 @@ sealed class WidgetViewController<T : WidgetState>(val parent: ViewGroup) {
WidgetViewController<WidgetState.ImageState>(parent) {
override val layoutRes: Int
get() = R.layout.list_item_widget_image
+
private val imageView: ImageView = parent.findViewById(R.id.widgetImage)
+
override fun updateState(state: WidgetState.ImageState) =
imageView.setImageResource(state.imageRes)
}
@@ -30,7 +32,9 @@ sealed class WidgetViewController<T : WidgetState>(val parent: ViewGroup) {
WidgetViewController<WidgetState.SwitchState>(parent) {
override val layoutRes: Int
get() = R.layout.list_item_widget_switch
+
private val switch: SwitchCompat = parent.findViewById(R.id.widgetSwitch)
+
override fun updateState(state: WidgetState.SwitchState) {
switch.isChecked = state.isChecked
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/notification/InAppNotification.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/notification/InAppNotification.kt
index 9ee7a02698..ddba8656eb 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/notification/InAppNotification.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/notification/InAppNotification.kt
@@ -27,6 +27,7 @@ abstract class InAppNotification {
protected set
open fun onResume() {}
+
open fun onPause() {}
open fun onDestroy() {
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/ConnectionProxy.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/ConnectionProxy.kt
index 7470fc0712..d51bad461d 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/ConnectionProxy.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/ConnectionProxy.kt
@@ -24,6 +24,7 @@ class ConnectionProxy(private val connection: Messenger, eventDispatcher: EventD
var state by onStateChange.notifiable()
private set
+
var uiState by onUiStateChange.notifiable()
private set
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/ServiceConnectionAccountDataSource.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/ServiceConnectionAccountDataSource.kt
index b8e6bc2ff9..d383035102 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/ServiceConnectionAccountDataSource.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/ServiceConnectionAccountDataSource.kt
@@ -45,9 +45,14 @@ class ServiceConnectionAccountDataSource(
}
fun createAccount() = connection.send(Request.CreateAccount.message)
+
fun login(accountToken: String) = connection.send(Request.Login(accountToken).message)
+
fun logout() = connection.send(Request.Logout.message)
+
fun fetchAccountExpiry() = connection.send(Request.FetchAccountExpiry.message)
+
fun fetchAccountHistory() = connection.send(Request.FetchAccountHistory.message)
+
fun clearAccountHistory() = connection.send(Request.ClearAccountHistory.message)
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/ListenableScrollView.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/ListenableScrollView.kt
index 683341686f..0b65325f42 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/ListenableScrollView.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/ListenableScrollView.kt
@@ -8,6 +8,7 @@ import net.mullvad.mullvadvpn.util.ListenableScrollableView
class ListenableScrollView : ScrollView, ListenableScrollableView {
override val horizontalScrollOffset
get() = scrollX
+
override val verticalScrollOffset
get() = scrollY
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/NotificationBanner.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/NotificationBanner.kt
index 48cd07f5c2..42f3f16122 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/NotificationBanner.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/NotificationBanner.kt
@@ -25,6 +25,7 @@ class NotificationBanner : FrameLayout {
private val animationListener =
object : AnimatorListener {
override fun onAnimationCancel(animation: Animator) {}
+
override fun onAnimationRepeat(animation: Animator) {}
override fun onAnimationStart(animation: Animator) {
@@ -78,6 +79,7 @@ class NotificationBanner : FrameLayout {
}
constructor(context: Context) : super(context)
+
constructor(context: Context, attributes: AttributeSet) : super(context, attributes)
constructor(
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/WidgetState.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/WidgetState.kt
index 484f0262c1..e92265b2df 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/WidgetState.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/WidgetState.kt
@@ -4,5 +4,6 @@ import androidx.annotation.DrawableRes
sealed class WidgetState {
data class ImageState(@DrawableRes val imageRes: Int) : WidgetState()
+
data class SwitchState(val isChecked: Boolean) : WidgetState()
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/util/FlowUtils.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/util/FlowUtils.kt
index 6418652728..e4cdc95070 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/util/FlowUtils.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/util/FlowUtils.kt
@@ -17,6 +17,7 @@ fun Animation.transitionFinished(): Flow<Unit> =
val transitionAnimationListener =
object : Animation.AnimationListener {
override fun onAnimationStart(animation: Animation?) {}
+
override fun onAnimationEnd(animation: Animation?) {
safeOffer(Unit)
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/util/HeaderOrHolder.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/util/HeaderOrHolder.kt
index 308298443a..a1b50c6efb 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/util/HeaderOrHolder.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/util/HeaderOrHolder.kt
@@ -5,5 +5,6 @@ import androidx.recyclerview.widget.RecyclerView.ViewHolder
sealed class HeaderOrHolder<H : ViewHolder>(itemView: View) : ViewHolder(itemView) {
class Header<H : ViewHolder>(headerView: View) : HeaderOrHolder<H>(headerView)
+
class Holder<H : ViewHolder>(val holder: H) : HeaderOrHolder<H>(holder.itemView)
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/AccountViewModel.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/AccountViewModel.kt
index 79d7ae5428..30c1464a91 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/AccountViewModel.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/AccountViewModel.kt
@@ -55,6 +55,7 @@ class AccountViewModel(
)
}
}
+
fun onLogoutClick() {
accountRepository.logout()
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/ChangelogViewModel.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/ChangelogViewModel.kt
index a8255f5675..bbfac3e024 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/ChangelogViewModel.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/ChangelogViewModel.kt
@@ -39,5 +39,6 @@ class ChangelogViewModel(
sealed class ChangelogDialogUiState {
data class Show(val changes: List<String>) : ChangelogDialogUiState()
+
object Hide : ChangelogDialogUiState()
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/ConnectViewModel.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/ConnectViewModel.kt
index 37aa06a7c9..0798bc50af 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/ConnectViewModel.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/ConnectViewModel.kt
@@ -130,12 +130,15 @@ class ConnectViewModel(private val serviceConnectionManager: ServiceConnectionMa
fun onDisconnectClick() {
serviceConnectionManager.connectionProxy()?.disconnect()
}
+
fun onReconnectClick() {
serviceConnectionManager.connectionProxy()?.reconnect()
}
+
fun onConnectClick() {
serviceConnectionManager.connectionProxy()?.connect()
}
+
fun onCancelClick() {
serviceConnectionManager.connectionProxy()?.disconnect()
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/LoginViewModel.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/LoginViewModel.kt
index 2f59bcb347..6fb00b1922 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/LoginViewModel.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/LoginViewModel.kt
@@ -27,15 +27,23 @@ class LoginViewModel(
sealed class LoginUiState {
object Default : LoginUiState()
+
object Loading : LoginUiState()
+
data class Success(val isOutOfTime: Boolean) : LoginUiState()
object CreatingAccount : LoginUiState()
+
object AccountCreated : LoginUiState()
+
object UnableToCreateAccountError : LoginUiState()
+
object InvalidAccountError : LoginUiState()
+
data class TooManyDevicesError(val accountToken: String) : LoginUiState()
+
object TooManyDevicesMissingListError : LoginUiState()
+
data class OtherError(val errorMessage: String) : LoginUiState()
fun isLoading(): Boolean {
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModelState.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModelState.kt
index ab749e02d9..fbcc60258a 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModelState.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModelState.kt
@@ -239,7 +239,9 @@ sealed interface StagedDns {
sealed class ValidationResult {
object Success : ValidationResult()
+
object InvalidAddress : ValidationResult()
+
object DuplicateAddress : ValidationResult()
}