summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/Scaffolding.kt4
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/TopBar.kt49
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/LoadingScreen.kt80
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt4
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/LaunchFragment.kt37
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/LoadingFragment.kt31
-rw-r--r--android/app/src/main/res/layout/fragment_compose.xml3
-rw-r--r--android/app/src/main/res/layout/launch.xml36
8 files changed, 143 insertions, 101 deletions
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/Scaffolding.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/Scaffolding.kt
index 67e4a3ec19..38c188eece 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/Scaffolding.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/Scaffolding.kt
@@ -12,6 +12,7 @@ fun ScaffoldWithTopBar(
statusBarColor: Color,
navigationBarColor: Color,
onSettingsClicked: () -> Unit,
+ isIconAndLogoVisible: Boolean = true,
content: @Composable (PaddingValues) -> Unit,
) {
val systemUiController = rememberSystemUiController()
@@ -22,7 +23,8 @@ fun ScaffoldWithTopBar(
topBar = {
TopBar(
backgroundColor = topBarColor,
- onSettingsClicked = onSettingsClicked
+ onSettingsClicked = onSettingsClicked,
+ isIconAndLogoVisible = isIconAndLogoVisible
)
},
content = content
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/TopBar.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/TopBar.kt
index 7756479883..d4560457b4 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/TopBar.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/component/TopBar.kt
@@ -34,7 +34,8 @@ fun PreviewTopBar() {
fun TopBar(
backgroundColor: Color,
onSettingsClicked: () -> Unit,
- modifier: Modifier = Modifier
+ modifier: Modifier = Modifier,
+ isIconAndLogoVisible: Boolean = true
) {
ConstraintLayout(
modifier = Modifier
@@ -45,29 +46,31 @@ fun TopBar(
) {
val (logo, appName, settingsIcon) = createRefs()
- Image(
- painter = painterResource(id = R.drawable.logo_icon),
- contentDescription = null, // No meaningful user info or action.
- modifier = Modifier
- .width(44.dp)
- .height(44.dp)
- .constrainAs(logo) {
- centerVerticallyTo(parent)
- start.linkTo(parent.start, margin = 16.dp)
- }
- )
+ if (isIconAndLogoVisible) {
+ Image(
+ painter = painterResource(id = R.drawable.logo_icon),
+ contentDescription = null, // No meaningful user info or action.
+ modifier = Modifier
+ .width(44.dp)
+ .height(44.dp)
+ .constrainAs(logo) {
+ centerVerticallyTo(parent)
+ start.linkTo(parent.start, margin = 16.dp)
+ }
+ )
- Icon(
- painter = painterResource(id = R.drawable.logo_text),
- tint = colorResource(id = R.color.white80),
- contentDescription = null, // No meaningful user info or action.
- modifier = Modifier
- .height(16.dp)
- .constrainAs(appName) {
- centerVerticallyTo(parent)
- start.linkTo(logo.end, margin = 8.dp)
- }
- )
+ Icon(
+ painter = painterResource(id = R.drawable.logo_text),
+ tint = colorResource(id = R.color.white80),
+ contentDescription = null, // No meaningful user info or action.
+ modifier = Modifier
+ .height(16.dp)
+ .constrainAs(appName) {
+ centerVerticallyTo(parent)
+ start.linkTo(logo.end, margin = 8.dp)
+ }
+ )
+ }
Image(
painter = painterResource(R.drawable.icon_settings),
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/LoadingScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/LoadingScreen.kt
new file mode 100644
index 0000000000..4869cf6e9c
--- /dev/null
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/LoadingScreen.kt
@@ -0,0 +1,80 @@
+package net.mullvad.mullvadvpn.compose.screen
+
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.material.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.res.colorResource
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import net.mullvad.mullvadvpn.R
+import net.mullvad.mullvadvpn.compose.component.ScaffoldWithTopBar
+
+@Preview
+@Composable
+private fun PreviewLoadingScreen() {
+ LoadingScreen {}
+}
+
+@Composable
+fun LoadingScreen(
+ onSettingsCogClicked: () -> Unit
+) {
+ val backgroundColor = colorResource(id = R.color.blue)
+
+ ScaffoldWithTopBar(
+ topBarColor = backgroundColor,
+ statusBarColor = backgroundColor,
+ navigationBarColor = backgroundColor,
+ onSettingsClicked = onSettingsCogClicked,
+ isIconAndLogoVisible = false,
+ content = {
+ Box(
+ contentAlignment = Alignment.Center,
+ modifier = Modifier
+ .background(backgroundColor)
+ .padding(bottom = 64.dp)
+ .fillMaxSize()
+ ) {
+ Column(
+ verticalArrangement = Arrangement.Center,
+ horizontalAlignment = Alignment.CenterHorizontally
+ ) {
+ Image(
+ painter = painterResource(id = R.drawable.launch_logo),
+ contentDescription = "",
+ modifier = Modifier
+ .size(120.dp)
+ )
+ Image(
+ painter = painterResource(id = R.drawable.logo_text),
+ contentDescription = "",
+ alpha = 0.6f,
+ modifier = Modifier
+ .padding(top = 12.dp)
+ .height(18.dp)
+ )
+ Text(
+ text = stringResource(id = R.string.connecting_to_daemon),
+ fontSize = 13.sp,
+ color = colorResource(id = R.color.white40),
+ modifier = Modifier
+ .padding(top = 12.dp)
+ )
+ }
+ }
+ }
+ )
+}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt
index 05bbe681e1..baa7f75ec8 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/MainActivity.kt
@@ -40,7 +40,7 @@ import net.mullvad.mullvadvpn.repository.AccountRepository
import net.mullvad.mullvadvpn.repository.DeviceRepository
import net.mullvad.mullvadvpn.ui.fragment.ConnectFragment
import net.mullvad.mullvadvpn.ui.fragment.DeviceRevokedFragment
-import net.mullvad.mullvadvpn.ui.fragment.LaunchFragment
+import net.mullvad.mullvadvpn.ui.fragment.LoadingFragment
import net.mullvad.mullvadvpn.ui.fragment.LoginFragment
import net.mullvad.mullvadvpn.ui.fragment.OutOfTimeFragment
import net.mullvad.mullvadvpn.ui.fragment.WelcomeFragment
@@ -239,7 +239,7 @@ open class MainActivity : FragmentActivity() {
private fun openLaunchView() {
supportFragmentManager.beginTransaction().apply {
- replace(R.id.main_fragment, LaunchFragment())
+ replace(R.id.main_fragment, LoadingFragment())
commitAllowingStateLoss()
}
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/LaunchFragment.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/LaunchFragment.kt
deleted file mode 100644
index 877f4712bb..0000000000
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/LaunchFragment.kt
+++ /dev/null
@@ -1,37 +0,0 @@
-package net.mullvad.mullvadvpn.ui.fragment
-
-import android.os.Bundle
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import androidx.core.content.ContextCompat
-import androidx.fragment.app.Fragment
-import net.mullvad.mullvadvpn.R
-import net.mullvad.mullvadvpn.ui.MainActivity
-import net.mullvad.mullvadvpn.ui.NavigationBarPainter
-import net.mullvad.mullvadvpn.ui.StatusBarPainter
-import net.mullvad.mullvadvpn.ui.paintNavigationBar
-import net.mullvad.mullvadvpn.ui.paintStatusBar
-
-class LaunchFragment : Fragment(), StatusBarPainter, NavigationBarPainter {
- override fun onCreateView(
- inflater: LayoutInflater,
- container: ViewGroup?,
- savedInstanceState: Bundle?
- ): View {
- val view = inflater.inflate(R.layout.launch, container, false)
-
- view.findViewById<View>(R.id.settings).setOnClickListener {
- (context as? MainActivity)?.openSettings()
- }
-
- context
- ?.let { ContextCompat.getColor(it, R.color.blue) }
- ?.let { color ->
- paintStatusBar(color)
- paintNavigationBar(color)
- }
-
- return view
- }
-}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/LoadingFragment.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/LoadingFragment.kt
new file mode 100644
index 0000000000..0c83acf20d
--- /dev/null
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/fragment/LoadingFragment.kt
@@ -0,0 +1,31 @@
+package net.mullvad.mullvadvpn.ui.fragment
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.compose.ui.platform.ComposeView
+import androidx.fragment.app.Fragment
+import net.mullvad.mullvadvpn.R
+import net.mullvad.mullvadvpn.compose.screen.LoadingScreen
+import net.mullvad.mullvadvpn.ui.MainActivity
+import net.mullvad.mullvadvpn.ui.NavigationBarPainter
+import net.mullvad.mullvadvpn.ui.StatusBarPainter
+
+class LoadingFragment : Fragment(), StatusBarPainter, NavigationBarPainter {
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ return inflater.inflate(R.layout.fragment_compose, container, false).apply {
+ findViewById<ComposeView>(R.id.compose_view).setContent {
+ LoadingScreen(this@LoadingFragment::openSettings)
+ }
+ }
+ }
+
+ private fun openSettings() {
+ (context as? MainActivity)?.openSettings()
+ }
+}
diff --git a/android/app/src/main/res/layout/fragment_compose.xml b/android/app/src/main/res/layout/fragment_compose.xml
index 3417de83cb..a3a147d997 100644
--- a/android/app/src/main/res/layout/fragment_compose.xml
+++ b/android/app/src/main/res/layout/fragment_compose.xml
@@ -2,8 +2,7 @@
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
- android:layout_height="match_parent"
- tools:context=".DeviceInactiveFragment">
+ android:layout_height="match_parent">
<androidx.compose.ui.platform.ComposeView android:id="@+id/compose_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
diff --git a/android/app/src/main/res/layout/launch.xml b/android/app/src/main/res/layout/launch.xml
deleted file mode 100644
index 24c2fa6350..0000000000
--- a/android/app/src/main/res/layout/launch.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- <ImageButton android:id="@+id/settings"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="top | right"
- android:paddingHorizontal="16dp"
- android:paddingVertical="25dp"
- android:background="?android:attr/selectableItemBackground"
- android:src="@drawable/icon_settings" />
- <LinearLayout android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:paddingHorizontal="@dimen/side_margin"
- android:orientation="vertical"
- android:gravity="center">
- <ImageView android:layout_width="120dp"
- android:layout_height="120dp"
- android:src="@drawable/launch_logo" />
- <ImageView android:layout_height="18dp"
- android:layout_width="wrap_content"
- android:layout_marginTop="12dp"
- android:layout_marginBottom="5dp"
- android:adjustViewBounds="true"
- android:scaleType="fitCenter"
- app:tint="@color/white60"
- android:src="@drawable/logo_text" />
- <TextView android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textColor="@color/white40"
- android:textSize="@dimen/text_small"
- android:text="@string/connecting_to_daemon" />
- </LinearLayout>
-</FrameLayout>