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.
"uiMode"
and if that doesn't work, then "invert colors" is something that device manufacturer has added by customising Android, you will need to go read their custom SDK docs rather than vanilla Android docs. What Make Model & Version of Android have you screenshotted that off? – ResemblanceonConfigurationChanged(Configuration)
is not fired when an inversion of colors modification occurs =/. It would be nice if it were, as it's directly related to the ui. – ExhortativeonConfigurationChanged()
would only get fired if you had the rightandroid:configChanges
attribute and opted out of the default configuration change behavior. Is your activity destroyed and recreated after switching the "invert colors" toggle? – Mccullochandroid:configChanges
. If you tried all the documented ones without success, then either theandroid:configChanges
value is undocumented or does not exist (i.e., you can't opt out of it)... and neither of those are great options. :-( – Mccullochmnc|locale|touchscreen|keyboard|keyboardHidden|navigation|screenLayout|fontScale|uiMode|orientation|density|screenSize|smallestScreenSize
) and none made theonConfigurationChanged
callback be fired =/. Anyways, I would like to thank you a bunch for your attention, time and willing to help \o/ – Exhortative