diff --git a/android/src/main/java/com/tailscale/ipn/MainActivity.kt b/android/src/main/java/com/tailscale/ipn/MainActivity.kt index 0b3b762..0d86c00 100644 --- a/android/src/main/java/com/tailscale/ipn/MainActivity.kt +++ b/android/src/main/java/com/tailscale/ipn/MainActivity.kt @@ -44,6 +44,7 @@ import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController import androidx.navigation.navArgument import com.tailscale.ipn.mdm.MDMSettings +import com.tailscale.ipn.mdm.ShowHide import com.tailscale.ipn.ui.model.Ipn import com.tailscale.ipn.ui.notifier.Notifier import com.tailscale.ipn.ui.theme.AppTheme @@ -123,6 +124,9 @@ class MainActivity : ComponentActivity() { App.get() vpnViewModel = ViewModelProvider(App.get()).get(VpnViewModel::class.java) + val rm = getSystemService(Context.RESTRICTIONS_SERVICE) as RestrictionsManager + MDMSettings.update(App.get(), rm) + // (jonathan) TODO: Force the app to be portrait on small screens until we have // proper landscape layout support if (!isLandscapeCapable()) { @@ -290,9 +294,7 @@ class MainActivity : ComponentActivity() { onNavigateHome = backTo("main"), backTo("userSwitcher")) } } - - // Show the intro screen one time - if (!introScreenViewed()) { + if (shouldDisplayOnboarding()) { navController.navigate("intro") setIntroScreenViewed(true) } @@ -446,8 +448,11 @@ class MainActivity : ComponentActivity() { startActivity(intent) } - private fun introScreenViewed(): Boolean { - return getSharedPreferences("introScreen", Context.MODE_PRIVATE).getBoolean("seen", false) + private fun shouldDisplayOnboarding(): Boolean { + val onboardingFlowShowHide = MDMSettings.onboardingFlow.flow.value.value + val introSeen = + getSharedPreferences("introScreen", Context.MODE_PRIVATE).getBoolean("seen", false) + return (onboardingFlowShowHide == ShowHide.Show && !introSeen) } private fun setIntroScreenViewed(seen: Boolean) { diff --git a/android/src/main/java/com/tailscale/ipn/mdm/MDMSettings.kt b/android/src/main/java/com/tailscale/ipn/mdm/MDMSettings.kt index 3364ceb..270d1a0 100644 --- a/android/src/main/java/com/tailscale/ipn/mdm/MDMSettings.kt +++ b/android/src/main/java/com/tailscale/ipn/mdm/MDMSettings.kt @@ -97,6 +97,9 @@ object MDMSettings { // Overrides the value provided by os.Hostname() in Go val hostname = StringMDMSetting("Hostname", "Device Hostname") + // Allows admins to skip the get started intro screen + val onboardingFlow = ShowHideMDMSetting("OnboardingFlow", "Suppress the intro screen") + val allSettings by lazy { MDMSettings::class .declaredMemberProperties diff --git a/android/src/main/res/values/strings.xml b/android/src/main/res/values/strings.xml index 5626e58..38f5a6c 100644 --- a/android/src/main/res/values/strings.xml +++ b/android/src/main/res/values/strings.xml @@ -214,6 +214,8 @@ Run as exit node visibility Defines an auth key that will be used for login. Auth Key + Skips the intro page shown to users that open the app for the first time + Skip the Onboarding Flow Permissions diff --git a/android/src/main/res/xml/app_restrictions.xml b/android/src/main/res/xml/app_restrictions.xml index 7f5549f..44603c7 100644 --- a/android/src/main/res/xml/app_restrictions.xml +++ b/android/src/main/res/xml/app_restrictions.xml @@ -134,4 +134,12 @@ android:key="Hostname" android:restrictionType="string" android:title="@string/hostname" /> + + \ No newline at end of file