Прочитайте настройки Samsung и других OEM темного / ночного режима - PullRequest
1 голос
/ 29 января 2020

Я унаследовал тему "Theme.AppCompat.DayNight", чтобы автоматически поддерживать темный режим на Android Q и вручную на предыдущих версиях. В разделе «Настройки» я позволяю пользователю выбрать «Вкл.», «Выкл.» Или «Автоматически» c, а затем я использую этот код:

AppCompatDelegate.setDefaultNightMode(settings.darkMode())

Где settings.darkMode :

        val darkValue =
            sharedPreferences.getString("PREF_DARK_THEME", null)
        return when (darkValue) {
            "ON" -> MODE_NIGHT_YES
            "OFF" -> MODE_NIGHT_NO
            else -> if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
                MODE_NIGHT_FOLLOW_SYSTEM
            } else {
                MODE_NIGHT_AUTO_BATTERY
            }
        }

Однако я бы хотел добавить поддержку пользовательского интерфейса Samsung One " Ночной режим ". Можно ли прочитать эту настройку системы? Я хотел бы сделать что-то вроде этого:

            ...
            else -> if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
                MODE_NIGHT_FOLLOW_SYSTEM
            } else if("samsung"==Build.MANUFACTURER && isSamsungNightModeEnabled()) {
                MODE_NIGHT_YES
            } else ...[add other brands]...
            } else {
                MODE_NIGHT_AUTO_BATTERY
            }

1 Ответ

0 голосов
/ 30 января 2020

Благодаря комментарию Павла вот что я сделал. Кажется, он работает нормально.

    fun darkMode(sharedPreferences: SharedPreferences, context: Context): Int {
        val darkValue =
            sharedPreferences.getString("PREF_DARK_THEME", null)
        return when (darkValue) {
            "ON" -> MODE_NIGHT_YES
            "OFF" -> MODE_NIGHT_NO
            else -> if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
                MODE_NIGHT_FOLLOW_SYSTEM
            } else {
                val nightModeFlags =
                    context.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK
                when (nightModeFlags) {
                    Configuration.UI_MODE_NIGHT_YES -> MODE_NIGHT_YES
                    Configuration.UI_MODE_NIGHT_NO -> MODE_NIGHT_NO
                    else -> MODE_NIGHT_AUTO_BATTERY
                }
            }
        }
    }

Я вызываю AppCompatDelegate.setDefaultNightMode(darkMode(preferences, this)) из метода onResume () действия, и приложение автоматически меняет свою тему после изменения «ночного режима» устройства на панели уведомлений. Протестировано на ноте 9.

...