Revert to a method where we internally track location state.

For #359 

@cmather - can you eyeball this and let me know if it's alright?

All the tests pass and it appears to work fine on the apps I've tested.