¿Existe un cambio de configuración para la modificación de Invertir colores?

8

Me gustaría saber si Android tiene algún indicador para agregar configChangesen un atributo de Actividad en el Manifiesto de Android para modificaciones en la opción Invertir colores del dispositivo.

El documento de Android muestra los siguientes indicadores: - "mcc"
- "mnc"
- "locale"
- "pantalla táctil"
- "teclado"
- "keyboardHidden"
- "navigation"
- "screenLayout"
- "fontScale"
- "fontScale" - "uiMode" // este es para el modo oscuro
- "orientación"
- "densidad"
- "tamaño de pantalla"
- " tamaño de pantalla más pequeño"

Pero ninguno de ellos lidia con eso.


Opción de colores invertidos:

ingrese la descripción de la imagen aquí

Augusto Carmo
fuente
1
No veo "invertir colores" en la Configuración de Android 10 (Pixel 3) o Android 9 (Galaxy S9). ¿Dónde ves esta opción?
CommonsWare
2
¡Gracias por señalar eso! Jugando con él, sospecho que es puramente una cuestión de GPU y no es realmente un cambio de configuración, pero eso es solo una suposición. ¿Su actividad sufre un cambio de configuración cuando se alterna?
CommonsWare
1
AFAIK, onConfigurationChanged()solo sería despedido si tuviera el android:configChangesatributo correcto y se excluyera del comportamiento de cambio de configuración predeterminado. ¿Su actividad se destruye y se recrea después de cambiar la palanca de "invertir colores"?
CommonsWare
1
OK, entonces definitivamente es un cambio de configuración. A menos que haya algún mensaje del sistema en Logcat, no sé cómo determinar qué tipo de cambio de configuración es y cómo optaría por no hacerlo android:configChanges. Si probó todos los documentados sin éxito, entonces el android:configChangesvalor no está documentado o no existe (es decir, no puede optar por no participar) ... y ninguna de esas son excelentes opciones. :-(
CommonsWare
1
@CommonsWare Me temo que Android no tiene una bandera para la modificación de la inversión de color. Probé con todos los indicadores disponibles en los documentos ( mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|screenLayout|fontScale|uiMode|orientation|density|screenSize|smallestScreenSize) y ninguno hizo que la onConfigurationChangeddevolución de llamada se disparara = /. De todos modos, me gustaría agradecerles un montón por su atención, tiempo y dispuestos a ayudar \ o /
Augusto Carmo

Respuestas:

1

Si necesita verificar el estado de los colores invertidos, veo solo dos posibles soluciones.

Comprobación manual. Tomado de esta pregunta:
Obtenga el estado de activación / desactivación y de accesibilidad Modo de inversión de color

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
    }

Y también puedes usar AccessibilityService.
Al cambiar el color de inversión, tengo tal 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;

Entonces puedo verificar el estado actual de alguna manera como esta:

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

No estoy seguro de que funcione para todos los dispositivos.
Nunca lo he hecho antes, así que tal vez haya una mejor solución.

Merov
fuente