Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions app/src/main/java/com/hmndev/chronika/data/AppSettings.kt
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ data class AppSettings(
val requiredKeywords: String = "",
val themeMode: String = "system",
val dynamicColor: Boolean = true,
val motionBlur: Boolean = false,
val compact: Boolean = false,
val showRawPayload: Boolean = false,
val language: String = "",
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/java/com/hmndev/chronika/data/SettingsStore.kt
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ object SettingsStore {
putString("requiredKeywords", next.requiredKeywords)
putString("themeMode", next.themeMode)
putBoolean("dynamicColor", next.dynamicColor)
putBoolean("motionBlur", next.motionBlur)
putBoolean("compact", next.compact)
putBoolean("showRawPayload", next.showRawPayload)
putString("language", next.language)
Expand Down Expand Up @@ -112,6 +113,7 @@ object SettingsStore {
requiredKeywords = prefs.getString("requiredKeywords", defaults.requiredKeywords).orEmpty(),
themeMode = prefs.getString("themeMode", defaults.themeMode).orEmpty().ifBlank { defaults.themeMode },
dynamicColor = prefs.getBoolean("dynamicColor", defaults.dynamicColor),
motionBlur = prefs.getBoolean("motionBlur", defaults.motionBlur),
compact = prefs.getBoolean("compact", defaults.compact),
showRawPayload = prefs.getBoolean("showRawPayload", defaults.showRawPayload),
language = prefs.getString("language", defaults.language).orEmpty(),
Expand Down
9 changes: 9 additions & 0 deletions app/src/main/java/com/hmndev/chronika/i18n/StringsEn.kt
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,11 @@ internal val EN_STRINGS: Map<String, String> = mapOf(
"settings.import_active_desc" to "Read the current shade via dumpsys notification",
"settings.open_shizuku" to "Open Shizuku",
"settings.open_shizuku_desc" to "Install, start or check the service",
"settings.shevery" to "Shevery",
"settings.shevery_desc" to "Instead of Shizuku, you can grant privileges via Shevery for fast startup and direct background operations",
"settings.shevery_allow" to "Allow Shevery",
"settings.open_shevery" to "Open Shevery",
"settings.open_shevery_desc" to "Install, start or check Shevery manager",
"settings.capture" to "Capture",
"settings.capture_sub" to "What and how to save",
"settings.capture_enabled" to "Capture enabled",
Expand Down Expand Up @@ -162,6 +167,10 @@ internal val EN_STRINGS: Map<String, String> = mapOf(
"settings.theme_dark" to "Dark",
"settings.dynamic" to "Dynamic color",
"settings.dynamic_desc" to "Wallpaper palette on Android 12+",
"settings.motion_blur" to "Motion blur",
"settings.motion_blur_desc" to "Blur content dynamically while scrolling lists and transitions",
"settings.system_theme_color" to "Use system theme color",
"settings.system_theme_color_desc" to "Pull accent colors from system palette and wallpaper (Android 12+)",
"settings.compact" to "Compact density",
"settings.compact_desc" to "More entries on screen",
"settings.test" to "Check notification",
Expand Down
9 changes: 9 additions & 0 deletions app/src/main/java/com/hmndev/chronika/i18n/StringsEs.kt
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,11 @@ internal val ES_STRINGS: Map<String, String> = mapOf(
"settings.import_active_desc" to "Leer el panel actual con dumpsys notification",
"settings.open_shizuku" to "Abrir Shizuku",
"settings.open_shizuku_desc" to "Instalar, iniciar o comprobar el servicio",
"settings.shevery" to "Shevery",
"settings.shevery_desc" to "En lugar de Shizuku, puedes otorgar privilegios a través de Shevery para un inicio rápido y operaciones directas en segundo plano",
"settings.shevery_allow" to "Permitir Shevery",
"settings.open_shevery" to "Abrir Shevery",
"settings.open_shevery_desc" to "Instalar, iniciar o verificar el gestor Shevery",
"settings.capture" to "Captura",
"settings.capture_sub" to "Qué y cómo guardar",
"settings.capture_enabled" to "Captura activada",
Expand Down Expand Up @@ -162,6 +167,10 @@ internal val ES_STRINGS: Map<String, String> = mapOf(
"settings.theme_dark" to "Oscuro",
"settings.dynamic" to "Color dinámico",
"settings.dynamic_desc" to "Paleta del fondo de pantalla en Android 12+",
"settings.motion_blur" to "Desenfoque de movimiento",
"settings.motion_blur_desc" to "Desenfocar el contenido dinámicamente al desplazarse por listas y transiciones",
"settings.system_theme_color" to "Usar colores del sistema",
"settings.system_theme_color_desc" to "Obtener colores de acento de la paleta del sistema y fondo de pantalla (Android 12+)",
"settings.compact" to "Densidad compacta",
"settings.compact_desc" to "Más registros en pantalla",
"settings.test" to "Comprobar notificación",
Expand Down
9 changes: 9 additions & 0 deletions app/src/main/java/com/hmndev/chronika/i18n/StringsKk.kt
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,11 @@ internal val KK_STRINGS: Map<String, String> = mapOf(
"settings.import_active_desc" to "Ағымдағы панельді dumpsys notification арқылы оқу",
"settings.open_shizuku" to "Shizuku ашу",
"settings.open_shizuku_desc" to "Қызметті орнату, іске қосу немесе тексеру",
"settings.shevery" to "Shevery",
"settings.shevery_desc" to "Shizuku орнына жылдам іске қосу және тікелей фондық жұмыс үшін Shevery арқылы артықшылықтар бере аласыз",
"settings.shevery_allow" to "Shevery рұқсаты",
"settings.open_shevery" to "Shevery-ді ашу",
"settings.open_shevery_desc" to "Shevery менеджерін орнату, іске қосу немесе тексеру",
"settings.capture" to "Ұстау",
"settings.capture_sub" to "Нені және қалай сақтау",
"settings.capture_enabled" to "Ұстау қосулы",
Expand Down Expand Up @@ -162,6 +167,10 @@ internal val KK_STRINGS: Map<String, String> = mapOf(
"settings.theme_dark" to "Қараңғы",
"settings.dynamic" to "Динамикалық түс",
"settings.dynamic_desc" to "Android 12+ жүйесіндегі тұсқағаз палитрасы",
"settings.motion_blur" to "Қозғалыстағы бұлдырату",
"settings.motion_blur_desc" to "Тізімдерді айналдыру және ауысулар кезінде мазмұнды динамикалық түрде бұлдырату",
"settings.system_theme_color" to "Жүйелік тақырып түсін пайдалану",
"settings.system_theme_color_desc" to "Жүйелік палитра мен тұсқағаздан екпінді түстерді алу (Android 12+)",
"settings.compact" to "Ықшам тығыздық",
"settings.compact_desc" to "Экранда көбірек жазба",
"settings.test" to "Хабарламаны тексеру",
Expand Down
9 changes: 9 additions & 0 deletions app/src/main/java/com/hmndev/chronika/i18n/StringsPt.kt
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,11 @@ internal val PT_STRINGS: Map<String, String> = mapOf(
"settings.import_active_desc" to "Ler o painel atual via dumpsys notification",
"settings.open_shizuku" to "Abrir Shizuku",
"settings.open_shizuku_desc" to "Instalar, iniciar ou verificar o serviço",
"settings.shevery" to "Shevery",
"settings.shevery_desc" to "Em vez do Shizuku, você pode conceder privilégios via Shevery para inicialização rápida e operações diretas em segundo plano",
"settings.shevery_allow" to "Permitir Shevery",
"settings.open_shevery" to "Abrir Shevery",
"settings.open_shevery_desc" to "Instalar, iniciar ou verificar o gerenciador Shevery",
"settings.capture" to "Captura",
"settings.capture_sub" to "O que e como salvar",
"settings.capture_enabled" to "Captura ativada",
Expand Down Expand Up @@ -162,6 +167,10 @@ internal val PT_STRINGS: Map<String, String> = mapOf(
"settings.theme_dark" to "Escuro",
"settings.dynamic" to "Cor dinâmica",
"settings.dynamic_desc" to "Paleta do papel de parede no Android 12+",
"settings.motion_blur" to "Desfoque de movimento",
"settings.motion_blur_desc" to "Desfocar o conteúdo dinamicamente ao rolar listas e transições",
"settings.system_theme_color" to "Usar cor do tema do sistema",
"settings.system_theme_color_desc" to "Obter cores de destaque da paleta do sistema e papel de parede (Android 12+)",
"settings.compact" to "Densidade compacta",
"settings.compact_desc" to "Mais registros na tela",
"settings.test" to "Verificar notificação",
Expand Down
9 changes: 9 additions & 0 deletions app/src/main/java/com/hmndev/chronika/i18n/StringsRu.kt
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,11 @@ internal val RU_STRINGS: Map<String, String> = mapOf(
"settings.import_active_desc" to "Прочитать текущую панель через dumpsys notification",
"settings.open_shizuku" to "Открыть Shizuku",
"settings.open_shizuku_desc" to "Установить, запустить или проверить сервис",
"settings.shevery" to "Shevery",
"settings.shevery_desc" to "Вместо Shizuku можно предоставить привилегии через Shevery для быстрого запуска и прямой фоновой работы",
"settings.shevery_allow" to "Разрешить Shevery",
"settings.open_shevery" to "Открыть Shevery",
"settings.open_shevery_desc" to "Установить, запустить или проверить менеджер Shevery",
"settings.capture" to "Захват",
"settings.capture_sub" to "Что и как сохранять",
"settings.capture_enabled" to "Захват включён",
Expand Down Expand Up @@ -162,6 +167,10 @@ internal val RU_STRINGS: Map<String, String> = mapOf(
"settings.theme_dark" to "Тёмная",
"settings.dynamic" to "Динамический цвет",
"settings.dynamic_desc" to "Палитра обоев на Android 12+",
"settings.motion_blur" to "Размытие в движении",
"settings.motion_blur_desc" to "Динамически размывать контент при прокрутке списков и переходах",
"settings.system_theme_color" to "Палитра цветов из системы",
"settings.system_theme_color_desc" to "Использовать системные акцентные цвета и палитру обоев (Android 12+)",
"settings.compact" to "Компактная плотность",
"settings.compact_desc" to "Больше записей на экране",
"settings.test" to "Проверить уведомление",
Expand Down
9 changes: 9 additions & 0 deletions app/src/main/java/com/hmndev/chronika/i18n/StringsZh.kt
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,11 @@ internal val ZH_STRINGS: Map<String, String> = mapOf(
"settings.import_active_desc" to "通过 dumpsys notification 读取当前通知栏",
"settings.open_shizuku" to "打开 Shizuku",
"settings.open_shizuku_desc" to "安装、启动或检查服务",
"settings.shevery" to "Shevery",
"settings.shevery_desc" to "你可以通过 Shevery 授予特权来代替 Shizuku,实现极速启动与直接后台操作",
"settings.shevery_allow" to "允许 Shevery",
"settings.open_shevery" to "打开 Shevery",
"settings.open_shevery_desc" to "安装、启动或检查 Shevery 管理器",
"settings.capture" to "捕获",
"settings.capture_sub" to "保存什么以及如何保存",
"settings.capture_enabled" to "捕获已开启",
Expand Down Expand Up @@ -162,6 +167,10 @@ internal val ZH_STRINGS: Map<String, String> = mapOf(
"settings.theme_dark" to "深色",
"settings.dynamic" to "动态取色",
"settings.dynamic_desc" to "Android 12+ 的壁纸配色",
"settings.motion_blur" to "动态模糊",
"settings.motion_blur_desc" to "在滚动列表和页面过渡时对内容应用动态模糊",
"settings.system_theme_color" to "使用系统主题颜色",
"settings.system_theme_color_desc" to "从系统调色板和壁纸中提取强调色(Android 12+)",
"settings.compact" to "紧凑密度",
"settings.compact_desc" to "屏幕显示更多记录",
"settings.test" to "检查通知",
Expand Down
107 changes: 71 additions & 36 deletions app/src/main/java/com/hmndev/chronika/shizuku/ShizukuManager.kt
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,12 @@ data class ShizukuState(
val version: Int = 0,
val message: String = S["shizuku.not_running"],
val backend: PrivilegedBackend = PrivilegedBackend.NONE,
val sheveryAvailable: Boolean = false,
val sheveryPermissionGranted: Boolean = false,
val sheveryVersion: Int = 0,
val shizukuAvailable: Boolean = false,
val shizukuPermissionGranted: Boolean = false,
val shizukuVersion: Int = 0,
)

data class ShellResult(
Expand Down Expand Up @@ -96,49 +102,86 @@ object ShizukuManager {

fun refresh(forcedPermission: Boolean? = null) {
val sheveryAvailable = runCatching { SheveryPrivilege.pingBinder() }.getOrDefault(false)
if (sheveryAvailable) {
val version = runCatching { SheveryPrivilege.getVersion() }.getOrDefault(0)
val permission = when {
forcedPermission != null -> forcedPermission
else -> runCatching {
SheveryPrivilege.checkSelfPermission() == PackageManager.PERMISSION_GRANTED
}.getOrDefault(false)
}
val message = when {
!permission -> S["shizuku.permission_needed"]
else -> S.f("shizuku.active", version).replace("Shizuku", "Shevery")
}
_state.value = ShizukuState(
available = true,
permissionGranted = permission,
version = version,
message = message,
backend = PrivilegedBackend.SHEVERY
)
return
val sheveryVersion = if (sheveryAvailable) runCatching { SheveryPrivilege.getVersion() }.getOrDefault(0) else 0
val sheveryPermission = when {
!sheveryAvailable -> false
forcedPermission != null && _state.value.backend == PrivilegedBackend.SHEVERY -> forcedPermission
else -> runCatching {
SheveryPrivilege.checkSelfPermission() == PackageManager.PERMISSION_GRANTED
}.getOrDefault(false)
}

val shizukuAvailable = runCatching { Shizuku.pingBinder() }.getOrDefault(false)
val version = if (shizukuAvailable) {
val shizukuVersion = if (shizukuAvailable) {
runCatching { Shizuku.getVersion() }.getOrDefault(0)
} else {
0
}
val permission = when {
val shizukuPermission = when {
!shizukuAvailable -> false
forcedPermission != null -> forcedPermission
forcedPermission != null && _state.value.backend == PrivilegedBackend.SHIZUKU -> forcedPermission
runCatching { Shizuku.isPreV11() }.getOrDefault(true) -> false
else -> runCatching {
Shizuku.checkSelfPermission() == PackageManager.PERMISSION_GRANTED
}.getOrDefault(false)
}

if (sheveryAvailable) {
val message = when {
!sheveryPermission -> S["shizuku.permission_needed"]
else -> S.f("shizuku.active", sheveryVersion).replace("Shizuku", "Shevery")
}
_state.value = ShizukuState(
available = true,
permissionGranted = sheveryPermission,
version = sheveryVersion,
message = message,
backend = PrivilegedBackend.SHEVERY,
sheveryAvailable = true,
sheveryPermissionGranted = sheveryPermission,
sheveryVersion = sheveryVersion,
shizukuAvailable = shizukuAvailable,
shizukuPermissionGranted = shizukuPermission,
shizukuVersion = shizukuVersion
)
return
}

val backend = if (shizukuAvailable) PrivilegedBackend.SHIZUKU else PrivilegedBackend.NONE
val message = when {
!shizukuAvailable -> S["shizuku.unavailable"]
!permission -> S["shizuku.permission_needed"]
else -> S.f("shizuku.active", version)
!shizukuPermission -> S["shizuku.permission_needed"]
else -> S.f("shizuku.active", shizukuVersion)
}
_state.value = ShizukuState(
available = shizukuAvailable,
permissionGranted = shizukuPermission,
version = shizukuVersion,
message = message,
backend = backend,
sheveryAvailable = false,
sheveryPermissionGranted = false,
sheveryVersion = 0,
shizukuAvailable = shizukuAvailable,
shizukuPermissionGranted = shizukuPermission,
shizukuVersion = shizukuVersion
)
}

fun requestSheveryPermission() {
runCatching {
SheveryPrivilege.requestPermission(REQUEST_CODE)
}.onFailure {
_state.value = _state.value.copy(message = S.f("shizuku.request_failed", it.message))
}
}

fun requestShizukuPermission() {
runCatching {
Shizuku.requestPermission(REQUEST_CODE)
}.onFailure {
_state.value = _state.value.copy(message = S.f("shizuku.request_failed", it.message))
}
_state.value = ShizukuState(shizukuAvailable, permission, version, message, backend)
}

fun requestPermission() {
Expand All @@ -148,18 +191,10 @@ object ShizukuManager {
return
}
if (current.backend == PrivilegedBackend.SHEVERY || SheveryPrivilege.pingBinder()) {
runCatching {
SheveryPrivilege.requestPermission(REQUEST_CODE)
}.onFailure {
_state.value = current.copy(message = S.f("shizuku.request_failed", it.message))
}
requestSheveryPermission()
return
}
runCatching {
Shizuku.requestPermission(REQUEST_CODE)
}.onFailure {
_state.value = current.copy(message = S.f("shizuku.request_failed", it.message))
}
requestShizukuPermission()
}

suspend fun runCommand(command: String): ShellResult = withContext(Dispatchers.IO) {
Expand Down
4 changes: 3 additions & 1 deletion app/src/main/java/com/hmndev/chronika/ui/ChronikaRoot.kt
Original file line number Diff line number Diff line change
Expand Up @@ -292,7 +292,9 @@ fun ChronikaRoot(viewModel: JournalViewModel) {
PermissionTools.openAccessibilitySettings(context)
},
onOpenShizuku = { PermissionTools.openShizuku(context) },
onRequestShizuku = { ShizukuManager.requestPermission() },
onRequestShizuku = { ShizukuManager.requestShizukuPermission() },
onOpenShevery = { PermissionTools.openShevery(context) },
onRequestShevery = { ShizukuManager.requestSheveryPermission() },
onGrantListener = {
scope.launch {
notify(viewModel.grantListener())
Expand Down
Loading
Loading