This seems to assume that the expected behavior when you want to close a Popup (because of some other action), you should call Popup.dismiss() instead of PopupPresenter.dismiss().

However, I think it should be the opposite. The actions should be taken on the presenter. The presenter telling the view to dismiss itself is a side effect.

Here is a specific example where it can cause trouble (and actually did in our app):

a) There's a dialog visible
b) The activity rotates
c) The view hierarchy attached to the window of the dying activity is detached. We therefore call dropView() on the PopupPresenter
d) PopupPresenter.dropView calls Popup.dismiss()

=> This call to Popup.dismiss() just dismisses the dialog (which is good), however the PopupPresenter keeps its whatToShow, and is ready to show it again when the next activity view hierarchy is attached.

When I call PopupPresenter.dismiss(), I want that to mean: "I really want to leave that dialog and move the user to some place else". Whereas calling Popup.dismiss() should not have any impact on the current "state" of the app, it's just view manipulation. Ideally Popup.dismiss() shouldn't be accessible to external stakeholders.