Skip to content

Commit 152e754

Browse files
committed
feat: add secure screen setting
1 parent 6c23f5e commit 152e754

File tree

4 files changed

+44
-1
lines changed

4 files changed

+44
-1
lines changed

app/src/main/java/com/paulcoding/hviewer/MainActivity.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,10 @@ import androidx.compose.ui.Alignment
1717
import androidx.compose.ui.Modifier
1818
import androidx.compose.ui.unit.dp
1919
import androidx.compose.ui.window.Dialog
20+
import com.paulcoding.hviewer.extensions.setSecureScreen
2021
import com.paulcoding.hviewer.helper.makeToast
2122
import com.paulcoding.hviewer.network.Github
23+
import com.paulcoding.hviewer.preference.Preferences
2224
import com.paulcoding.hviewer.ui.component.HLoading
2325
import com.paulcoding.hviewer.ui.component.ToastExit
2426
import com.paulcoding.hviewer.ui.page.AppEntry
@@ -29,6 +31,8 @@ class MainActivity : ComponentActivity() {
2931
override fun onCreate(savedInstanceState: Bundle?) {
3032
super.onCreate(savedInstanceState)
3133

34+
window.setSecureScreen(Preferences.secureScreen)
35+
3236
enableEdgeToEdge()
3337
setContent {
3438
Content()
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.paulcoding.hviewer.extensions
2+
3+
import android.view.Window
4+
import android.view.WindowManager
5+
6+
fun Window.setSecureScreen(enabled: Boolean) {
7+
if (enabled) {
8+
setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE)
9+
} else {
10+
clearFlags(WindowManager.LayoutParams.FLAG_SECURE)
11+
}
12+
}

app/src/main/java/com/paulcoding/hviewer/preference/MMKV.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import com.tencent.mmkv.MMKV
44

55

66
const val REMOTE_URL = "remote_url"
7+
const val SECURE_SCREEN = "secure_screen"
78

89
object Preferences {
910
private val kv: MMKV = MMKV.defaultMMKV()
@@ -13,4 +14,10 @@ object Preferences {
1314
fun setRemote(url: String) {
1415
kv.putString(REMOTE_URL, url)
1516
}
17+
18+
var secureScreen: Boolean
19+
get() = kv.getBoolean(SECURE_SCREEN, true)
20+
set(value) {
21+
kv.putBoolean(SECURE_SCREEN, value)
22+
}
1623
}

app/src/main/java/com/paulcoding/hviewer/ui/page/settings/SettingsPage.kt

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import androidx.compose.foundation.rememberScrollState
1515
import androidx.compose.foundation.text.KeyboardActions
1616
import androidx.compose.foundation.text.KeyboardOptions
1717
import androidx.compose.foundation.verticalScroll
18+
import androidx.compose.material3.Checkbox
1819
import androidx.compose.material3.ExperimentalMaterial3Api
1920
import androidx.compose.material3.Icon
2021
import androidx.compose.material3.IconButton
@@ -35,13 +36,17 @@ import androidx.compose.ui.Modifier
3536
import androidx.compose.ui.focus.FocusRequester
3637
import androidx.compose.ui.focus.focusRequester
3738
import androidx.compose.ui.graphics.Color
39+
import androidx.compose.ui.platform.LocalContext
3840
import androidx.compose.ui.text.input.ImeAction
3941
import androidx.compose.ui.text.input.KeyboardType
4042
import androidx.compose.ui.text.style.TextDecoration
4143
import androidx.compose.ui.unit.dp
4244
import androidx.compose.ui.window.Dialog
4345
import androidx.compose.ui.window.DialogProperties
46+
import com.paulcoding.hviewer.MainActivity
47+
import com.paulcoding.hviewer.extensions.setSecureScreen
4448
import com.paulcoding.hviewer.network.Github
49+
import com.paulcoding.hviewer.preference.Preferences
4550
import com.paulcoding.hviewer.ui.component.HBackIcon
4651
import com.paulcoding.hviewer.ui.icon.EditIcon
4752

@@ -51,6 +56,8 @@ fun SettingsPage(goBack: () -> Boolean) {
5156
val githubState by Github.stateFlow.collectAsState()
5257
val prevSiteConfigs = remember { githubState.siteConfigs }
5358
var modalVisible by remember { mutableStateOf(false) }
59+
var secureScreen by remember { mutableStateOf(Preferences.secureScreen) }
60+
val window = (LocalContext.current as MainActivity).window
5461

5562
LaunchedEffect(githubState.siteConfigs) {
5663
if (prevSiteConfigs == null && githubState.siteConfigs != null) {
@@ -69,7 +76,8 @@ fun SettingsPage(goBack: () -> Boolean) {
6976
.padding(horizontal = 16.dp)
7077
.verticalScroll(
7178
rememberScrollState()
72-
)
79+
),
80+
verticalArrangement = Arrangement.spacedBy(16.dp)
7381
) {
7482
Row(
7583
verticalAlignment = Alignment.CenterVertically,
@@ -84,6 +92,18 @@ fun SettingsPage(goBack: () -> Boolean) {
8492
githubState.remoteUrl.ifEmpty { "https://github.com/{OWNER}/{REPO}/" },
8593
textDecoration = TextDecoration.Underline
8694
)
95+
96+
Row(
97+
verticalAlignment = Alignment.CenterVertically,
98+
horizontalArrangement = Arrangement.spacedBy(8.dp)
99+
) {
100+
Text("Enable secure screen", modifier = Modifier.weight(1f))
101+
Checkbox(checked = secureScreen, onCheckedChange = {
102+
secureScreen = it
103+
Preferences.secureScreen = it
104+
window.setSecureScreen(it)
105+
})
106+
}
87107
}
88108
}
89109

0 commit comments

Comments
 (0)