How to detect whether keyboard/mouse or controller was interacted with last

I think what you want to do is: track the input events in the Game Instance (EDIT: this does not work), create an event dispatcher, and call it every time your “last controller used” changes. Then bind the events for everyone who needs to listen. Let me know if this helps.