It's "all of the above", sort of.
Sure, stable hydrometer readings are part of it. But to verify that it's done (and not stuck or slow), there are some other signs as well. One is that the beer will start to clear and visible activity will slow or stop.
When checking the hydrometer readings, not only should they be stable, but they should be at a reasonably expected FG. What I mean is that if the hydrometer reads 1.042 for three days, for most beers that wouldn't be finished- that would be stuck.
But if it reads 1.018 for more than three days (even if slightly higher than expected), it's starting to clear, the krausen has dropped, and it looks like beer, then it's done.
A reading that is higher than is expected should be investigated to make sure it's done.