Augusto Carmo
Augusto Carmo

Reputation: 4964

Is there a configChanges for Invert Colors modification

I would like to know if Android has any flag to be added into configChanges in an Activity attribute in the AndroidManifest for modifications in the Invert Colors option of the device.

The android doc shows the following flags: - "mcc"
- "mnc"
- "locale"
- "touchscreen"
- "keyboard"
- "keyboardHidden"
- "navigation"
- "screenLayout"
- "fontScale"
- "uiMode" // this one is for the dark mode
- "orientation"
- "density"
- "screenSize"
- "smallestScreenSize"

But none of them deal with it.


Invert colors option:

enter image description here

Upvotes: 9

Views: 1210

Answers (1)

Merov
Merov

Reputation: 1028

If you need to check the state of inverted colors I see just two possible solutions.

Manual check. Taken from this question:
Get enable/disable status and of accessibility Colour inversion mode

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
    }

And also you can use AccessibilityService.
On inversion color changed i've got such event:

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;

So i can check the current state somehow like this:

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

I'm not sure it will work for every device.
I've never done it before, so maybe there is a better solution.

Upvotes: 1

Related Questions