Есть ли configChanges для модификации Invert Colors - PullRequest
8 голосов
/ 28 января 2020

Хотелось бы узнать, есть ли у Android какой-либо флаг, добавляемый в configChanges в атрибуте Activity в AndroidManifest для изменений в опции Invert Colors устройства.

android do c показывает следующие флаги: - "m cc"
- "mn c"
- "locale"
- " сенсорный экран "
-" клавиатура "
-" клавиатура скрыта "
-" навигация "
-" screenLayout "
-" fontScale "
-" uiMode "// это для темный режим
- «ориентация»
- «плотность»
- «screenSize»
- «smalllestScreenSize»

Но никто из них не имеет с этим дело.


Вариант инвертирования цветов:

enter image description here

1 Ответ

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

Если вам нужно проверить состояние инвертированных цветов, я вижу только два возможных решения.

Ручная проверка. Взято из этого вопроса:
Получить включение / отключение статуса и доступности Режим инверсии цвета

fun isInversionModeEnabled(): Boolean {
        var isInversionEnabled = false
        val accessibilityEnabled = try {
            Settings.Secure.getInt(contentResolver, Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED)
        } catch (e: Settings.SettingNotFoundException) {
            Log.d(TAG, "Error finding setting ACCESSIBILITY_DISPLAY_INVERSION_ENABLED: " + e.message)
            Log.d(TAG, "Checking negative color enabled status")
            val SEM_HIGH_CONTRAST = "high_contrast"
            Settings.System.getInt(contentResolver, SEM_HIGH_CONTRAST, 0)
        }
        if (accessibilityEnabled == 1) {
            Log.d(TAG, "inversion  or negative colour is enabled")
            isInversionEnabled = true
        } else {
            Log.d(TAG, "inversion  or negative colour is disabled")
        }
        return isInversionEnabled
    }

А также вы можете использовать AccessibilityService.
Вкл. цвет инверсии изменился, у меня есть такое событие:

EventType: TYPE_VIEW_CLICKED; EventTime: 170718119; PackageName: com.android.systemui; 
MovementGranularity: 0; Action: 0; ContentChangeTypes: []; WindowChangeTypes: [] [
ClassName: android.widget.Switch; Text: [Invert colors]; ContentDescription: On;

Так что я могу проверить текущее состояние как-то так:

override fun onAccessibilityEvent(event: AccessibilityEvent) {
        val isInvertedColorsChanged = event.text.contains("Invert colors")
        if (isInvertedColorsChanged) {
            val isEnabled = event.contentDescription == "On"
            //do what you need
        }
    }

Я не уверен, что это будет работать для каждого устройства .
Я никогда не делал этого раньше, так что, возможно, есть лучшее решение.

...