mirror of
https://github.com/null2264/yokai.git
synced 2025-06-21 10:44:42 +00:00
Upgrade secure screen (adding incognito support)
Co-Authored-By: arkon <4098258+arkon@users.noreply.github.com>
This commit is contained in:
parent
4048811e7a
commit
3b7a13ddc9
12 changed files with 78 additions and 24 deletions
|
@ -6,6 +6,7 @@ import eu.kanade.tachiyomi.data.backup.BackupCreatorJob
|
|||
import eu.kanade.tachiyomi.data.download.DownloadProvider
|
||||
import eu.kanade.tachiyomi.data.library.LibraryUpdateJob
|
||||
import eu.kanade.tachiyomi.data.preference.PreferenceKeys
|
||||
import eu.kanade.tachiyomi.data.preference.PreferenceValues
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
import eu.kanade.tachiyomi.data.preference.plusAssign
|
||||
import eu.kanade.tachiyomi.data.track.TrackManager
|
||||
|
@ -195,6 +196,12 @@ object Migrations {
|
|||
preferences.navigationModeWebtoon().set(5)
|
||||
}
|
||||
}
|
||||
if (oldVersion < 90) {
|
||||
val oldSecureScreen = prefs.getBoolean("secure_screen", false)
|
||||
if (oldSecureScreen) {
|
||||
preferences.secureScreen().set(PreferenceValues.SecureScreenMode.ALWAYS)
|
||||
}
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
|
|
@ -189,8 +189,6 @@ object PreferenceKeys {
|
|||
|
||||
const val lastUnlock = "last_unlock"
|
||||
|
||||
const val secureScreen = "secure_screen"
|
||||
|
||||
const val hideNotificationContent = "hide_notification_content"
|
||||
|
||||
const val removeArticles = "remove_articles"
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package eu.kanade.tachiyomi.data.preference
|
||||
|
||||
import eu.kanade.tachiyomi.R
|
||||
|
||||
// Library
|
||||
const val MANGA_NON_COMPLETED = "manga_ongoing"
|
||||
const val MANGA_HAS_UNREAD = "manga_fully_read"
|
||||
|
@ -9,3 +11,11 @@ const val MANGA_NON_READ = "manga_started"
|
|||
const val DEVICE_ONLY_ON_WIFI = "wifi"
|
||||
const val DEVICE_CHARGING = "ac"
|
||||
const val DEVICE_BATTERY_NOT_LOW = "battery_not_low"
|
||||
|
||||
object PreferenceValues {
|
||||
enum class SecureScreenMode(val titleResId: Int) {
|
||||
ALWAYS(R.string.always),
|
||||
INCOGNITO(R.string.incognito_mode),
|
||||
NEVER(R.string.never),
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,6 +32,7 @@ import java.text.DateFormat
|
|||
import java.text.SimpleDateFormat
|
||||
import java.util.Locale
|
||||
import eu.kanade.tachiyomi.data.preference.PreferenceKeys as Keys
|
||||
import eu.kanade.tachiyomi.data.preference.PreferenceValues as Values
|
||||
|
||||
fun <T> Preference<T>.asImmediateFlow(block: (value: T) -> Unit): Flow<T> {
|
||||
block(get())
|
||||
|
@ -325,7 +326,7 @@ class PreferencesHelper(val context: Context) {
|
|||
|
||||
fun lastUnlock() = flowPrefs.getLong(Keys.lastUnlock, 0)
|
||||
|
||||
fun secureScreen() = flowPrefs.getBoolean(Keys.secureScreen, false)
|
||||
fun secureScreen() = flowPrefs.getEnum("secure_screen_v2", Values.SecureScreenMode.INCOGNITO)
|
||||
|
||||
fun hideNotificationContent() = prefs.getBoolean(Keys.hideNotificationContent, false)
|
||||
|
||||
|
|
|
@ -488,6 +488,7 @@ open class MainActivity : BaseActivity<MainActivityBinding>(), DownloadServiceLi
|
|||
.asImmediateFlowIn(lifecycleScope) {
|
||||
binding.toolbar.setIncognitoMode(it)
|
||||
binding.searchToolbar.setIncognitoMode(it)
|
||||
SecureActivityDelegate.setSecure(this)
|
||||
}
|
||||
preferences.sideNavIconAlignment()
|
||||
.asImmediateFlowIn(lifecycleScope) {
|
||||
|
|
|
@ -82,6 +82,7 @@ import eu.kanade.tachiyomi.ui.reader.viewer.pager.PagerViewer
|
|||
import eu.kanade.tachiyomi.ui.reader.viewer.pager.R2LPagerViewer
|
||||
import eu.kanade.tachiyomi.ui.reader.viewer.pager.VerticalPagerViewer
|
||||
import eu.kanade.tachiyomi.ui.reader.viewer.webtoon.WebtoonViewer
|
||||
import eu.kanade.tachiyomi.ui.security.SecureActivityDelegate
|
||||
import eu.kanade.tachiyomi.ui.webview.WebViewActivity
|
||||
import eu.kanade.tachiyomi.util.storage.getUriCompat
|
||||
import eu.kanade.tachiyomi.util.system.contextCompatColor
|
||||
|
@ -294,6 +295,11 @@ class ReaderActivity : BaseRxActivity<ReaderPresenter>() {
|
|||
binding.chaptersSheet.chaptersBottomSheet.setup(this)
|
||||
config = ReaderConfig()
|
||||
initializeMenu()
|
||||
|
||||
preferences.incognitoMode()
|
||||
.asImmediateFlowIn(lifecycleScope) {
|
||||
SecureActivityDelegate.setSecure(this)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -2,8 +2,10 @@ package eu.kanade.tachiyomi.ui.security
|
|||
|
||||
import android.app.Activity
|
||||
import android.content.Intent
|
||||
import android.view.Window
|
||||
import android.view.WindowManager
|
||||
import androidx.biometric.BiometricManager
|
||||
import eu.kanade.tachiyomi.data.preference.PreferenceValues
|
||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||
import eu.kanade.tachiyomi.ui.main.SearchActivity
|
||||
import eu.kanade.tachiyomi.util.system.AuthenticatorUtil
|
||||
|
@ -16,15 +18,21 @@ object SecureActivityDelegate {
|
|||
|
||||
var locked: Boolean = true
|
||||
|
||||
fun setSecure(activity: Activity?, force: Boolean? = null) {
|
||||
val enabled = force ?: preferences.secureScreen().get()
|
||||
fun setSecure(activity: Activity?) {
|
||||
val incognitoMode = preferences.incognitoMode().get()
|
||||
val enabled = when (preferences.secureScreen().get()) {
|
||||
PreferenceValues.SecureScreenMode.ALWAYS -> true
|
||||
PreferenceValues.SecureScreenMode.INCOGNITO -> incognitoMode
|
||||
else -> false
|
||||
}
|
||||
activity?.window?.setSecureScreen(enabled)
|
||||
}
|
||||
|
||||
private fun Window.setSecureScreen(enabled: Boolean) {
|
||||
if (enabled) {
|
||||
activity?.window?.setFlags(
|
||||
WindowManager.LayoutParams.FLAG_SECURE,
|
||||
WindowManager.LayoutParams.FLAG_SECURE,
|
||||
)
|
||||
setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE)
|
||||
} else {
|
||||
activity?.window?.clearFlags(WindowManager.LayoutParams.FLAG_SECURE)
|
||||
clearFlags(WindowManager.LayoutParams.FLAG_SECURE)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -178,7 +178,12 @@ fun <T> ListPreference.bindTo(preference: com.fredporciuncula.flow.preferences.P
|
|||
defaultValue = preference.defaultValue.toString()
|
||||
}
|
||||
|
||||
inline fun <T> IntListMatPreference.bindTo(preference: com.fredporciuncula.flow.preferences.Preference<T>) {
|
||||
fun <T> ListMatPreference.bindTo(preference: com.fredporciuncula.flow.preferences.Preference<T>) {
|
||||
key = preference.key
|
||||
defaultValue = preference.defaultValue.toString()
|
||||
}
|
||||
|
||||
fun <T> IntListMatPreference.bindTo(preference: com.fredporciuncula.flow.preferences.Preference<T>) {
|
||||
key = preference.key
|
||||
defaultValue = preference.defaultValue
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ import androidx.fragment.app.FragmentActivity
|
|||
import androidx.preference.PreferenceScreen
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.preference.PreferenceKeys
|
||||
import eu.kanade.tachiyomi.data.preference.PreferenceValues
|
||||
import eu.kanade.tachiyomi.data.preference.asImmediateFlowIn
|
||||
import eu.kanade.tachiyomi.ui.security.SecureActivityDelegate
|
||||
import eu.kanade.tachiyomi.util.system.AuthenticatorUtil.isAuthenticationSupported
|
||||
|
@ -45,22 +46,25 @@ class SettingsSecurityController : SettingsController() {
|
|||
}
|
||||
}
|
||||
|
||||
switchPreference {
|
||||
key = PreferenceKeys.secureScreen
|
||||
titleRes = R.string.secure_screen
|
||||
summaryRes = R.string.hide_app_block_screenshots
|
||||
defaultValue = false
|
||||
|
||||
onChange {
|
||||
it as Boolean
|
||||
SecureActivityDelegate.setSecure(activity, it)
|
||||
true
|
||||
}
|
||||
}
|
||||
switchPreference {
|
||||
key = PreferenceKeys.hideNotificationContent
|
||||
titleRes = R.string.hide_notification_content
|
||||
defaultValue = false
|
||||
}
|
||||
|
||||
listPreference(activity) {
|
||||
bindTo(preferences.secureScreen())
|
||||
titleRes = R.string.secure_screen
|
||||
entriesRes = PreferenceValues.SecureScreenMode.values().map { it.titleResId }.toTypedArray()
|
||||
entryValues = PreferenceValues.SecureScreenMode.values().map { it.name }
|
||||
|
||||
onChange {
|
||||
it as String
|
||||
SecureActivityDelegate.setSecure(activity)
|
||||
true
|
||||
}
|
||||
}
|
||||
|
||||
infoPreference(R.string.secure_screen_summary)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,6 +25,7 @@ import androidx.core.view.isVisible
|
|||
import androidx.core.view.marginBottom
|
||||
import androidx.core.view.updateLayoutParams
|
||||
import androidx.core.view.updatePadding
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.webkit.WebSettingsCompat.DARK_STRATEGY_WEB_THEME_DARKENING_ONLY
|
||||
import androidx.webkit.WebSettingsCompat.FORCE_DARK_OFF
|
||||
import androidx.webkit.WebSettingsCompat.FORCE_DARK_ON
|
||||
|
@ -32,8 +33,10 @@ import androidx.webkit.WebSettingsCompat.setForceDark
|
|||
import androidx.webkit.WebSettingsCompat.setForceDarkStrategy
|
||||
import androidx.webkit.WebViewFeature
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.preference.asImmediateFlowIn
|
||||
import eu.kanade.tachiyomi.databinding.WebviewActivityBinding
|
||||
import eu.kanade.tachiyomi.ui.base.activity.BaseActivity
|
||||
import eu.kanade.tachiyomi.ui.security.SecureActivityDelegate
|
||||
import eu.kanade.tachiyomi.util.system.ThemeUtil
|
||||
import eu.kanade.tachiyomi.util.system.getPrefTheme
|
||||
import eu.kanade.tachiyomi.util.system.getResourceColor
|
||||
|
@ -149,6 +152,11 @@ open class BaseWebViewActivity : BaseActivity<WebviewActivityBinding>() {
|
|||
binding.webview.restoreState(it)
|
||||
}
|
||||
}
|
||||
|
||||
preferences.incognitoMode()
|
||||
.asImmediateFlowIn(lifecycleScope) {
|
||||
SecureActivityDelegate.setSecure(this)
|
||||
}
|
||||
}
|
||||
|
||||
private fun setWebDarkMode() {
|
||||
|
|
|
@ -7,6 +7,12 @@
|
|||
android:title="@string/back"
|
||||
app:showAsAction="ifRoom" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_open_in_app"
|
||||
android:icon="@drawable/ic_browse_24dp"
|
||||
android:title="@string/open_in_app"
|
||||
app:showAsAction="ifRoom" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_web_forward"
|
||||
android:icon="@drawable/ic_arrow_forward_24dp"
|
||||
|
|
|
@ -702,6 +702,7 @@
|
|||
<string name="check_for_updates">Check for updates</string>
|
||||
<string name="updated_to_">Updated to v%1$s</string>
|
||||
<string name="secure_screen">Secure screen</string>
|
||||
<string name="secure_screen_summary">Secure screen hides app contents when switching apps and block screenshots</string>
|
||||
<string name="hide_bottom_nav">Auto-hide bottom navigation</string>
|
||||
<string name="side_nav_icon_alignment">Side navigation icon alignment</string>
|
||||
<string name="use_side_navigation">Use side navigation</string>
|
||||
|
@ -714,7 +715,6 @@
|
|||
<string name="expanded_toolbar">Expanded toolbar</string>
|
||||
<string name="show_larger_toolbar">Show a larger, expanded toolbar at the top of most pages (does not show on smaller devices regardless of setting)</string>
|
||||
<string name="hides_on_scroll">Hides when scrolling</string>
|
||||
<string name="hide_app_block_screenshots">Hide app contents when switching apps and block screenshots</string>
|
||||
<string name="hide_notification_content">Hide notification content</string>
|
||||
<string name="security">Security</string>
|
||||
<string name="starting_screen">Starting screen</string>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue