Existe uma configuração para a modificação de cores invertidas

8

Gostaria de saber se o Android tem algum sinalizador para ser adicionado a configChangesum atributo de Atividade no AndroidManifest para modificações na opção Inverter cores do dispositivo.

O documento do Android mostra os seguintes sinalizadores: - "mcc"
- "mnc"
- "locale"
- "touchscreen"
- "teclado"
- "keyboardHidden"
- "navigation"
- "screenLayout"
- "fontScale"
- "uiMode" // este é para o modo escuro
- "orientação"
- "densidade"
- "screenSize"
- "smallestScreenSize"

Mas nenhum deles lida com isso.


Inverter cores opção:

insira a descrição da imagem aqui

Augusto Carmo
fonte
1
Não vejo "cores invertidas" em Configurações no Android 10 (Pixel 3) ou Android 9 (Galaxy S9). Onde você está vendo essa opção?
CommonsWare 28/01
2
Obrigado por apontar isso! Brincando com isso, eu suspeito que isso é puramente uma coisa da GPU e não é realmente uma alteração na configuração, mas isso é apenas um palpite. Sua atividade passa por uma alteração na configuração quando é alternada?
CommonsWare 28/01
1
AFAIK, onConfigurationChanged()só seria demitido se você tivesse o android:configChangesatributo certo e optasse pelo comportamento de alteração de configuração padrão. Sua atividade é destruída e recriada após alternar a alternância de "cores invertidas"?
CommonsWare
1
OK, então é definitivamente uma alteração na configuração. A menos que haja alguma mensagem do sistema no Logcat, não sei como determinar que tipo de alteração de configuração é e como você optaria por não fazê-lo android:configChanges. Se você tentou todos os documentados sem êxito, o android:configChangesvalor não está documentado ou não existe (ou seja, você não pode optar por não fazê-lo) ... e nenhum deles é uma ótima opção. :-(
CommonsWare em 29/01
1
@CommonsWare Receio que o Android não tenha um sinalizador para a modificação da inversão de cores. Testei com todos os sinalizadores disponíveis nos documentos ( mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|screenLayout|fontScale|uiMode|orientation|density|screenSize|smallestScreenSize) e nenhum fez com que o onConfigurationChangedretorno de chamada fosse acionado = /. Enfim, gostaria de agradecer a sua atenção, tempo e vontade de ajudar \ o /
Augusto Carmo

Respostas:

1

Se você precisa verificar o estado das cores invertidas, vejo apenas duas soluções possíveis.

Verificação manual. Retirado desta pergunta:
Obter ativar / desativar status e acessibilidade Modo de inversão de cores

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
    }

E também você pode usar AccessibilityService.
Na inversão de cor alterada, eu tenho esse evento:

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;

Para que eu possa verificar o estado atual de alguma forma assim:

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

Não tenho certeza se funcionará para todos os dispositivos.
Eu nunca fiz isso antes, então talvez haja uma solução melhor.

Merov
fonte